如何在 ZODB 中设置缓存大小?
How to set cache size in ZODB?
我使用以下代码建立 ZODB 连接:
connection = ZODB.connection('zodb/connect4_reinf.fs')
dbroot = connection.root()
如何设置 RAM 缓存大小?
来自 class 数据库的源代码:
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 表示对此参数无限制。
关于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
是 connection
的 cache_size
,在对象数中,target_size_bytes
是传递给 connection
的 cache_size_bytes
, 以字节为单位。所以简而言之,如果 cache_size_bytes
评估为 False
(作为默认值 0
,还有 None
,等等...),只考虑对象的数量帐户。如果存在cache_size_bytes
,则同时考虑cache_size
和cache_size_bytes
,并且必须满足两个条件,即必须将对象带入缓存时,如果添加将导致有超过 cache_size
个活动对象 或 超过 cache_size_bytes
字节(估计),一些对象将从缓存中删除以腾出更多可用空间。
我使用以下代码建立 ZODB 连接:
connection = ZODB.connection('zodb/connect4_reinf.fs')
dbroot = connection.root()
如何设置 RAM 缓存大小?
来自 class 数据库的源代码:
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 表示对此参数无限制。
关于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
是 connection
的 cache_size
,在对象数中,target_size_bytes
是传递给 connection
的 cache_size_bytes
, 以字节为单位。所以简而言之,如果 cache_size_bytes
评估为 False
(作为默认值 0
,还有 None
,等等...),只考虑对象的数量帐户。如果存在cache_size_bytes
,则同时考虑cache_size
和cache_size_bytes
,并且必须满足两个条件,即必须将对象带入缓存时,如果添加将导致有超过 cache_size
个活动对象 或 超过 cache_size_bytes
字节(估计),一些对象将从缓存中删除以腾出更多可用空间。