Ответ
В Go для локального хранения данных, не требующего отдельного сервера, популярны следующие встраиваемые (embedded) базы данных:
-
SQLite
- Тип: Реляционная СУБД.
- Описание: Полнофункциональная SQL-база данных, которая хранится в одном файле. Идеальна, когда нужны транзакции, сложные запросы и реляционная структура. Для работы требуется CGO и драйвер, например
github.com/mattn/go-sqlite3. -
Пример:
import "database/sql" import _ "github.com/mattn/go-sqlite3" db, err := sql.Open("sqlite3", "./database.db")
-
BadgerDB
- Тип: Key-value хранилище.
- Описание: Высокопроизводительная key-value база данных, написанная на чистом Go. Оптимизирована для SSD. Хранит данные в директории с файлами. Отличный выбор для кэширования или хранения неструктурированных данных.
-
bbolt (ранее BoltDB)
- Тип: Key-value хранилище.
- Описание: Транзакционная key-value база данных, хранящая все в одном файле. Проект BoltDB был заархивирован, но его активным форком является
bbolt. Он прост в использовании и надежен.
-
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 для локального хранения конфигов, это пиздец как не к месту.