SirixDB 1.0 Beta: версионирование данных в стиле Git и запросы к историческим состояниям
Hacker News · оригинал
Материал подготовлен автоматизированной редакционной системой. Факты можно сверить по указанному первоисточнику.

Разработчик представил бета-версию SirixDB — базы данных, где история изменений является первоклассным объектом, позволяя выполнять запросы к любым прошлым версиям данных без реконструкции событий. Архитектура системы была оптимизирована с использованием Java Foreign Function & Memory API для снижения нагрузки на сборщик мусора.
Проект предлагает альтернативный подход к управлению историей данных, устраняя необходимость в репле событий и проекциях, что может упростить работу с временными метками и аудитом изменений в корпоративных системах.
Разработчик Йоханнес представил бета-версию SirixDB, системы управления базами данных, в которой история изменений данных рассматривается как первоклассный объект. В отличие от традиционных event-sourcing систем, где для получения текущего состояния необходимо воспроизводить последовательность событий, SirixDB хранит легковесные, доступные для запроса ревизии. Это позволяет пользователям напрямую опрашивать данные на любой момент времени, сравнивать произвольные версии и отслеживать эволюцию информации без сложной логики реконструкции состояний.
Ключевой особенностью архитектуры является поддержка двух временных осей: transaction time (время транзакции) и valid time (действительное время). Разработчик приводит пример с корректировкой цены товара: если первоначально была записана цена 100 долларов, а позже исправлена на 95 долларов, система позволяет различать то, что «считалось» верным в момент записи, и то, что было фактическим значением в прошлом. Такой подход обеспечивает гибкость при аудите и анализе изменений.
Техническая реализация SirixDB основана на append-only физическом журнале и персистентном copy-on-write trie-дереве страниц. Неповрежденные страницы разделяются между ревизиями, что повышает эффективность хранения. Для балансировки производительности чтения и записи используется алгоритм скользящего снимка (sliding-snapshot). Все данные доступны для запросов через язык JSONiq с использованием компилятора Brackit.
Проект развивался с 2013 года как продолжение академических исследований Idefix/Treetank в Университете Констанца. Ранние версии системы страдали от низкой производительности из-за высокого давления на сборщик мусора (GC) в JVM, вызванного созданием множества мелких объектов для хранения узлов данных. Разработчик, используя инструменты профилирования async-profiler и помощь Андрея Пангина, выявил, что количество аллокаций линейно росло с числом открытых транзакций.
Для решения этой проблемы была проведена миграция слоя хранения на Java Foreign Function & Memory API, что позволило хранить страницы вне кучи (off-heap). Разработчик отмечает, что автоматизация рутинных частей этого процесса стала возможной благодаря использованию инструментов искусственного интеллекта. Это существенно улучшило пропускную способность системы.
В перспективе архитектура SirixDB, основанная на неизменяемых страницах и append-only логике, хорошо подходит для работы с объектным хранилищем, таким как S3, и распределенными журналами вроде Kafka. Уже существуют начальные прототипы облачной версии, однако на данный момент разработчик фокусируется на доказательстве работоспособности основных принципов дизайна. Код проекта доступен на GitHub, а также предоставлены интерактивная демонстрация и подробная документация.