Перейти к содержанию

Прототип хранения истории правок в SQLite со сжатием

6.0/10

Контекст

Саймон Уиллисон рассматривает проблему компактного хранения истории правок текста в реляционных базах данных. Обычное хранение каждой версии отдельной строкой приводит к быстрому разрастанию базы, особенно если документ занимает десятки килобайт.

Суть

Автор предлагает хранить все предыдущие версии документа как один JSON-массив строк и сжимать его целиком с помощью zlib или Zstandard, рассчитывая на высокую степень сжатия из-за повторяющегося текста. Отдельно предлагается хранить массив временных меток, который можно не сжимать. В прототипе, созданном с помощью GPT-Live и GPT-5.6 Sol Pro, 1000 смоделированных правок дали 20,4 МБ исходного текста, который сжался до 80,3 КБ в Zstandard-сжатом JSON-массиве. Чтобы не распаковывать и не перепаковывать весь массив при каждой правке, предлагается разбивать историю на несколько строк, каждая из которых содержит не более 128 ревизий или не более 3 МБ несжатого JSON.

Вывод

Уиллисон показывает, что сжатие полного JSON-массива старых версий может быть очень эффективным и простым способом хранения истории правок в SQLite. Однако это пока экспериментальный прототип, а не готовое решение: не исследованы альтернативы, конкурентный доступ, сбои и стоимость обновления истории.