首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ZODB中设置缓存大小?

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

Stack Overflow用户
提问于 2015-12-31 13:34:07
回答 2查看 396关注 0票数 1

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

代码语言:javascript
复制
connection = ZODB.connection('zodb/connect4_reinf.fs')
dbroot = connection.root()

如何设置RAM缓存大小?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-01 12:44:43

来自DB类的源代码:

代码语言:javascript
复制
  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定义如下时:

代码语言:javascript
复制
def connection(*args, **kw):
    return DB(*args, **kw).open_then_close_db_when_connection_closes()

我会说

代码语言:javascript
复制
   connection = ZODB.connection('zodb/connect4_reinf.fs',
        cache_size=<your-cache-size>)

此外,如果您希望限制以(估计的)字节为单位,也有一个cache_size_bytes。对于这个参数,0意味着无限。

票数 2
EN

Stack Overflow用户

发布于 2016-01-03 19:23:59

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

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

代码语言:javascript
复制
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 of connection,以对象的数量表示,target_size_bytes是传递给connectioncache_size_bytes,以字节为单位。因此,简单地说,如果cache_size_bytesFalse (作为默认值0,但也包括None等)转化为False,则只考虑对象的数量。如果存在cache_size_bytes,则必须同时考虑cache_sizecache_size_bytes,这两种条件都必须适用,即必须将一个对象带入缓存,如果添加的对象超过cache_size活动对象或超过cache_size_bytes字节(估计),则将从缓存中删除一些对象以腾出更多可用空间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34547232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档