Что это такое
LevelDB — быстрая библиотека хранения ключ-значение, написанная в Google. Ее авторы — Sanjay Ghemawat и Jeff Dean.
Проект предоставляет упорядоченное отображение строковых ключей в строковые значения. При этом ключи и значения являются произвольными массивами байтов, а порядок можно менять собственной функцией сравнения.
LevelDB — не серверная база данных. Это встраиваемая библиотека, которую приложение подключает внутрь своего процесса, чтобы хранить локальные данные без отдельного фонового демона, сетевого протокола и отдельной службы администрирования.
Что внутри
Базовые операции простые: Put, Get и Delete. Несколько изменений можно объединить в атомарный пакет, чтобы приложение видело их как одно согласованное обновление.
Данные хранятся отсортированными по ключу. Это важно для диапазонных чтений и последовательного обхода, когда нужно не только найти один ключ, но и пройти соседние записи.
В репозитории прямо указано, что обслуживание сейчас очень ограничено. Команда рассматривает в основном критические ошибки, проблемы с потерей данных, повреждением памяти и изменения, нужные внутренним клиентам.
Как используют
LevelDB выбирают для локальных индексов, кешей, метаданных, очередей и небольших встроенных хранилищ, где отдельная SQL-база или серверное решение избыточны.
Библиотека хорошо подходит, когда приложение само управляет жизненным циклом данных и хочет предсказуемое хранилище с быстрым доступом по ключу.
Ограничение в том, что LevelDB не дает готовых SQL-запросов, сетевого доступа, прав пользователей и распределенной репликации. Все это нужно строить выше или выбирать другой инструмент.
Модель операций
Пример показывает не конкретный синтаксис C++, а рабочую модель LevelDB: запись, чтение, удаление и пакетное обновление.
Сильные стороны и ограничения
Сильная сторона LevelDB — простота и предсказуемость встраиваемого хранилища. Приложение получает быстрый ordered key-value слой без отдельной службы.
Слабая сторона — ограниченное текущее сопровождение. Для нового крупного продукта важно оценить, подходит ли такой режим поддержки требованиям команды.
LevelDB подойдет инфраструктурным компонентам, локальным кешам и системам, где нужен небольшой надежный слой хранения. Для многопользовательской базы с запросами, ролями и аналитикой нужен другой класс решения.
Пример
Базовые операции
Пример в нейтральной форме показывает, какие действия обычно выполняет приложение поверх LevelDB.
db.Put("user:42", "Alice")
value = db.Get("user:42")
db.Delete("user:42")
batch.Put("user:43", "Bob")
batch.Delete("user:41")
db.Write(batch)