java - 将复杂的对象图放入 gemfire 区域

标签 java serialization distributed-caching spring-data-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 时(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/

相关文章:

python - 如何在 Python 3 中腌制和取消腌制到可移植字符串

c# - 意外的 protobuf-net 序列化程序行为

java序列化导致utfdataformaexception

caching - 由于分布式缓存需要网络调用,在某些情况下直接从DB读取不是有好处吗?

java - 使用 TextMate 编译多个 Java 包

java - 帕斯卡三角递归程序不起作用

algorithm - 一致性哈希有什么缺点吗?

hadoop - 作业期间更改了Hadoop分布式缓存对象

java - 如何将这个增强循环转换为 for 循环

Java -Xms 和 -Xmx 测试