Мы изучали different alternatives для хранения изменений объектов и обнаружили JaVers, которые, похоже, были созданы специально для этой цели.Потенциальная проблема масштабируемости с сохранением данных Javers в одной таблице?
Мы создали прототип (с использованием MySQL for change repo), который хорошо зарекомендовал себя и выполнил то, что было обещано. Все идет нормально.
Однако, похоже, что JaVers хранит все свои внутренние данные в 4 таблицах. Это не большая проблема для небольших наборов данных, но что произойдет, если, скажем, исходная схема данных имеет действительно большие таблицы (миллионы/миллиарды записей)? Обновление записи в такой большой таблице означало бы добавление записи в таблицу аудита JaVers, которая была бы большой (скорее всего, больше, чем размер исходной базы данных).
Из нашего предыдущего опыта работы с большими аудиторскими таблицами у нас были проблемы, такие как inserts
, начинающие замедляться, запросы с абсолютным возрастом и так далее. Нам также нужно будет получать дельтаты слишком часто, так что это похоже на тиковую бомбу замедленного действия.
1) Можно ли настроить JaVers так он сохраняет изменения в отдельных таблицах, по одному на каждый объект - что-то вроде
foo_global_id
,foo_snapshot
,foo_commit
,foo_commit_property
bar_global_id
,bar_snapshot
,bar_commit
,bar_commit_property
Если в настоящий момент это невозможно, как трудно было бы добавить такую функцию (u готовы ли инвестировать время и представить патчи)?
2) Допустим, мы имеем
class Foo {
String bar;
}
Через некоторое время мы решили добавить еще одно поле
class Foo {
String bar;
int baz = 0;
}
Я подозреваю, что если мы обновляем экземпляр Foo
и изменить bar
только, но сохранить baz = 0
, JaVers сообщит об изменении, добавив: baz=0
. Есть ли что-то в JaVers, которое предназначено для обработки изменений модели данных и предотвращения таких ложных срабатываний?
интересный вопрос, ответит на него вечером –