Javers 将数据保存在单个 table 中的潜在可扩展性问题?
Potential scalability issue with Javers keeping data in a single table?
我们正在研究 different alternatives 以存储对象更改,并发现 JaVers 似乎是专门为此目的构建的工具。
我们已经构建了一个原型(使用 MySQL 进行变更回购),它运行良好并交付了所承诺的内容。到目前为止一切顺利。
然而,JaVers 似乎在 4 table 秒内存储了所有内部数据。对于小数据集来说这不是一个大问题,但是如果原始数据模式有非常大的 tables(每个 millions/billions 记录)会发生什么?在如此大的 table 中更新记录意味着向 JaVers 审计 table 添加一条记录,这将非常大(很可能大于原始数据库的大小)。
根据我们之前处理大型审计 table 的经验,我们遇到了诸如 inserts
开始变慢、查询占用绝对时间等问题。我们也需要非常频繁地取出增量,所以这看起来像是一颗定时炸弹。
1) 是否可以配置 JaVers,以便将更改存储在单独的 table 中,每个实体一个 - 类似于
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 中是否有任何设计用于处理数据模型更改并避免此类误报的内容?
您建议的解决方案 a) 在 JaVers SQL 存储库中是不可能的。这将很难实施。考虑在 SQL.
中实施交叉 class 查询,例如 child-value-objects-filter
事实上,这将是某种分片,在 SQL 数据库中很难实现。
对于大型数据库,我们建议使用 MongoDB (http://javers.org/documentation/repository-configuration/#mongodb-configuration)。在 MongoDB 中,分片在数据库级别开箱即用。
正在考虑 b) 问题。我不会说这是误报。
对象:{'bar':'a'}
和 {'bar':'a', 'baz':0}
不同。如果 baz
为空(整数),您可以消除此类更改。
我们正在研究 different alternatives 以存储对象更改,并发现 JaVers 似乎是专门为此目的构建的工具。
我们已经构建了一个原型(使用 MySQL 进行变更回购),它运行良好并交付了所承诺的内容。到目前为止一切顺利。
然而,JaVers 似乎在 4 table 秒内存储了所有内部数据。对于小数据集来说这不是一个大问题,但是如果原始数据模式有非常大的 tables(每个 millions/billions 记录)会发生什么?在如此大的 table 中更新记录意味着向 JaVers 审计 table 添加一条记录,这将非常大(很可能大于原始数据库的大小)。
根据我们之前处理大型审计 table 的经验,我们遇到了诸如 inserts
开始变慢、查询占用绝对时间等问题。我们也需要非常频繁地取出增量,所以这看起来像是一颗定时炸弹。
1) 是否可以配置 JaVers,以便将更改存储在单独的 table 中,每个实体一个 - 类似于
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 中是否有任何设计用于处理数据模型更改并避免此类误报的内容?
您建议的解决方案 a) 在 JaVers SQL 存储库中是不可能的。这将很难实施。考虑在 SQL.
中实施交叉 class 查询,例如 child-value-objects-filter事实上,这将是某种分片,在 SQL 数据库中很难实现。
对于大型数据库,我们建议使用 MongoDB (http://javers.org/documentation/repository-configuration/#mongodb-configuration)。在 MongoDB 中,分片在数据库级别开箱即用。
正在考虑 b) 问题。我不会说这是误报。
对象:{'bar':'a'}
和 {'bar':'a', 'baz':0}
不同。如果 baz
为空(整数),您可以消除此类更改。