2

我对 GemFire 有点陌生。我有一个疑问。这里是:

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

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

ObjC 的同一个实例与 ObjB 和 ObjY 相关联现在我将 ObjA 和 ObjX 放在 gemfire 区域 R 中。

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

4

1 回答 1

2

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

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

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

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

您可以通过参考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/ development/data_serialization/use_pdx_serializable.html),虽然更具侵入性。

于 2014-08-20T18:34:37.187 回答