Ускорение работы с sqlite
От: 00011011  
Дата: 15.07.23 10:07
Оценка:
Пишу простенький локальный веб-сервер для работы с данными из соцсети VK. Это мой личный учебный проект, чисто для локального использования. Ни с Go ни с Sqlite ранее не работад.
С помощью API выкачиваю данные, затем закладываю их в базу на sqlite.
Я ожидал что все это будет работать очень быстро, а оно реально тормозит.
Скачивание по 1000 записей происходит быстро, а вот добавление в базу (операция "upsert", т.е. добавление или обновление если данные уже есть) — крайне медленно, в среднем по полсекунды на запись. Т.е. просто глазами видно как в консоль раз в полсекунды-секунду выводятся строчки с именами юзеров.
Сделано конечно в лоб. Вот например цикл по массиву скачанной порции данных
for _, member := range members.Items {
    name := member.FirstName + " " + member.LastName
    fmt.Println(name)
    app.UpsertUser(member.ID, name)
}

Вот функция добавления и обновления юзера
func (app *Application) UpsertUser(uid int, name string) {
    user := User{Uid: uid}
    app.db.FirstOrCreate(&user, User{Uid: uid})
    if !(name == "DELETED" && user.Name != "DELETED") {
        user.Name = name
    }
    app.db.Save(&user)
}

Для работы с sqlite используется библиотека GORM.
Откуда такие огромные задержки и как можно ускорить работу с базой?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.