21

B-TreeデータベースはHashテーブルよりも高速であると聞いたので、プロジェクトにB-Treeデータベースを使用することを考えました。そのようなデータ構造を使用できるようにするPythonの既存のフレームワークはありますか、それとも最初からコーディングする必要がありますか?

4

6 に答える 6

30

メモリ内またはブロックストレージ(データベース内など)のいずれかで、ハッシュテーブルよりもBツリーを選択する唯一の理由は、equal以外のクエリをサポートするためです。Bツリーを使用すると、範囲クエリを優れたパフォーマンスで実行できます。多くのKey-Valueストア(berkley dbなど)は、キーをハッシュしているため、これを外部に表示しませんが、これにより、データセット全体を迅速かつ安定して反復できます(イテレーターは追加があっても有効なままです)または削除するか、ツリーのバランスを取り直す必要があります)。

範囲クエリが不要で、同時反復が必要ない場合は、bツリーは必要ありません。ハッシュテーブルを使用すると、どの規模でも高速になります。

編集:私は上記が実際に真実である機会がありました。このため、blistパッケージはソートされたコンテナライブラリの最も完全な実装のようです。

于 2010-10-12T02:24:58.867 に答える
4

本当にzodbをチェックする必要があります。 http://www.zodb.org/en/latest/

スペイン語でhttp://sourceforge.net/projects/banta/files/Labs/zodb/Monografia%20-%20ZODB.pdf/downloadですが、私はそれについて長い間モノグラフを作成しました

英語の情報はいたるところにあります。

于 2014-08-01T14:56:49.153 に答える
3

最初に実行しようとしていることをプログラムし、必要に応じて最適化します。限目。

編集:

http://pypi.python.org/pypi/blist

Pythonの組み込みリストの代わりにドロップインします。

于 2010-10-11T20:18:53.943 に答える
2

SQLite3は内部でB+ツリーを使用しますが、Key-Valueストアが必要な場合があるようです。そのためにBerkeleyDBを試してください。トランザクションが必要ない場合は、HDF5を試してください。分散型Key-Valueストアが必要な場合は、http://scalien.com/keyspace/もありますが、これは、あらゆる種類のNoSQLKey-Valueストアを開くサーバークライアントタイプのシステムです。

これらのシステムはすべて、挿入と取得のためにO(log(n))になるため、現在使用しているハッシュテーブルよりも低速になる可能性があります。

京都内閣はハッシュツリーを提供しているので、挿入と取得にはO(1)である必要があるため、これはあなたが見ているものの多くかもしれませんが、それが必要な場合は順番にトラバースすることはできません( '現在ハッシュツリーを使用していますが、これは問題にはなりません)。

http://fallabs.com/kyotocabinet/

パフォーマンスを求めている場合は、速度が重要なアイテムをコンパイル型言語で実装してから、PythonでラッパーAPIを使用する必要があります。

于 2010-10-12T01:26:41.817 に答える
2

eGenix mxBaseDistributionの一部であるmxBeeBaseを確認することをお勧めします。これには、高速のオンディスクB + Tree実装が含まれ、Pythonでオンディスク辞書またはデータベースを構築できるストレージクラスを提供します。

于 2011-05-26T22:52:01.067 に答える
2

ここに、優れたbtreeの純粋なPython実装があります。必要に応じて適応させることができます。

于 2011-09-10T13:11:55.480 に答える