如何在ZODB中设置缓存大小?

时间:2015-12-31 13:34:07

标签: python zodb

我使用以下代码建立ZODB连接:

connection = ZODB.connection('zodb/connect4_reinf.fs')
dbroot = connection.root()

如何设置RAM缓存大小?

2 个答案:

答案 0 :(得分:2)

来自DB类的源代码:

  def __init__(self, storage,
             pool_size=7,
             pool_timeout=1<<31,
             cache_size=400,
             cache_size_bytes=0,
             historical_pool_size=3,
             historical_cache_size=1000,
             historical_cache_size_bytes=0,
             historical_timeout=300,
             database_name='unnamed',
             databases=None,
             xrefs=True,
             large_record_size=1<<24,
             **storage_args):

ZODB.connection定义如下:

def connection(*args, **kw):
    return DB(*args, **kw).open_then_close_db_when_connection_closes()

我会说

   connection = ZODB.connection('zodb/connect4_reinf.fs',
        cache_size=<your-cache-size>)

如果您希望限制在(估计的)字节中,那么还有cache_size_bytes。 0表示此参数无限制。

答案 1 :(得分:0)

关于cache_size和cache_size_bytes之间的连接 (我发布这个作为答案,因为评论有点简短)

这次,我们可以在源代码中再次在picklecache.py中找到答案。在重命名之后,它归结为以下几行(在方法_sweep中):

for value in self.ring:
    if self.non_ghost_count <= target and (self.total_estimated_size <= target_size_bytes or not target_size_bytes):
            break
    (delete some objects from the cache)

此处targetcache_size connectiontarget_size_bytes,对象数量,cache_size_bytes是传递给connection的{​​{1}},字节。简而言之,如果cache_size_bytes躲避False(作为默认值0,还有None等等),则只会考虑对象的数量帐户。如果存在cache_size_bytes,则会考虑cache_sizecache_size_bytes,并且这两个条件都必须适用,即必须将对象带入缓存,如果添加将导致有超过cache_size个活动对象超过cache_size_bytes个字节(估计),一些对象将从缓存中删除,以腾出更多空间。