Форум программистов, компьютерный форум, киберфорум
sqltd1
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

SQLite и GoLang

Запись от sqltd1 размещена 28.05.2022 в 11:59
Показов 1871 Комментарии 0
Метки go, golang, sqlite

Краткий обзор драйверов.

Тонкий момент в теме "SQLite и GoLang" состоит в том, что SQLite является встраиваемым движком БД.

Когда БД находится где-то там далеко, и нужно выполнить кучу быстрых запросов, осознаешь, что накладные расходы на взаимодействие с сервером могут быть достаточно велики и смиряешься с этим.

С другой стороны, когда движок БД является встроенным в приложение, надеешься на то, что у тебя все будет летать.

Драйвера SQLite для GoLang подразделяются на нативные, реализованные на GoLang, и подключаемые через CGO (подсистема Go для подключения библиотек, написанных на C.

CGO-драйверы

Автор mattn

Наиболее известный (5700 звезд на гитхабе) - это драйвер от mattn https://github.com/mattn/go-sqlite3
Он релизует стандартный интерфейс database/sql. Это безусловный плюс, кроме того, mattn активно участвует
в жизни GoLang сообщества, и этот проект активно поддерживается.

Минусы начинают вылезать если вы хотите выполнять большое количество быстрых запросов.
Прослойки database/sql и CGO отнюдь не способствуют увеличению скорости.

Из интересных особенностей - добавлена возможность добавления виртуальных таблиц и пользовательских функций.
Но наличие замедляющих прослоек делают эти возможности бессмысленными (особенно это относится к пользовательским функциям).

Я достаточно активно использовал и использую этот драйвер.

Автор crawshaw

Второй по популярности (430 звезд на гитхабе) - https://github.com/crawshaw/sqlite

Этот драйвер обеспечивает доступ к значительной части API SQLite из GoLang. То есть прослойка database/sql в этом случае исключается.
Но придется разбираться не с простым и общим API database/sql, а уже с API SQLite.

Плюсы - слегка увеличившаяся скорость (вау-эффекта нет, просто быстрее процентов на 20). Если нужно получать доступ к специфическому функционалу SQLite, то этот драйвер предоставляет много возможностей (но покрытие не полное).
Разработчик активно использует его в своих разработках и честно предупреждает, что тот функционал API SQLite,
который ему нужен, он реализовал, расширять функционал он будет, только если это его заинтересует. Похоже, что в последнее время его интересы сместились в другую область.

Я его пробовал, но и только. Для меня существенным является совместимость с database/sql.

Нативные драйверы.

Появились совсем недавно.

Автор modernc

Драйвер modernc - это порт SQLite c C на Go. За счет отсутствия CGO должен показывать более хорошие результаты на коротких запросах. Я тестировал его примерно
в октябре 2021 года. К сожалению результаты тестов не впечатлили (процентов на 10-20 медленнее, чем при использовании драйвера от mattn).
Документация находится здесь https://pkg.go.dev/modernc.org/sqlite.
Проект активно развивается. К сожалению, текущую версию протестировать сейчас лень, поскольку я в последнее время сделал ставку на duckDB и все время уходит на него.

Автор zombiezen

После того, как информация о появлении драйвера от modernc разошлась, последователи модифицировали и драйвер от crawshaw, благо там вставок на C было значительно меньше.
Этот проект доступен здесь https://github.com/zombiezen/go-sqlite


Ну и напоследок об эксперименте cvilsmeier

Интересный не CGO способ предложил https://github.com/cvilsmeier/sqinn-go
Здесь имеется SQLite-сервис (Обертка вокруг SQLite для обеспечения взаимодействия через stdin/stdout). Чистый C.
GoLang-приложение должно запустить его как дочерний процесс и взимодействовать с ним через stdin/stdout.
Тесты, выполненные cvilsmeier, показывают сопоставимую производительность с драйверами от mattn и crawshaw.

Из плюсов следует отметить простоту построения многоплатформенных приложений.
Я посмотрел реализацию протокола взаимодействия - очень примитивный. Как мне кажется у такого подхода имеется большой потенциал
в плане увеличения производительности. В общем, спасибо cvilsmeier за публичное обсуждение идеи с предоставлением работающего образца.
Метки go, golang, sqlite
Размещено в SQLite
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru