最も効率的なデータインデックス付け手法は何ですか


10

誰もが知っているように、Lucene(Javaの場合)またはLucene.NET(.NETの場合)、MurMurHash、B + Treeなど、よく知られたインデックス作成アプリを使用したいくつかのデータインデックス作成手法があります。No-Sql/オブジェクトの場合指向データベース(私はC#で少し書いたり遊んだりしようとしています)、どの手法を提案しますか?

MurMurhash-2について読み、特にv3のコメントでMurmurは非常に高速であると述べています。Lucene.Netにも良いコメントがあります。しかし、一般的に彼らのメモリフットプリントはどうですか?LuceneやMurmurよりもフットプリントが少ない(そしてもちろん高速の方が望ましい場合)効率的なソリューションはありますか?または、最良の結果を得るために特別なインデックス構造を作成する必要がありますか?

私が自分で書き込もうとすると、データノードの1%やデータノードの5%など、適切なインデックス付けに受け入れられるスケールはありますか?任意の有用なヒントをいただければ幸いです。

回答:


10

あなたはあなたの質問のいくつかを台無しにしたと思います。Lucene(Lucene、NETについては何も知りませんが、同じだと思います)は、後でクエリを実行して取得できるようにするために、分析、トークンの分割、ドキュメントの保存に使用されるライブラリです。Luceneにはかなり古いが効果的なモデルがあり、逆ツリーを使用してドキュメントを検索および取得します。詳細がなければ、すべてのドキュメントはトークン(用語)に分割され、各用語についてデータ構造が維持されます。データ構造には、特定の用語を含むすべてのドキュメントが格納されます。データ構造はBTree、ハッシュテーブル、および最新のメジャーリビジョンでは独自のデータ構造にプラグインすることもできるため、使用できます。

BTree(詳細についてはWikipediaのページを参照)は一種のツリーデータ構造であり、大きなデータチャンクを扱うのに適しており、ツリーのような順序付けられた構造をディスクに格納するためによく使用されます。インメモリの場合、他のツリーの方がパフォーマンスが優れています。

Murmurハッシュ(詳細はWikipediaのページを参照)は、ハッシュテーブルで使用されるハッシュ関数のファミリーです。ハッシュテーブルの実装は重要ではありません。標準の連鎖実装またはより高度なオープンハッシュアドレッシングスキームの可能性があります。ハッシュテーブルを使用すると、順序付けされていないキーのセットからキーを高速に取得でき、次のようなタスクに応答できます。このキーはこのキーのセットの一部ですか?このキーに関連付けられている値はどれですか?

ここで、主な問題に戻ります。1つのライブラリ(Lucene)があり、データ構造に対して、両方のデータ構造がLuceneで使用されます。これらの用語は比較できないため、これらの用語で質問に答えることは不可能です。

ただし、フットプリントとパフォーマンスに関しては、質問の一部です。まず最初に、実装する必要がある操作の種類を知る必要があります。

キーの値のみを取得する必要がありますか、それとも範囲内のすべての要素を検索する必要がありますか?言い換えれば、あなたは注文が必要ですか?もしそうなら、木よりも助けることができます。そうしない場合は、ハッシュテーブルより高速ですが、代わりに使用できます。

メモリに収まらない多くのデータがありますか?はいの場合は、ディスクベースのソリューションが役立ちます(BTreeなど)。データがメモリに収まる場合は、最速のメモリ内ソリューションを使用し、ディスクをストレージとしてのみ使用します(構造が異なり、はるかに単純です)。


Rapaioに感謝します:)あなたが私に与えたポイントは非常に有用であり、何かがより明確になります。もちろん、完全に制御可能です-短期間で:非常に興奮しています-技術を学ぶ必要があります..学ぶために、私は非常に多くのドキュメントを読みますが、スタートラインにいると思います。私はBTreeがディスクに利点があることを知りませんでした(.Netの世界では、多くのライターがそれを次のように説明しています:Linked-List..No Moreのような階層データ構造!)ありがとうございました
sihirbazzz

そして、あなたが私を許可した場合、あなたよりも質の高い説明/回答が出るまで、私はこれを回答として受け入れたいと思います。そしてところで、Lucene.NETはJavaのLuceneの.NET実装です
sihirbazzz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.