Как отслеживать / записывать версии изменений объекта

Мы хотим реализовать функцию «управления версиями» в нашем проекте Java (JSF / EJB / JSF). Приведу пример:

       -----
       | A |
       -----
        1/\1
        /  \
      */    \*
    -----   -----
    | B |   | C |
    -----   -----    

На приведенной выше диаграмме показан простой объект-граф с 3 объектами, то есть A, B и C. B и C «являются частью» A, любые изменения в A и / или B и / или C требуют создания новой версии A. .

Вопрос в том, как это реализовать, как на стороне Java, так и на стороне базы данных?

У нас есть 2 решения, которые еще не решены:

РешениеA: значительные изменения в частях A вызовут новый глубокий клон A, и этот клон будет сохранен через JPA в базе данных в качестве новой версии. Плюсы: реализация проста, минусы: существует много избыточности (учитывая, что граф объектов очень большой) как на стороне Java, так и в базе данных.

РешениеB: создавать только измененную часть A в базе данных. Плюсы: нет избыточности, производительность БД может быть лучше. Минусы: это нарушает объектный граф, и нам приходится вручную поддерживать отношения / ссылки между объектами. может превратить развитие в кошмар.

Любая идея ?


person John Wang    schedule 14.03.2012    source источник
comment
Если это система управления версиями, не следует ли выражать вашу модель в терминах изменения, версии и т. Д.?   -  person    schedule 28.05.2012
comment
Прежде всего, решение A будет иметь лучшую производительность БД при правильном индексе, потому что ему не нужно разрешать отношения при создании объекта. Во-вторых, какова цель управления версиями? сравнить разницу? или просто для хранения записей?   -  person Chao    schedule 04.06.2012


Ответы (1)


В JAVA для этого существует хорошая структура, взгляните: Envers.

Что касается проблем с производительностью, я не уверен, как работает фреймворк (избыточность или отсутствие в базе данных), но вы избежите клонирования объекта.

person J-Y    schedule 13.09.2012