Какие встраиваемые (embedded) базы данных популярны в Go?

Ответ

В Go для локального хранения данных, не требующего отдельного сервера, популярны следующие встраиваемые (embedded) базы данных:

  1. SQLite

    • Тип: Реляционная СУБД.
    • Описание: Полнофункциональная SQL-база данных, которая хранится в одном файле. Идеальна, когда нужны транзакции, сложные запросы и реляционная структура. Для работы требуется CGO и драйвер, например github.com/mattn/go-sqlite3.
    • Пример:

      import "database/sql"
      import _ "github.com/mattn/go-sqlite3"
      
      db, err := sql.Open("sqlite3", "./database.db")
  2. BadgerDB

    • Тип: Key-value хранилище.
    • Описание: Высокопроизводительная key-value база данных, написанная на чистом Go. Оптимизирована для SSD. Хранит данные в директории с файлами. Отличный выбор для кэширования или хранения неструктурированных данных.
  3. bbolt (ранее BoltDB)

    • Тип: Key-value хранилище.
    • Описание: Транзакционная key-value база данных, хранящая все в одном файле. Проект BoltDB был заархивирован, но его активным форком является bbolt. Он прост в использовании и надежен.
  4. BuntDB

    • Тип: Key-value хранилище.
    • Описание: Быстрая встраиваемая in-memory key-value база данных с поддержкой персистентности (сохранения на диск). Поддерживает геопространственные данные.

Выбор зависит от задачи:

  • Используйте SQLite, если вам нужны реляционные данные и мощь SQL.
  • Используйте BadgerDB или bbolt, если вам нужно простое и быстрое хранилище пар "ключ-значение". BadgerDB обычно производительнее, в то время как bbolt проще из-за хранения всего в одном файле.

Ответ 18+ 🔞

Смотри, ну вот объясняю, как есть. Есть у тебя задача — запихнуть данные куда-то локально, чтобы сервер отдельный не ебашить. Ну, типа, для десктопного приложения, мобилки или маленького сервиса. Так вот, в Го для этого есть несколько вариантов, которые прямо в твой код встраиваются, как глист в кишку. Выбор, блядь, зависит от того, что ты хочешь: SQL-запросы с джойнами или просто ключ-значение, чтобы как в чулан запихнуть.

1. SQLite — классика, ёпта

  • Что это: Реляционная база, сука, самая настоящая. Со своими SELECT, JOIN и транзакциями. Но вся эта мощь живёт в одном-единственном файле. Представь: целая СУБД в одном database.db — хуй с горы, да?
  • Особенность: Тут тебе CGO понадобится, потому что драйвер (github.com/mattn/go-sqlite3) — это обёртка над либой на Си. Но работает, блядь, как часы.
  • Код — его не трогаем, он святой:

    import "database/sql"
    import _ "github.com/mattn/go-sqlite3"
    
    db, err := sql.Open("sqlite3", "./database.db")

    Открыл файлик — и ты уже почти оракл, блядь.

2. BadgerDB — для тех, кому скорость ебать в уши

  • Что это: Хранилище «ключ-значение», но не простое, а написанное на чистом Го, без этого CGO-пиздеца. Оптимизирована под SSD так, что искры из глаз летят. Данные хранит в папке с кучей файлов.
  • Зачем: Если тебе нужно кэшировать что-то со скоростью света или пихать туда логопотоки — это твой выбор. Перформанс, блядь, овердохуищный.

3. bbolt (бывший BoltDB) — стабильный, как лом

  • Что это: Тоже key-value, транзакционная, но вся — в одном файле. Проект Bolt приказал долго жить, но его форк bbolt жив и здоров. Проще пареной репы: открыл файл, работаешь с бакетами как с ведрами. Надёжный, как швейцарские часы, хоть и не самый быстрый на запись.

4. BuntDB — оперативка с персистентностью

  • Что это: In-memory key-value база, то есть всё в оперативке летает. Но, внимание, её можно на диск сбросить, чтобы после перезагрузки не начинать с чистого листа. Ещё умеет в геоданные, если вдруг тебе нужно найти все бары в радиусе «дойти пешком».
  • Зачем: Когда нужна скорость как у света, но с возможностью сохраниться. Типа кэш, который переживёт рестарт.

Итог, ёбана:

  • Хочешь реляционку и SQL? Бери SQLite. Транзакции, сложные запросы — всё там.
  • Хочешь просто ключ-значение? Смотри:
    • BadgerDB — если производительность на первом месте и SSD в распоряжении есть.
    • bbolt — если нужна простая хуйня в одном файле, с транзакциями и без лишних заморочек.
    • BuntDB — если данные в основном в памяти, но иногда нужно их на диск скинуть, и ещё с гео-фичами.

Вот и весь расклад, выбирай, не ошибёшься. Главное — не начинай ебаться с PostgreSQL для локального хранения конфигов, это пиздец как не к месту.