将复杂的对象图放在gemfire区域

时间:2014-08-20 13:19:04

标签: java serialization distributed-caching spring-data-gemfire

我对GemFire有点新鲜。我有一个问题。这是:

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

  1. ObjA让ObjB有ObjC
  2. ObjX让ObjY有ObjC
  3. ObjC的相同实例与ObjB和ObjY相关联 现在我把ObjA和ObjX放在gemfire区域,R。

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

1 个答案:

答案 0 :(得分:2)

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

但是,当GemFire通过分发“复制”ObjA和ObjX时(对于REPLICATE或PARTITION区域,严格来说就是服务器端),那么ObjC将在接收方“重复”。

这主要是因为ObjA / ObjX在复制和分发到群集中同样拥有相同Region的其他成员时通过网络发送时必须“序列化”。客户端/服务器交互之间也是如此(即使用PROXY和CACHING_PROXY客户端区域)。

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

你可以在这里参考GemFire的UG来控制“de / serialization”机制......

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),虽然更具侵略性。