我对 GemFire 有点陌生。我有一个疑问。这是:
我有以下对象图(1 和 2),如下所示:
- ObjA 有 ObjB 有 ObjC
- 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 时(REPLICATE 或 PARTITION Region 的情况,严格来说这里是服务器端),则 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 ) 或让您的域对象实现 PdxSerialized ( http://gemfire.docs.pivotal.io/latest/userguide/developing/data_serialization/use_pdx_serializable.html ),您将获得最大的 yield 。 ),尽管更具侵入性。
关于java - 将复杂的对象图放入 gemfire 区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25405827/