gpt4 book ai didi

mongodb - 如何在 Voyage for Pharo 中禁用缓存?

转载 作者:可可西里 更新时间:2023-11-01 10:04:23 33 4
gpt4 key购买 nike

我们正在使用 Voyage 将大量数据存储到 MongoDB。

目前的问题是,Voyage 正在缓存所有保存到数据库中的对象。每当缓存接近其大小的最大值时,它就会变得非常慢。

当然,我们可以增加缓存的最大大小,但是 VOMongoCache 的类描述说:

Main purpose is not optimization but prevent duplicated objects (when they should be the same)

因为我们只保存新生成的对象,所以我们不需要这些缓存。

所以我们要完全禁用缓存。目前我们只是使用这个解决方法来禁用缓存:

VOMongoCache>>
at: anOID put: anObject
self compactIfNeeded.
self mutex
critical: [ "objects at: anOID put: anObject" ].

我们只是注释掉了将对象添加到缓存的部分。

是否有更好的解决方案来完全禁用缓存?

提前致谢!

最佳答案

Voyage 是一个对象图序列化程序。因此缓存是绝对需要的。您的用例可能不是设计时考虑的所有重要案例。您只是在编写对象,但从序列化程序的角度来看,您可以随时读取,然后它应该是正确的。

无论如何。也许它有助于微调您的应用程序。 Voyage 所做的是将所有事件对象保存在缓存中。对于事件,我的意思是目前任何处理代码都有对对象的引用。如果对象不再处于事件状态,垃圾收集器将删除它们,同时它们在缓存中为 nil'ed。如果缓存增长太大,压缩将开始删除所有 nil'ed 条目,为新对象腾出空间。如果您有一种方法正在运行,它保留对您序列化的所有对象的引用,那么缓存会增长,它会压缩但不会释放插槽。因此在下一步中再次尝试压缩,使整个过程变慢。

您可以做的是处理您的对象(必须编写),以一种您持有一些的方式,序列化它们,然后它们应该超出范围,以便清理过程可以管理它们。其次,我将使用

扩展缓存上的 compactLimit
VORepository current cache compactLimit: aNumber

这样,压缩运行的频率就会降低,从而让您的代码和 GC 有更多时间并行解决问题。

关于mongodb - 如何在 Voyage for Pharo 中禁用缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23764148/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com