我有三个python对象数据库,它们是通过ZODB模块构建的,我想将它们合并成一个。我之所以有三个而不是一个是因为每个对象都属于三个总体中的一个,并且在我的代码对所述对象进行分析后被添加到数据库中。每个对象的分析肯定可以并行进行。我的代码需要几天的时间来运行,所以为了避免这是一周的工作,我有三台计算机,每台计算机处理三个总体中的一个对象,并在完成后输出一个ZODB数据库。由于ZODB处理冲突的方式,我不能让三台计算机将来自不同群体的对象的分析添加到相同的数据库中。实际上,在关闭数据库之前,它是从内部锁定的。在
我的问题是: 1) 如何将多个.fs数据库文件合并到一个主数据库中?每个数据库的结构完全相同,这意味着每个数据库之间的字典结构是相同的。例如,MyDB可以表示第一个总体的ZODB数据库结构:
root.['MyDB']['ID123456']['property1']
... ['ID123456']['property2']
... ... ...
root.['MyDB']['ID123457']['property1']
... ['ID123457']['property2']
... ... ...
...
其中省略号表示更多的相同。“property1”、“property2”等键的名称对于数据库中的每个“IDXXXXXX”键都是相同的,尽管值肯定会有所不同。在
2)在并行运行这些代码的同时仍然产生一个单一的ZODB结构,那么做什么才是更明智的做法?在
如果需要澄清,请告诉我。在
谢谢!在
好吧,因为ZODB对象数据库本质上只是python对象的字典,this post恰好是我要寻找的答案。它讨论了如何将数据库添加到一起,并在这样做的过程中将两个数据库的任何相似的公共键相加在一起。这仍然是我要寻找的答案,因为两个数据库都是互斥的,因此结果将是一个单独的ZODB数据库,其中包含其他两个数据库的未修改条目。在
更明智的做法是使用ZEO在进程之间共享ZODB存储。在
ZEO在网络上共享一个ZODB数据库,并将冲突解决扩展到多个客户机上,这些客户机可以驻留在同一台机器上或其他地方。在
或者,您可以使用^{} backend 来存储ZODB,而不是使用标准的
FileStorage
;这个后端使用传统的关系数据库来提供并发访问。在请参见zc.lockfile.LockError in ZODB以获取这两个选项的一些用法示例。在
ZODB数据结构只是持久化的Python数据结构;合并三个ZODB数据结构需要打开每个数据库并根据需要合并嵌套结构。在
相关问题 更多 >
编程相关推荐