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) — получение всех ключей, соответствующих заданному значению индекса.

Использование в проекте

Документация по использованию Conan-пакетов для разработки приложений для ОС Аврора.

На сервере Conan библиотеки заранее собраны и размещены под различные версии ОС Аврора 4 и ОC Аврора 5. Для данных версий представлены архитектуры armv7hl, aarch64 и x84_64.

Библиотеку можно использовать в проекте с помощью данного conanfile.py

from conan import ConanFile

class Application(ConanFile):
    settings = "os", "compiler", "arch", "build_type"
    generators = "PkgConfigDeps"

    requires = (
        "tkrzw/1.72.0@aurora",
    )    

Процесс локальной сборки описан в документации.

tkrzw

A set of implementations of DBM
Лицензия
Apache License 2.0
Версия
Автор
Vladislav Larionov <vladislav.larionov@fruct.org>
Скачать
armv7
2.28 Mb
MD5: 3f5adc3a8f4f37f915b5432b4044632e
Updated: 03.09.2025, 22:28:02
armv8
2.33 Mb
MD5: 1b5ccbb196b62db243c85f64bc059182
Updated: 03.09.2025, 22:27:53
x86_64
2.44 Mb
MD5: 7aec0505f2f81afea4e80fa408ce3980
Updated: 03.09.2025, 22:28:04
Использование в проекте

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.