私は、メガバイトからテラバイトの範囲のデータに対して高速検索、挿入、および削除操作を実現するプロジェクトを持っています。私は後半のデータ構造を勉強して分析していました。赤い黒ツリー対Bツリー
をデータがメモリが1回で(10〜15件のテラバイトのサンプル範囲)を扱うことができるものよりもはるかにである:具体的なので、私は3例を紹介し、その上で質問をお願いしたいと思います。この場合、データ構造をディスクに格納します。
データはシステムのメモリに比べて相対的に少なく、メモリ自体に格納され、速度のために動作することができます。
データは空きメモリを超えており、ページングファイル内の可能な連続するデータチャンクのサイズよりも小さいとみなされます。私はディスク上のファイルにデータ構造を格納し、ファイルのメモリマッピングを行います。私が描かれている
結論は次のとおりケース1について
それはケース2のディスク回転
によって生産遅れを節約するように、私は、より速いアクセスのためにBツリーを使用する必要があり、Iデータがメモリ上にあるので高速のアクセスのためにRed Black Treeを使用する必要があります。私がBツリーを使用する場合、私がしなければならないものよりも悪い場合にスキャンする必要がある要素の数は少なくなるでしょう。
ケース3の場合、私はこのファイルがディスク上のネイティブOS I/Oファイルを操作するために、Bツリーはより良いオプションかレッドブラックツリーであるべきですか?
上記の3つの結論が正しいかどうか、どこが間違っているのか、そして3つの別々のケースでパフォーマンスをどのように改善できるかを知りたいと思います。
私は最初から設計した赤い黒のツリーとBのツリーを持つC++言語を使用しています。私はファイルマッピングのためのBoostライブラリを使用しています。
更新1 :: thisの記事を読んでいました。本当の良い洞察力を得ました。これは、私がケースで行った比較のタイプが間違っているかもしれないと感じさせるものです。 http://idlebox.net/2007/stx-btree/stx-btree-0.8.3/doxygen-html/speedtest.html
あなたはどんな検索をしますか?キーで簡単に検索できますか?キーはどのように見えますか? – svick
あなたは多かれ少なかれ正しいです。 実装が完了したら、ここで質問してください。 – nikhil
@svickはい私はキーで単純な検索をしています。最も一般的な方法では、慎重に、または数値的に連続した順序で、(2^8)-1のような1から始まる異なる自然数のセット – swanar