【发布时间】:2013-09-23 09:07:43
【问题描述】:
我知道在 ZODB 中,您可以使用 BTree 来存储大量数据,并根据总排序与树大小成对数的键进行查找。
问题是,我有一些Persistent 对象Foo,还有一些其他Persistent 对象Bar,我想在它们之间存储一个双向映射,在bidict 的意义上.
即执行这两种访问应该是有效的(对数时间):
# foo is a Foo; bar is a Bar; foos is a collection of persisted Foos; bar is a collection of persisted Bars
baz = foos[foo]
quux = bars[bar]
# baz is a Bar that foo is mapped to
# quux is the Foo that bar is mapped to
我现在能想到的唯一方便的方法是简单地将我的存储需求翻倍并维护两个BTrees:一个存储从 A 到 B 的映射,另一个存储从 B 到 A 的映射。当然,在任何时候, BTrees 将包含相同的元素,因为映射的添加和删除是同时在两者上执行的。
我对此的担忧是,如果没有数据库约束,这些树可能会解耦。你觉得这样可行吗?
【问题讨论】:
标签: python bidirectional zodb bidirectional-relation