tkrzw
Библиотека на C++, реализующая концепцию DBM (Database Manager) для хранения ассоциативных массивов (ключ-значение) на постоянном носителе. Она является преемником библиотек Tokyo Cabinet и Kyoto Cabinet и предоставляет высокую производительность, поддержку конкурентного доступа и расширенные возможности по работе с данными. Библиотека включает несколько реализаций DBM с различными структурами данных, что позволяет выбрать оптимальный вариант под конкретную задачу.
Особенности
- набор реализаций DBM: HashDBM (хэш-таблица), TreeDBM (B+ дерево), SkipDBM (список с пропусками), TinyDBM (в памяти), BabyDBM (в памяти), CacheDBM (LRU), StdHashDBM/StdTreeDBM (обёртки над стандартными контейнерами);
- высокая производительность, масштабируемость и долговечность данных;
- поддержка многопоточности и конкурентного доступа;
- возможность сжатия данных (LZ4, Zstd, LZMA, zlib).
Основные компоненты
Библиотека предоставляет унифицированный интерфейс для работы с различными реализациями DBM через полиморфный класс (подробнее с документацией можно ознакомиться здесь).
Классы DBM
Базовый интерфейс DBM определяет основные операции для работы с хранилищем. Конкретные реализации (HashDBM, TreeDBM и др.) наследуют этот интерфейс и оптимизированы под разные сценарии использования.
Основные методы:
Open(path, writable, options)— открытие базы данных с указанным путём, режимом доступа и опциями;Close()— закрытие базы данных и освобождение ресурсов;Set(key, value, overwrite)— запись ключа и значения (с возможностью перезаписи);Get(key, value)— чтение значения по ключу;Remove(key)— удаление записи по ключу;Count()— получение количества записей;GetStatus(status)— получение статистики базы данных.
Итераторы
Итератор позволяет последовательно обходить все записи в базе данных. Для упорядоченных структур поддерживается перемещение в обратном направлении.
Основные методы итератора:
First()— перемещение к первой записи;Last()— перемещение к последней записи;Next()— перемещение к следующей записи;Previous()— перемещение к предыдущей записи;Get(key, value)— получение текущей записи.
Асинхронный адаптер
Класс AsyncDBM предоставляет асинхронный интерфейс для выполнения операций. Каждая операция возвращает объект Future, позволяющий ожидать результат и проверять статус выполнения.
Основные методы асинхронного API:
AsyncDBM::Set(key, value)— асинхронная запись;AsyncDBM::Get(key)— асинхронное чтение;AsyncDBM::Remove(key)— асинхронное удаление;Future::Wait()— ожидание завершения операции;Future::GetStatus()— получение статуса выполненной операции.
Вторичные индексы
Класс Index реализует вторичные индексы, позволяющие выполнять эффективный поиск по значению или по другой характеристике, не являющейся первичным ключом.
Основные методы индекса:
Index::Add(key, value)— добавление записи в индекс;Index::Remove(key, value)— удаление записи из индекса;Index::GetKeys(value, keys)— получение всех ключей, соответствующих заданному значению индекса.