Добавить в корзинуПозвонить
Найти в Дзене
Цифровая Переплавка

🗄️ Какой SQLite-драйвер выбрать для Go: тесты показали, что всё зависит от задачи

В экосистеме Go всегда был вопрос: какой драйвер для SQLite использовать? Исторически большинство решений опирались на CGO (вызовы нативной C-библиотеки SQLite), что давало надёжность и предсказуемую скорость. Но у CGO есть и минусы: сложность кросс-компиляции, зависимость от среды, ограничения на лёгкий деплой. Именно поэтому сообщество давно ждало чисто-Go альтернативы. Недавно появился свежий бенчмарк — go-sqlite-bench, где протестировали 9 драйверов под Debian 12 на Intel i7-1165G7. Результаты показали: универсального победителя нет, и всё упирается в конкретный сценарий. В тестах использовались реальные схемы с пользователями, статьями и комментариями. Настройки SQLite заданы жёстко (PRAGMA synchronous=FULL, PRAGMA journal_mode=DELETE), что отражает боевые условия с полной надёжностью записи. Любопытно, что чисто-Go драйверы (modernc, glebarez, ncruces) пока отстают: они удобны (без CGO), но скорость часто хуже в 2–4 раза. Тем не менее факт, что они вообще работают на продакшн-наг
Оглавление
Картинка иллюстрирует бенчмаркинг SQLite-драйверов для Go: гофер, символ Go, рядом с иконкой базы данных SQLite, графиками и секундомером, подчеркивающими сравнение производительности в разных сценариях.
Картинка иллюстрирует бенчмаркинг SQLite-драйверов для Go: гофер, символ Go, рядом с иконкой базы данных SQLite, графиками и секундомером, подчеркивающими сравнение производительности в разных сценариях.

В экосистеме Go всегда был вопрос: какой драйвер для SQLite использовать? Исторически большинство решений опирались на CGO (вызовы нативной C-библиотеки SQLite), что давало надёжность и предсказуемую скорость. Но у CGO есть и минусы: сложность кросс-компиляции, зависимость от среды, ограничения на лёгкий деплой. Именно поэтому сообщество давно ждало чисто-Go альтернативы.

Недавно появился свежий бенчмарк — go-sqlite-bench, где протестировали 9 драйверов под Debian 12 на Intel i7-1165G7. Результаты показали: универсального победителя нет, и всё упирается в конкретный сценарий.

⚡️ Основные наблюдения

  • 📝 Простые вставки и чтения: здесь уверенно лидирует sqinn-go, показывая минимальные задержки.
  • 🚀 Вставки в реальных сценариях: лучше всего справляются bvinc и craw, особенно в транзакционных нагрузках.
  • 🔍 JOIN и сложные запросы: sqinn снова впереди, но CGO-драйверы bvinc и craw тоже показывают стабильность.
  • 📚 Чтение больших баз (сотни тысяч строк): CGO-драйверы вроде eaton и mattn уверенно держат позиции.
  • 🤹 Конкурентные запросы: неожиданно лучший результат показал zombie — похоже, его архитектура с modernc отлично масштабируется под многопоточность.

🛠️ Немного технических деталей

В тестах использовались реальные схемы с пользователями, статьями и комментариями. Настройки SQLite заданы жёстко (PRAGMA synchronous=FULL, PRAGMA journal_mode=DELETE), что отражает боевые условия с полной надёжностью записи.

Любопытно, что чисто-Go драйверы (modernc, glebarez, ncruces) пока отстают: они удобны (без CGO), но скорость часто хуже в 2–4 раза. Тем не менее факт, что они вообще работают на продакшн-нагрузках, — уже прорыв. Несколько лет назад это казалось невозможным.

-2

🧾 Ключевые инсайты

  • 📝 Лучшие вставкиbvinc и craw.
  • 📖 Лучшее чтение (simple/complex)sqinn-go.
  • 📚 Лучшие большие БДeaton и mattn.
  • 🤹 Лучшая конкуренцияzombie.
  • 🛠️ Наименее зрелыеglebarez и modernc (но они важны для экосистемы, т.к. показывают, что SQLite можно писать на чистом Go).

🔮 Моё мнение

Как разработчику, мне нравится, что выбор стал гибким:

  • ⚙️ Для микросервисов без CGO-зависимостей удобно взять sqinn-go — быстро и кроссплатформенно.
  • 📊 Для аналитических нагрузок с большим количеством JOIN лучше использовать классические CGO-драйверы (bvinc, craw, mattn).
  • 🧩 Для облачных и WASM-сценариев (например, SQLite прямо в браузере через Go) — эксперименты с ncruces и modernc выглядят перспективно.

Главный вывод: SQLite без CGO теперь реально практичен, и мы вступаем в эпоху, где даже embedded-СУБД можно собирать полностью в Go-проектах без боли.

🔗 Источник: