私には非常に興味深い仕事があります。しかし、関連するトピックを検索するには、それを一言で表す方法がわかりません。このトピックのタイトルでさえ、私が必要としているものを反映していない可能性があります。それで、誰かがより良いタイトルを持っていれば、歓迎します。
私の問題を説明しようとします。
MySQL db テーブルには約 100,000 行あります。そして、テーブルのエントリを「比較」する必要があります。
「比較」は単に等しいという意味ではありません。計算比較レベルのアルゴリズムがあります。テーブルの列ごとに重み係数があります。エントリ #1 の column1 がエントリ #2 の column2 と等しい場合、このペアにたとえば 5 ポイントを与えることを意味します。各列についても同様です。
これを行う最も簡単な方法は、エントリの各カップルに計算ルールを適用することです。なぜ私はこれを恐れているのですか?100,000 エントリは、約 50 億回の「比較」操作を意味します。確かに、これをオンデマンドで計算し、結果をキャッシュのどこかに保存できます。しかし、最も明白な方法が最も効果的ではないと私は信じています。
だから、私の最初の質問は、私の目標を達成するためのブルートフォース以外のより良い方法はありますか?
2 つ目の質問は、計算に適したツールに関するものです。
- アプリケーション言語は PHP です。したがって、テーブル全体をメモリにロードし、データを反復処理する必要があります。
- MySQL でストアド プロシージャを作成します。
- MongoDB の集計フレームワークまたは MapReduce を使用します。
少なくとも私は最初の方法が好きです。何よりも - 最後です。
このような事例を経験された方からのアドバイスやアドバイスをお待ちしております。
グーグルに助けを求める方法がわからないので、リンクをいただければ幸いです。
アップデート:
計算規則は、私が説明したよりも少し複雑です...
テーブルには、(1 つずつではなく) グループとして一度に使用される一連の関連する列があります。仮定しましょう:
table
、、、、などのフィールドがtag_1
ありtag_2
ますtag_n
。
row_1
およびrow_2
- のエントリtable
。
ルール(疑似コード):
if(row_1.tag_1==row_2.tag_1)
{
// gives 10 points
}
elseif(row_1.tag_1 is in row_2.tags && row_1.tag_1!=row_2.tag_1)
{
// gives 5 points
}
....
// and so on
基本的に、2 つの配列の共通点を確認する必要があります。空でない場合 - ポイントが与えられます。2 つの行のタグのインデックスが一致する場合、追加のポイントが与えられます。
ストアド プロシージャ言語を使用してこれをどのように達成できるのでしょうか。どんなプログラミング言語でも簡単にできるからです。
ストアド プロシージャがこれを実行できる場合、それが私の選択です。