2011-01-12 9 views
1

私は問題に直面しています。私はミニウェブクローラーをやっています。今、効率的なHashMapを持つことが重要です。私はちょうど挿入と検索だけでキー/値のデータ構造が欲しいです。LuceneはKey/Value HashMapに適していますか?

Luceneは、キーと値の2つのフィールドを持つだけで仕事をすることができます。それは効率的ですか? もっと簡単なソリューションはありますか?

Ps:PHPでもJavaでも構いませんが、私はPHPを好むでしょう。

注:永続化する必要があります。そしてそれは何度も開いて閉じます。

+0

javaでは、あなたは普通の 'HashMap'を使用できないでしょうか? – gabuzo

+0

私はそれを永続させる必要があります。だから私はそれを書いて、それを保存します。私はそれをもう一度ロードし、さらにいくつか追加して保存します。それを開いて何かを探す。 – knokio

+0

キータイプとは何ですか?値の種類は?大きなテキストの中の単語を検索する必要がありますか?なぜデータベースを使用しないのですか? –

答えて

0

Luceneは、あなたが記述する仕事の間違ったツールです。

最も簡単な解決策はHashMapで、それはかなり効率的です。 HashMapが悪い解決策になると思われる特別な理由はありますか?

クラスタにスケールアウトする必要がある場合は、Memcachedに切り替えます。

0

Solrを参照してください。Luceneのベストプラクティス実装です。これはRESTベースのインターフェイスであり、セットアップにかなり簡単です。使用できるPHP clientがあります。

+0

私はSolrを見ました。しかし、私は簡単なことが欲しいと私はRESTの呼び出しが必要ない。私はちょうどメモリ(まだ、永続的)のキー/値の構造が必要です。 – knokio

5

巨大でないデータセットに対する高速で永続的なキー値ストアが必要な場合は、おそらくLuceneが最良のソリューションではない可能性があります.Barkeley DBが当然の選択です。それは、Grant Ingersollが、今年のLucene Revolutionカンファレンスで、これについて正確に話をしてくれたことです。彼は故意にプロLuceneの偏見で質問に来て、現在の文書データベース(CouchDBのようなもの)がLuceneが提供していないものについて何人かの聴衆と往復しました。最終的にセカンダリインデックスが必要な大規模でないデータセットについては、これは素晴らしいソリューションだと思います。 Luceneのキー/バリュールックアップのパフォーマンスは、Berkeley DB、CouchDB、Tokyo Tyrantなどと同じくらい速いものではありませんが、多くのアプリではまだ十分に速いです。私は彼が最近のラップトップでキー/値検索のためにおよそ50msを測定したと思う。後でセカンダリインデックスを追加する必要がある場合(Webクロールの結果と同じように)、Luceneはこれらの製品よりもはるかに簡単です。

BDBのような他のツールは、Luceneよりも簡単にコーディングすることができます。しかし、それが懸念されている場合は、Solrを使用するだけで簡単にドキュメントを追加し、簡単なHTTP呼び出しで検索することができます(schema.xml設定ファイルのフィールドを変更する必要があります。そうでない場合は、箱からすぐに使用してください)。

データセットが大きすぎて1台のマシンに収まらない場合、Project VoldemortやRiakのような分散型のキーバリューストアは、セットアップと管理が簡単です。しかし、Luceneはあなたが1台のマシンでかなり遠くに来るようにします。特に、多くのフィールドをインデックスに登録していないのであれば、少なくともTBであれば、私は推測できます。

Luceneを使用している場合は、Luceneが作成しているので、検索したいキー以外のプロパティが本当にないかどうかは確かです簡単です。

2

数千万件のレコードを持つカップルでキー値ストアとしてsolrを使用しました(ab)。また、本番では、インデックス付きデータの完全コピーをjson形式で含むインデックスを持っており、この値を返すクエリを実行することで、データベースの参照が冗長ではるかに遅くならないようにしています。

あなたのニーズに応じて、それはかなり良い解決策ですが、制限を認識する必要があります。

1)すでにsolrまたはluceneを使用している場合は、別の技術を使用する必要がないのが便利です。

2)Luceneは単一行のルックアップに優れており、その目的のためにうまくスケールする必要があります。

3)余分な列をいくつか追加するだけで、クエリ機能も利用できます。

短所 1)Luceneはトランザクションストアとして設計されていません。通常、複数の行を追加してからコミットします。したがって、書き込みはACIDの意味で原子的ではありません。あなたが重要なデータを保管しているのであれば、通常はそれは悪いことです。最近(近く)のリアルタイムインデックス作成が可能ですが、それでも権利を得るには多くの手間が必要です。

2)あなたが追加してからコミットするまでの間に遅延があるので、それはあなた自身の書き込みを読むことが問題になることを意味します。

3)書き込みスループットが必要な場合は、一括してインデックスを作成することをお勧めします。個別のキーを1つずつ書き込む必要がある場合は、スループットが低下します。

4)照会時にルーセンが優れていますが、大きな結果セットには問題があります。たとえば、値のすべてのキーを生成するクエリは、数千万行のソルインデックスで非常に高価になる可能性があります。

0

CouchdbMongoDBなどのドキュメント指向のデータベースを調べることができます。

関連する問題