Как установить размер выборки в Голанге? - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь загрузить огромный набор данных из БД.

    func main() {
        db, err := sql.Open("mysql", "root:pass1@tcp(127.0.0.1:3306)/tuts")

        if err != nil {
            log.Print(err.Error())
        }
        defer db.Close()
        results, err := db.Query("SELECT id, name FROM tags")
        if err != nil {
            panic(err.Error()) 
        }

        for results.Next() {
            var tag Tag
            err = results.Scan(&tag.ID, &tag.Name)
            if err != nil {
                panic(err.Error()) 
            }

            log.Printf(tag.Name)
        }
}

Загружает ли программа все записи в память за один раз? Или есть способ указать размер выборки, чтобы программа загружала только n строк одновременно? Предполагая, что в базе данных есть миллион строк, я бы хотел каждый раз получать 1000 записей.

1 Ответ

0 голосов
/ 16 апреля 2019

Это будет прекрасно работать для одной строки и миллионов строк.Большинство реализаций SQL имеют понятие пакетов при чтении.Они загружают данные с диска по мере необходимости и сохраняют объем оперативной памяти низким / постоянным при необходимости.

Например, если вы выбираете 1000 строк.База данных может загрузить первые 100 строк в ОЗУ.Когда вы звоните Next(), например, когда вы достигаете 50-й строки, база данных получает еще сотню (например, строки от 100 до 201).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...