2016-09-01 9 views
-1

2つの文字列リストがあります。最初は名前のリスト(6MB)、2番目は文のリスト(約3百万文)です。 私は文章を通してそれぞれの名前を探したい。それには数日かかる。 私はパターンマッチングを使用しています。また、文章や名前はユーザによって生成され、不確実であるため、正規表現をチェックします。 どうすれば速くできますか?Javaでインデックスを使用して一致する文字列

+3

適切なデータベースがおそらくより高速になります。 – SomeJavaGuy

+0

私はデータベースにすべてを持っています。私はどのようにインデックスを検索し、文字列を一致させるために使用するのか分からない。読むべき情報源は私にも役立ちます。 – Raha1986

+1

ジョブを実行するクエリを作成するより。それはJavaですべてを行うよりもずっと速くすべきです。 – SomeJavaGuy

答えて

0

Google BigQueryをご覧ください。
データが読み込まれると、数分で回答が得られます。 SQLと似た構文と述語の正規表現をサポートしています。だからあなたはそれに文章を読み込み、where節にある単語で質問を出すことができます。

すべてのクラウドサービスと同じように、DB管理スキルは必要なく、保守作業も不要です。もちろん、あなたはそのすべての良さを支払う必要があります。

私はこのツールを使用して、複数のテキスト列を含む300Mレコードを正規表現で検索し、通常1分以内に答えを得ました。

重要な注意点:このデータベースはデータの更新をサポートしていません(レコードの更新も削除もありません)。これは、静的なデータ、理想的なログファイル、過去の記録などに理想的です。もう1つ重要な注意点は、データが雲の中にあり、あなたの制御下にないことです。

+0

データをクラウドに入れることができません! – Raha1986

+0

それは残念です。この製品はあなたの要求に完全に合っています –

+0

返事のためにとにかくありがとう – Raha1986

1

名前のリストを高速検索(ハッシュテーブル、BSTなど)を提供するデータ構造に格納します。 Javaは、それらの多くのためのライブラリを提供します。

これで、作成された名前のデータ構造内の各トークンを検索し、検索します。毎回名前のリストをたどる時間を節約します。それでも、シングルスレッドで時間を取るつもりですが、簡単に並列化することができます。

同じタスクを実行する複数のスレッドを(計算リソースごとに)作成できますが、別の場所から文章のファイルを読み始めることができます。

さらに洗練された並列化のために、メモリ内の計算を行い、タスクを任意の数のスレッドに容易に拡大するようなフレームワークを使用することをお勧めします。

関連する問題