我使用以下代码建立ZODB连接:
connection = ZODB.connection('zodb/connect4_reinf.fs')
dbroot = connection.root()如何设置RAM缓存大小?
发布于 2016-01-01 12:44:43
来自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意味着无限。
发布于 2016-01-03 19:23:59
关于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 of connection,以对象的数量表示,target_size_bytes是传递给connection的cache_size_bytes,以字节为单位。因此,简单地说,如果cache_size_bytes将False (作为默认值0,但也包括None等)转化为False,则只考虑对象的数量。如果存在cache_size_bytes,则必须同时考虑cache_size和cache_size_bytes,这两种条件都必须适用,即必须将一个对象带入缓存,如果添加的对象超过cache_size活动对象或超过cache_size_bytes字节(估计),则将从缓存中删除一些对象以腾出更多可用空间。
https://stackoverflow.com/questions/34547232
复制相似问题