我们正在研究存储对象更改的不同替代方案,并发现 JaVers 似乎正是为此目的而构建的工具。
我们已经构建了一个原型(使用 MySQL 进行更改 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
如果目前无法实现,添加这样的功能有多难(我们愿意投入时间并提交补丁)?
2)假设我们有
class Foo {
String bar;
}
一段时间后,我们决定添加另一个字段
class Foo {
String bar;
int baz = 0;
}
我怀疑如果我们更新一个实例Foo
并且bar
只更改但保留baz = 0
,JaVers 将报告更改说baz=0
已添加。JaVers 中是否有任何东西旨在处理数据模型更改并避免此类误报?