ZODB では、 BTreeを使用して大量のデータを格納し、ツリーのサイズに対して対数的な順序でキーに基づいてルックアップできることを知っています。
問題は、いくつかのPersistent
objectとFoo
他のPersistent
オブジェクトがあり、 bidictBar
の意味で、それらの間の双方向マッピングを保存したいということです。
つまり、次の 2 つのアクセスを実行するのは効率的 (対数時間) である必要があります。
# 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
今考えられる唯一の便利な方法は、単純にストレージ要件を 2 倍にし、2 つの を維持することBTrees
です。1 つは A から B へのマッピングを格納し、もう 1 つは B から A へのマッピングを格納します。もちろん、常に、BTree にはマッピングの追加と削除は両方でタンデムに実行されるため、同じ要素です。
これに関する私の懸念は、データベースの制約がないとツリーが分離される可能性があることです。これは実行可能だと思いますか?