3

現在、Mysql に 3 列のテーブルがあります。

DocId             Int
Match_DocId       Int
Percentage Match  Int

ドキュメント IDを、ほぼ重複しているドキュメント IDパーセンテージと共に保存しています。これは、2 つのドキュメントがどれだけ一致しているかを示します。

したがって、1 つのドキュメントに 100 個のほぼ重複がある場合、その特定のドキュメントには 100 行あります。

現在、このテーブルには合計 1,400 万のドキュメントに対して 10 億を超えるレコードがあります。ドキュメントの総数は 3,000 万に達すると予想しています。つまり、ほぼ重複した情報を格納するテーブルには、50 億行以上の行があり、それ以上になる可能性があります。(ほぼ重複するデータは、ドキュメント セット全体と比較して指数関数的に増加します)

ここに私が持っているいくつかの問題があります:

  1. mysql テーブル内のすべてのレコードを取得するのに時間がかかります。
  2. クエリにも多くの時間がかかります。

私が実行するいくつかのクエリを次に示します。

  • 特定のドキュメントにほぼ重複があるかどうかを確認します。(これは比較的高速ですが、それでも遅いです)

  • 特定のドキュメント セットについて、各パーセンテージ範囲 (パーセンテージ範囲は 86 ~ 90、91 ~ 95、96 ~ 100) に近い重複がいくつあるかを確認します。

    このクエリには多くの時間がかかります。ほとんどの場合、失敗します。パーセンテージ列でグループ化します。

これは、利用可能な NoSql ソリューションで管理できますか?

データのクエリ中にグループごとのサポートが必要なため、NoSql ソリューションの SQL クエリのサポートには懐疑的です。

4

2 に答える 2

2

MySQL

現在の MySql ソリューションでシャーディングを試すことができます。つまり、大きなデータベースを小さな固有のデータベースに分割します。それに関する問題は、一度に 1 つのシャードだけで作業する必要があり、これは高速であることです。複数のシャードでクエリを使用する場合、非常に遅くなります。

NoSql

Apache Hadoopスタックは一見の価値があります。わずかに異なるクエリを実行できるシステムがいくつかあります。良い点は、それらすべてが相互にうまく相互運用する傾向があることです。

特定のドキュメントにほぼ重複があるかどうかを確認します。(これは比較的高速ですが、それでも遅いです)

HBaseは、大きなテーブルに対してこのジョブを実行できます。

特定のドキュメント セットについて、各パーセンテージ範囲内に重複に近いものがいくつあるかを確認します。(パーセンテージの範囲は 86 ~ 90、91 ~ 95、96 ~ 100 です)

これはMap-Reduceに適しているはずです


他にも多くのソリューションがあります。他の NoSql データベースのリストと簡単な説明については、このリンクを参照してください。

于 2012-08-09T10:16:44.353 に答える