我们正在使用Voyage将大量数据存储到MongoDB中。
目前问题是,Voyage正在缓存保存到数据库的所有对象。每当缓存接近其大小的最大值时,它就变得非常慢。
当然,我们可以增加缓存的最大大小,但VOMongoCache的类描述说:
主要目的不是优化,而是防止重复的对象(何时 它们应该是一样的)
因为我们只保存新生成的对象,所以无论如何我们都不需要这些缓存。
所以我们想完全禁用缓存。 目前我们只是使用此解决方法来禁用缓存:
VOMongoCache>>
at: anOID put: anObject
self compactIfNeeded.
self mutex
critical: [ "objects at: anOID put: anObject" ].
我们只是注释掉了将对象添加到缓存的部分。
有没有更好的解决方案来完全禁用缓存?
提前致谢!
答案 0 :(得分:3)
Voyage是一个对象图串行器。因此绝对需要缓存。您的用例可能不是设计时考虑的所有用例。您只是在编写对象,但从序列化程序的角度来看,您可以随时阅读,然后它应该是正确的。
反正。也许它可以帮助您微调您的应用程序。 Voyage做的是所有活动对象都保存在缓存中。有效,我的意思是目前任何处理代码都有对象的引用。如果对象不再处于活动状态,则垃圾收集器会将其删除,同时它们在缓存中没有任何内容。如果缓存增长得太大,压缩将开始删除所有为新对象腾出空间的零条目。 如果您运行一个方法来保持对序列化所有对象的引用,那么缓存将增长,它将紧凑但不是空闲的插槽。因此,在下一步中再次尝试压缩,使整个事情变得缓慢。
你可以做的是你处理你的对象(必须写入),你持有一些,序列化它们然后它们应该超出范围,以便清理过程可以管理它们。其次,我将使用
在缓存上扩展compactLimitVORepository current cache compactLimit: aNumber
通过这种方式,压缩运行的频率降低,使代码和GC有更多时间并行解决问题。