B-TreeデータベースはHashテーブルよりも高速であると聞いたので、プロジェクトにB-Treeデータベースを使用することを考えました。そのようなデータ構造を使用できるようにするPythonの既存のフレームワークはありますか、それとも最初からコーディングする必要がありますか?
6 に答える
メモリ内またはブロックストレージ(データベース内など)のいずれかで、ハッシュテーブルよりもBツリーを選択する唯一の理由は、equal以外のクエリをサポートするためです。Bツリーを使用すると、範囲クエリを優れたパフォーマンスで実行できます。多くのKey-Valueストア(berkley dbなど)は、キーをハッシュしているため、これを外部に表示しませんが、これにより、データセット全体を迅速かつ安定して反復できます(イテレーターは追加があっても有効なままです)または削除するか、ツリーのバランスを取り直す必要があります)。
範囲クエリが不要で、同時反復が必要ない場合は、bツリーは必要ありません。ハッシュテーブルを使用すると、どの規模でも高速になります。
編集:私は上記が実際に真実である機会がありました。このため、blist
パッケージはソートされたコンテナライブラリの最も完全な実装のようです。
本当にzodbをチェックする必要があります。 http://www.zodb.org/en/latest/
スペイン語でhttp://sourceforge.net/projects/banta/files/Labs/zodb/Monografia%20-%20ZODB.pdf/downloadですが、私はそれについて長い間モノグラフを作成しました
英語の情報はいたるところにあります。
最初に実行しようとしていることをプログラムし、必要に応じて最適化します。限目。
編集:
http://pypi.python.org/pypi/blist
Pythonの組み込みリストの代わりにドロップインします。
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を使用する必要があります。
eGenix mxBaseDistributionの一部であるmxBeeBaseを確認することをお勧めします。これには、高速のオンディスクB + Tree実装が含まれ、Pythonでオンディスク辞書またはデータベースを構築できるストレージクラスを提供します。
ここに、優れたbtreeの純粋なPython実装があります。必要に応じて適応させることができます。