0

私は約 10 億個の一意の文字列のリストを持っていますが、ほとんどは数十文字の長さです。検索文字列を含む、または検索文字列に一致するすべての文字列を、理想的には 100 ~ 200 ミリ秒未満で、できるだけ少ないハードウェアで検索したいと考えています (大量の RAM が必要になると思います)。これを保存して取得するための最良の方法は何ですか?

  • 私が読んだことから、MySQLLIKE '%search%'はインデックスを使用していませんが、LIKE '%search'両方とも使用LIKE 'search%'しています。これは最後の手段として受け入れられますが、ターゲット文字列内の任意の場所で検索文字列を見つけたいので理想的ではありません。
  • Redis のようなキーと値のストアを使用すると、すべての可能な部分文字列の組み合わせを格納する必要があり、大量の RAM が必要になると思います。
  • 文字列のリストは、およそ 12 GB の大きさです。数十億の行/ドキュメント/レコードの代わりに、Lucene のような全文検索サーバーは実行可能ですか、それとも理想的ですか? 解析を確実に節約できます。
4

1 に答える 1

0

多くの MapReduce フレームワークの 1 つを使用して問題を解決することを検討したことがありますか? MapReduce の本質は、分割して征服することです。つまり、非常に単純な問題 (たとえば、10 億の一意の文字列の 1 つだけに検索用語が含まれているか) を 10 億回解決し、10 億の回答を 1 つの回答に結合します。また、大量の RAM を搭載したマシンを 1 台だけ使用して問題を解決するのではなく、装備の少ない多数のマシンに一緒に問題を解決してもらうことができます。見てみな。それはあなたが探しているものかもしれません。

于 2012-05-04T05:45:17.013 に答える