ZODB能处理tex的“大记录”吗

2024-05-13 20:44:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我注意到有一个“大尺寸”选项ZODB.DB公司,我把它当作在ZODB中存储长文本的一种可能性。在

当我第一次尝试存储一个文本语料库时(这个语料库的总大小是59.1MB,6000个文本,最长的一个长度是82KB),“large_record_size”选项设置为16777216,我从连接.root(), 并发出警告,报告了根PersistentMapping的大小,并说存储这么大的对象可能是个坏主意。在

然后我试着用OOBTree存储同样多的文本。这次没有警告。生成的数据库文件为59.2MB,理想情况下很小。我通过随机检索其中的文本来测试这个文件。顺便说一下,检索速度相当快。显然一切都是我想要的。然而,我是一个编程新手,我不认为我有足够的理解作出安全的判断。在

ZODB是存储文本的一个不错的解决方案吗?在

任何建议都将不胜感激。在


Tags: 文件文本警告dbsize尺寸选项公司
1条回答
网友
1楼 · 发布于 2024-05-13 20:44:10

该选项仅用于控制何时发出警告:

When data records are large, a warning is issued to try to prevent new users from shooting themselves in the foot.

>>> db = ZODB.DB('t.fs', create=True)
>>> conn = db.open()
>>> conn.root.x = 'x'*(1<<24)
>>> ZODB.tests.util.assert_warning(UserWarning, transaction.commit,
...    "object you're saving is large.")
>>> db.close()

large_record_size用于设置阈值,默认值为1<<30,或1GB。在

如果超过这个大小,您应该使用ZODB blob,或者将数据拆分成更小的持久记录,因为对大型同质记录的更改在提交时将导致巨大的混乱。请看我之前的回答:when to commit data in ZODB。在

为您的PersistentMapping发出警告,因为它将所有键和值存储在一条记录中。这里计算的不是文本文档的单个大小,而是所有文本文档加在一起的大小(pickle of)在这里触发警告。在

或者将文本文档存储在PersistentMapping中,作为Persistent的子类(以便值在ZODB中获得其自己的记录),或者使用BTree.OOBTree对象。在

Advanced ZODB for Python Programmers。在

相关问题 更多 >