metaclass (metaclass) wrote,
metaclass
metaclass

Строго типизированные данные, история их версий и меркуриал

Сижу думаю над шизой.
Имеется описание предметки в виде модели для кодогенерации - хитрозаколдованный набор данных, над которым работают несколько людей и по которому нужно хранить историю.
Для обычной цели "посмотреть кто в прошлом виноват и что делать" истории в виде текстовых diff вполне хватило бы, и набор данных можно представить в любом человеко-машино-читаемом виде (JSON, YAML, итд), засунув его под меркуриал и разбив на несколько файлов по отдельной модели в каждом (там моделей несколько, они зависят друг от друга и работать над ними лучше независимо).
Но вторая цель хранения истории - это генерить патчи для миграции данных, которые эта модель описывает, между версиями модели. Т.е. добавили в модель поле, пару таблиц, еще чего-нибудь навертели - нужно из этого сгенерировать аццкий SQL скрипт, который это все применит к уже работающей базе данных. А тут уже текстовых diff-ов мало.

Можно было бы сделать собственное хранение истории, благо описание самой модели хранится в ней самой и прикрутить к кодогенератору еще и генерацию триггеров аудита изменений особой проблемы нет. Но тогда будет дублирование функциональности меркуриала, причем каждое изменение будет в двух местах - в основных данных, и в логе изменений дописано в конец. Но другого разумного способа сопоставить историю типизированных данных и ее отражение в виде сhangeset-ов меркуриала я не вижу.
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 10 comments