В рамках проекта LiteTree развивается вариант SQLite с поддержкой ветвления БД
1 сентября 2018 года
Доступна новая встраиваемая СУБД 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 для получения выбранной ветки требуется загрузка SQL-дампа из Git и перестроение БД, данная система больше подходит для решения задач архивирования и анализа изменений.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.