質問

私たち全員が知っているように、Lucene(Javaの場合)やLucene.Net(.NET用)、Murmurhash、B+Treeなどの有名なインデックスアプリによって、NO-SQL /オブジェクトなど、いくつかのデータインデックス作成手法があります。方向のデータベース(C#を使用して少し書きたい/再生しようとしています)、どのテクニックを提案しますか?

私はMurmurhash-2について読みましたが、特にV3コメントはMurmurが非常に速いと言います。また、lucene.netには良いコメントがあります。しかし、一般的に彼らのメモリフットプリントはどうですか?ルーセンやつぶやきよりもフットプリントを使用する(そしてもちろん速い場合はもちろん望ましい場合)効率的なソリューションはありますか?または、最良の結果を得るために特別なインデックス構造を書く必要がありますか?

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

役に立ちましたか?

解決

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

btree(参照 ウィキペディアページ 詳細については、一種のツリーデータ構造です。これは、大量のデータを使用するのに適しており、ディスク上にツリーのような順序付けされた構造を保存するためによく使用されます。メモリ内の場合、他の木のパフォーマンスが向上します。

Murmur Hash(参照 ウィキペディアページ 詳細については、ハッシュテーブルで使用されるハッシュ関数のファミリーです。ハッシュテーブルの実装は重要ではなく、標準的なチェーンの実装またはより高度なオープンハッシュアドレス指定スキームである可能性があります。ハッシュテーブルは、順序付けられていないキーのセットからキーを高速にすることができ、次のようなタスクに答えることができるという考えです。このキーに関連する値はどれですか?

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

ただし、質問のフットプリントとパフォーマンスの部分について。まず、どの種類の操作を実装する必要があるかを知る必要があります。

キーの価値を取得する必要がありますか、それとも範囲内のすべての要素を見つける必要がありますか?言い換えれば、注文が必要かどうか? もしそうなら、木よりも役立ちます。そうでない場合、ハッシュテーブルよりも高速なハッシュテーブルを使用できます。

メモリに合わないデータはたくさんありますか? はいの場合、ディスクベースのソリューション(Btreeなど)が役立ちます。データがメモリに適合する場合、最速のメモリソリューションを使用し、ディスクをストレージとしてのみ使用します(異なる構造を持つ、はるかにシンプル)。

ライセンス: CC-BY-SA帰属
所属していません datascience.stackexchange
scroll top