Саймон Уиллисон представил прототип эффективного хранения истории изменений текстовых данных в реляционных базах SQLite. Метод заключается в объединении всех версий документа в единый JSON-массив с последующим применением алгоритмов сжатия zlib или zstd. Такой подход позволяет радикально сократить объем занимаемого дискового пространства за счет высокой степени избыточности между последовательными версиями одного и того же текста.
Традиционные способы хранения истории версий часто требуют создания отдельных таблиц для каждого изменения или использования сложных систем дифференциального хранения. Использование сжатых JSON-блоков внутри одной ячейки базы данных упрощает структуру схемы и снижает накладные расходы на операции ввода-вывода. При этом чтение конкретной версии требует десериализации и распаковки массива, что делает этот метод оптимальным для сценариев, где история версий запрашивается нечасто, а приоритетом является компактность архива.
Эксперименты показывают, что алгоритмы сжатия эффективно справляются с повторяющимися фрагментами текста, которые неизбежно возникают при редактировании документов. Это решение может быть полезно для систем ведения логов, хранения конфигураций или простых CMS, где необходимо сохранять историю правок без развертывания полнофункциональных систем контроля версий вроде Git.
Ключевые факты
- Метод использует объединение всех версий текста в один JSON-массив перед сжатием.
- Применяются стандартные алгоритмы сжатия zlib или zstd для достижения максимальной плотности данных.
- Подход позволяет хранить историю изменений внутри одной записи реляционной таблицы SQLite.
- Решение ориентировано на минимизацию дискового пространства в ущерб скорости доступа к промежуточным версиям.