Java—巨大的对象大小序列化需要较长的内存缓存时间

Java—巨大的对象大小序列化需要较长的内存缓存时间,java,serialization,garbage-collection,deserialization,memcached,Java,Serialization,Garbage Collection,Deserialization,Memcached,我们正在尝试向Memcached中插入大约350MB的大型对象,这些对象基本上是随着时间的推移而演变的Bean,并且具有多个属性(Bean),这些属性承载着不能被破坏的关键数据。由于对象的大小很大,序列化会占用大量的时间,并且在多个并发用户的情况下会导致系统响应非常慢 我试过两种方法的结合Folsom@Spotifyjava memcached客户端+Kryo(序列化)+Snappy java(压缩)。序列化和压缩后,对象大小约为30 MB。这仍然是要存储在Memcached中的一个非常大的对象

我们正在尝试向Memcached中插入大约350MB的大型对象,这些对象基本上是随着时间的推移而演变的Bean,并且具有多个属性(Bean),这些属性承载着不能被破坏的关键数据。由于对象的大小很大,序列化会占用大量的时间,并且在多个并发用户的情况下会导致系统响应非常慢

我试过两种方法的结合Folsom@Spotifyjava memcached客户端+Kryo(序列化)+Snappy java(压缩)。序列化和压缩后,对象大小约为30 MB。这仍然是要存储在Memcached中的一个非常大的对象

有两个主要的java bean具有多个属性(getter和setter),但并不需要将这些bean中的所有属性都存储在Memcached中。
请建议在使用Memcache时处理大型对象的任何替代方法。

我的理解正确吗?您反序列化一个巨大的对象,修改它并再次序列化它,对于每个用户请求?用户对我们的应用程序执行搜索,我们使用XML web服务从多个供应商系统获取库存。解析每个供应商XML,捕获数据并在Bean(列表)中设置,然后来自不同供应商的库存合并到最终列表中,最终列表在父Bean中设置,该Bean存储在Memcached中。库存对象(在供应商XML解析后创建)->序列化->压缩->然后存储在Memcache中。反序列化不是在这个阶段完成的。当它从未被反序列化时,序列化它的目的是什么?此外,问题似乎出现在“父Bean中设置了这个最终列表”,因为当不构建一个包含所有Bean的大型对象时,您不会遇到序列化非常大的对象的问题。在搜索操作期间,从所有供应商(XML服务)捕获的数据并合并到最终列表中,然后根据唯一的搜索编号将其存储在Memcache中,供以后使用。当用户选择一个库存并继续确认它时,这些缓存的库存数据从Memcache中获取(包括选定的库存数据),然后选定的库存数据将在确认流程的流程中使用。在这里,在将其存储到Memcached之前需要序列化,在我们从Memcached获取清单以便在下一步使用它时需要反序列化。我得到的正确吗?您反序列化一个巨大的对象,修改它并再次序列化它,对于每个用户请求?用户对我们的应用程序执行搜索,我们使用XML web服务从多个供应商系统获取库存。解析每个供应商XML,捕获数据并在Bean(列表)中设置,然后来自不同供应商的库存合并到最终列表中,最终列表在父Bean中设置,该Bean存储在Memcached中。库存对象(在供应商XML解析后创建)->序列化->压缩->然后存储在Memcache中。反序列化不是在这个阶段完成的。当它从未被反序列化时,序列化它的目的是什么?此外,问题似乎出现在“父Bean中设置了这个最终列表”,因为当不构建一个包含所有Bean的大型对象时,您不会遇到序列化非常大的对象的问题。在搜索操作期间,从所有供应商(XML服务)捕获的数据并合并到最终列表中,然后根据唯一的搜索编号将其存储在Memcache中,供以后使用。当用户选择一个库存并继续确认它时,这些缓存的库存数据从Memcache中获取(包括选定的库存数据),然后选定的库存数据将在确认流程的流程中使用。在这里,在将其存储到Memcached之前需要进行序列化,在下一步从Memcached获取清单以使用它时需要进行反序列化。