我注意到有一个“大尺寸”选项ZODB.DB公司,我把它当作在ZODB中存储长文本的一种可能性。在
当我第一次尝试存储一个文本语料库时(这个语料库的总大小是59.1MB,6000个文本,最长的一个长度是82KB),“large_record_size”选项设置为16777216,我从连接.root(), 并发出警告,报告了根PersistentMapping的大小,并说存储这么大的对象可能是个坏主意。在
然后我试着用OOBTree存储同样多的文本。这次没有警告。生成的数据库文件为59.2MB,理想情况下很小。我通过随机检索其中的文本来测试这个文件。顺便说一下,检索速度相当快。显然一切都是我想要的。然而,我是一个编程新手,我不认为我有足够的理解作出安全的判断。在
ZODB是存储文本的一个不错的解决方案吗?在
任何建议都将不胜感激。在
该选项仅用于控制何时发出警告:
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。在
相关问题 更多 >
编程相关推荐