Дата публикации:Mon, 03 Nov 2025 10:53:14 +0300
Опубликован первый стабильный релиз проекта TidesDB, развивающего библиотеку для хранения данных в формате ключ/значение. Проект может использоваться как обособленно запускаемый движок или для встраивания в приложения. Из ключевых возможностей отмечается поддержка ACID-транзакций и оптимизация для эффективного хранения данных на Flash-накопителях и в оперативной памяти. Код написан на языке Си и распространяется под лицензией MPL 2.0. Обвязки подготовлены для языков C++, Go, Java, Python, Rust, Lua и JavaScript.
Для хранения данных задействована структура LSM-tree (журнально-структурированное дерево со слиянием), обеспечивающее высокую производительность не только при чтении, но и при выполнении операций записи и изменения данных. Операции чтения не блокируют запись и чтение данных, а операции записи блокируют только семейство столбцов в котором выполняется запись. Для дополнительного ускорения чтения поддерживаются индексы и кэширование на базе bloom-фильтров (позволяют проверить вхождение во множество, допуская ложное определение отсутствующего элемента, но исключая пропуск существующего элемента).
Имеется полная поддержка ACID-транзакций, позволяющих атомарно вносить изменения, охватывающие семейства столбцов, и при необходимости атомарно откатывать операции. Данные могут хранится в сжатом виде с выбором алгоритма сжатия в привязке к семейству столбцов. Возможно выставление блокировок на уровне отдельных семейств столбцов и упаковки хранилища в параллельном режиме без блокировки выполнения операций с БД.
Основные возможности:
- Поддержка семейств столбцов (Column Families) - изолированных наборов данных в формате ключ/значения. Для каждого семейства столбцов используются свои memtable, SSTable и WAL-лог. ACID-транзакции, охватывающие несколько операций с семействами столбцов. Оптимизация для параллельного доступа к данным. Поддержка двунаправленных итераторов, позволяющих перебирать пары ключ/значение вперёд или назад относительно выбранной позиции в хранилище, используя изначально заданный метод сортировки. Поддержка добавления своих функций сравнения ключей. Наличие встроенных функций сравнения memcmp, string и numeric. Ведение лога операций (WAL, Write-Ahead Log) и автоматическое восстановление memtable (хранилище в оперативной памяти) из данного лога при запуске. Использование Bloom-фильтров для минимизации обращений к накопителю за счёт проверки наличия ключа до чтения из SSTable (постоянное хранилище). Поддержка алгоритмов Snappy, LZ4 и ZSTD для сжатия записей в хранилище SSTable и WAL-логе. Возможность определения времени жизни записей (TTL) и автоматического исключения просроченных записей. Три режима синхронизации данных в ОЗУ с постоянным хранилищем: NONE (самый быстрый), BACKGROUND (сбалансированный), FULL (наиболее надёжный). Возможность настройки размера memtable, методов сжатия, bloom-фильтров, режима синхронизации и параметров упаковки для каждого семейства столбцов. Простой C API, возвращающий 0 при успешном выполнении операции и -1 при ошибке. Использование SBHA (Sorted Binary Hash Array) для быстрого поиска данных в SSTable, позволяющий определять смещения блоков с ключами без полного сканирования. Компактный переносимый бинарный формат представления базы, поддерживающий версионирование. Встроенные механизмы контроля целостности, определения повреждений данных и восстановления.
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=64171