0

ユーザーから、姓、名、性別、生年月日を含む Facebook の友達のリストを収集します。次に、その名前のデータベース (MySQL にテーブルとして保存されている) を、同様の情報で構成される別のデータベースと比較しようとしています。

2 番目のデータベースがはるかに大きなレコード セット (>500k 行) である場合に、これらの結果を概念的にリンクする最良の方法は何でしょうか?

これが私が提案していたものです:

  • Facebook の名前を繰り返す
  • 最後 + 生年月日を検索 - 一致する場合は、「信頼できる」一致とみなします
  • 最後 + 最初に検索 - 一致する場合は、「可能性の高い」一致と見なします
  • Last + Lichtenstein(First) を特定のレベルより上で検索し、「可能な」一致を想定します

これをシーケンシャルな mySQL アプローチよりも高速にする可能性のある、私が見逃している分散コンピューティングの概念はありますか? 記録を見逃すよりも偽陽性を出さない方がはるかに重要であることに注意して、他にどのような落とし穴が発生する可能性がありますか?

4

2 に答える 2

1

(インタラクティブなものではなく) データ セット全体を操作したい場合、このデータ セットのサイズは十分に小さいため、単純にメモリに取り込んでそこから移動することができます。List を使用してデータを保持し、一意の姓ごとに (整数インデックスを介して) リスト内のすべての場所を指す Map> を作成します。また、より複雑なマッチング ロジックを実行できるように設定することもできますが、SQL に強制的に実行させようとすることに巻き込まれることはありません。特に、2 つの異なる物理データベースにまたがっているので...

于 2013-09-26T21:34:12.547 に答える
1

はい、あなたのアイデアはより良いアルゴリズムのようです。

パフォーマンスが重要であると仮定すると、キャッシュを使用して、検索されたばかりの値を保存できます。NoSQL データベースで結果のインデックス作成を開始して、結果が非​​常に高速になり、読み取りパフォーマンスが向上するようにすることもできます。MySQL を使用する必要がある場合は、ポリグロットの永続性についてお読みください。

単純さが問題であると仮定すると、NoSQL データベースでインデックス作成を引き続き使用できるため、無数の結合を行う必要がなくなると、ユーザーと開発者のエクスペリエンスが損なわれます。

もっと多くの懸念があるかもしれませんが、それはどこでそれを使用したいか、ウェブサイトで使用したいか、またはそのようなデータ分析目的に依存します.

于 2013-09-26T15:59:14.363 に答える