Я создаю контроль версий для данных в нашей базе данных. Он будет иметь возможность хранить ревизии, откаты и откаты отката. Таблицы базы данных, которые я использую, которые необходимо пересмотреть, приведены ниже:
объекты
object_chunks
object_attributes
Объекты - это основной объект, чанки - это сгруппированные разделы объекта, а атрибуты - это атрибуты данных внутри чанка. Атрибуты хранят идентификатор объекта вместе с идентификатором чанка. Таким образом, легко выбрать все атрибуты для объекта без необходимости повторного соединения с таблицей чанков.
Единственное, что когда-либо действительно изменится, это атрибуты, но когда атрибут меняется, затронутый блок (и) будет обновляться, и всякий раз, когда блок обновляется, объект также обновляется. Теперь я подумал о двух разных способах решения этой проблемы.
- Создайте три новые таблицы с суффиксом _rev, эти таблицы будут просто хранить старые версии объектов. Реальные объекты также будут хранить число оборотов. Допустим, я изменил три разных атрибута, эти атрибуты охватывают три порции, поэтому три новых строки в порциях, три в атрибутах и одна в объекте для ревизий. Поскольку это первое изменение, идентификатор rev будет равен 1, в реальных таблицах их rev будет 2.
- Я бы просто сделал вышеописанное, но вместо отдельной таблицы я бы просто сохранил ее в той же таблице.
Стоит отметить, что ВСЕГДА будут ревизии, количество кусков может варьироваться от 1 до 100+. Хотя в среднем это около 1-15. Атрибуты могут варьироваться от 0 до 100+. Среднее значение, вероятно, около 30. КАЖДЫЙ атрибут изменится. Эти объекты проходят через «фазу», когда все атрибуты должны заполняться пользователями. Как только они заполнены, объект архивируется и никогда не изменяется снова. Все объекты имеют соответствующий файл. Таким образом, объект будет хранить текущий хеш (sha256) файла также. Этот хеш используется для целей дедупликации.