【问题标题】:How to disable caching in Voyage for Pharo?如何在 Voyage for Pharo 中禁用缓存?
【发布时间】:2014-05-20 15:30:38
【问题描述】:

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

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

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

主要目的不是优化而是防止重复对象(当 他们应该是一样的)

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

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

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

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

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

提前致谢!

【问题讨论】:

    标签: mongodb caching smalltalk pharo


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-30
      • 2015-11-18
      • 2018-02-21
      • 2018-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多