kal*_*ali 5 java compare graph object
我A'在server_1上有一个包含列表、地图和其他集合的对象。然后我将此对象发送到server_2。
之后,在server_1 上,对象A'更改为 state A''。
关键是A''没有太多变化,并且将整个对象发送A''到server_2很昂贵。
因此,如果我想更新server_2A'上对象的状态,我必须将这些对象之间的差异发送给server_2,然后应用到.dA = A'' - A'dAA'
我尝试使用两个库来获取dA:
但是现在我很困惑如何将差异dA应用于server_2A'上的对象。
有人知道如何解决此问题或此用例的任何其他库吗?
编辑:对象结构示例(这个版本比实际对象简单一点):
class Outer {
SimpleObj val1;
List<ComplexObj> list;
Map<String, Map<String, List<OtherComplexObj>> map;
}
Run Code Online (Sandbox Code Playgroud)
在不使用任何库的情况下递归检查所有字段似乎很复杂。
编辑:有一个 spring-synk 库。它是为我自己的情况而设计的,但我在为我的对象创建差异时遇到了 StackOverflowError。这个问题是由于我的对象的复杂性引起的,但我现在无法简化它。更改 jvm 参数无济于事。我想知道是否可以将这个库用于复杂的对象。
我使用了https://github.com/malensek/jbsdiff - 这个库让我可以获取对象的二进制差异,然后将此差异应用于server_2上对象 A' 的二进制表示。有一个关于这个解决方案的时刻 - 如果对象 A' 很大,它需要大量的内存分配,在我的例子中,它在老一代中分配。