我使用以下代码建立ZODB连接:
connection = ZODB.connection('zodb/connect4_reinf.fs')
dbroot = connection.root()
如何设置RAM缓存大小?
答案 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)
此处target
是cache_size
connection
,target_size_bytes
,对象数量,cache_size_bytes
是传递给connection
的{{1}},字节。简而言之,如果cache_size_bytes
躲避False
(作为默认值0
,还有None
等等),则只会考虑对象的数量帐户。如果存在cache_size_bytes
,则会考虑cache_size
和cache_size_bytes
,并且这两个条件都必须适用,即必须将对象带入缓存,如果添加将导致有超过cache_size
个活动对象或超过cache_size_bytes
个字节(估计),一些对象将从缓存中删除,以腾出更多空间。