В рамках проекта LiteTree развивается вариант SQLite с поддержкой ветвления БД
Доступна новая встраиваемая СУБД LiteTree, представляющая собой модифицированный движок SQLite, переработанный для поддержки ветвления, по аналогии с Git. Наработки проекта распространяются под лицензией MIT.
LiteTree позволяет хранить несколько вариантов состояния одной базы данных, но в отличие от срезов состояния (снапшотов) каждая ветка может продолжать независимо развиваться, обновляться и дополняться. Таким образом, пользователь получает возможность обращения через несколтко точек подключения к БД, каждая из которых связана с определенным ответвлением в развитии БД. Среди практического применения ветвления БД называется реализация структур хранения в виде блокчейнов. Например, СУБД LiteTree была создана компанией Blocko специально для проекта Aergo, развивающего универсальную платформу для создания бизнес-систем на базе блокчейна и P2P-коммуникаций.
Все транзакции в LiteTree сохраняются в виде коммитов, каждый из который имеет свой номер. По умолчанию БД привязывается к линейной ветке master, но разработчик может создать ответвление, указав в качестве отправной точки определенный коммит (например, "PRAGMA new_branch=test at master.2"). После этого ветки разделяются и в каждую из них можно отдельной вносить изменения. В каждой ветке применяется идентичная модель нумерации коммитов (номер отражает удаление от первого коммита), что позволяет последовательно перебирать ветки, анализировать возникшие ветвления, возвращаться к любому состоянию БД в прошлом и создавать новые ветки отбрасывая определенный пласт изменений.
Ограничением предложенной модели хранения является невозможность изменения данных после фиксации коммита - задним числом уже добавленные данные изменить нельзя, возможно только добавить изменение в вершине текущей ветки при помощи нового коммита или создать новую ветку начиная с изменяемого коммита, если необходимо изменить состояние БД относительно этого коммита. Также имеется возможность удаления хвоста ветки, начиная с заданного коммита, переименования ветки или полного удаления ветки.
Для обработки SQL-запрсов и манипуляции блоками данных в LiteTree по возможности задействован уже проверенный код SQLite, но для хранения на диске блоков применяется LMDB. Данные сохраняются без применения сжатия с расчетом один блок SQLite на один сектор (4096 байт). Дублирующиеся в разных ветках данные сохраняются только в одном экземпляре, а при создании новой ветки существующие данные не копируются (при выполнении транзакции копируются только связанные с ней измененные блоки).
Примечательно, что применяемый в LiteTree подход похволил существенно поднять производительность - по сравнению с SQLite новая СУБД в проведенных тестах оказалась более чем в два раза быстрее как при чтении, так и при записи данных. Из пока нереализованных планов на будущее упоминается предоставление средств для анализа различий между ветками, просмотра истории изменений, слияния веток, разграничение доступа к веткам и прикрепления метаданных к веткам или коммитам.
Дополнительно можно отметить похожий проект git-sqlite, позволяющий хранить различные ветки БД в форме Git-репозитория. В отличие от LiteTree в git-sqlite используется немодифицированные SQLite и Git, дополненные прослойками для определения различий между прошлой веткой и текущим состоянием БД, отражения этих различий в Git и слияния разных веток. Тем не менее, так как в git-sqlite для получения базы для выбранной ветки требуется загрузка из Git SQL-дампа и перестроение БД, данная система больше подходит для решения задач архивирования и анализа изменений.