gemfire自定义序列化无济于事

我使用gemfire作为我的缓存。 缓存堆大小远高于100GB。 我发现当我们从客户端将数据放入gemfire缓存时,它会将数据序列化并发送到服务器,而在服务器上,数据以序列化forms存储。 问题:

  1. 当我尝试执行任何on-server函数调用时,它会开始反序列化数据并且它非常耗时,有时需要一个多小时来迭代缓存中的对象。 (对象数量接近600万)。
  2. 我尝试使用gemfire自定义序列化(DataSerializer类)。 并且所有数据在缓存中所占用的内存量大约为60GB,如果我使用Java默认序列化则相同。
  3. 我尝试使用一个名为Kryo https://github.com/EsotericSoftware/kryo的库,这确实有很大帮助,但我仍然不明白为什么gemfire序列化对我没有帮助,因为我正在单独序列化该类的每个属性因此编写类标题和任何其他元数据不应该有任何负担。

任何帮助将非常感激。

您是否考虑过在服务器cache.xml中使用read-serialized=true选项? 将此属性设置为true将允许服务器对缓存的对象执行操作,而不必先进行反序列化。 在Pivotal文档中阅读更多相关信息。

维韦克,

如果对象的大小太大,将有助于使用Gemfire的Delta Propagationfunctionhttps://pubs.vmware.com/vfabric5/index.jsp?topic=/com.vmware.vfabric.gemfire.6.6/getting_started /quickstart_examples/delta_propagation.html

这仍然会有一些序列化/反序列化成本,但不同之处在于客户端只会将“对象中已更改的内容”发送到放置的服务器上,理论上如果您将其复制到其他服务器和客户端在客户上注册了兴趣列表。

我还发现客户端缓存上的普通PUT比使用函数执行(onRegion或onServers等)更高效。