将复杂目标图置于gemfire区域



我对GemFire有点陌生。我有个问题。

我有以下对象图(1 &2)如下所示:

  1. ObjA有ObjB有ObjC
  2. ObjX有ObjY有ObjC

ObjC的同一个实例与ObjB和ObjY相关联现在我把ObjA和ObjX放到gemfire区域,r

我的问题是,在区域R中会有两个相同的ObjC实例还是只有一个?如果有两个实例,那么有没有办法在区域R中有一个实例呢?

在初始的Region.put(ObjA)和/或Region.put(ObjX)调用上(提供您的应用程序是"对等缓存",而不是具有PROXY或CACHING_PROXY区域的客户端),只有1个ObjC实例,由ObjA(通过ObjB)和ObjX(通过ObjY)间接引用。

然而,当GemFire通过分发"复制"ObjA和ObjX时(就像复制或分区区域的情况一样,严格来说这里是服务器端),那么ObjC将在接收端被"复制"。

这主要是由于ObjA/ObjX在复制和分发到集群中承载相同区域的其他成员时必须通过有线发送时被"序列化"。在客户端/服务器交互之间也是如此(即使用PROXY和CACHING_PROXY客户端区域)。

唯一不存在这种情况的情况是Region仅是本地的,并且不分发它的数据或事件(但它仍然可以配置为接收数据事件)。

你可以通过参考GemFire的UG来控制"反/序列化"机制…

http://gemfire.docs.pivotal.io/latest/userguide/developing/data_serialization/chapter_overview.html

具体来说,通过使用GemFire自己的PDX序列化策略(http://gemfire.docs.pivotal.io/latest/userguide/developing/data_serialization/gemfire_pdx_serialization.html),您将获得最大的收益。并且可能实现您自己的PdxSerializer (http://gemfire.docs.pivotal.io/latest/userguide/developing/data_serialization/use_pdx_serializer.html)或让您的域对象实现PdxSerializable (http://gemfire.docs.pivotal.io/latest/userguide/developing/data_serialization/use_pdx_serializable.html),尽管这有点侵入性。

最新更新