0

私は以下を含む成長しているデータベースを持っています:

  • 需要の表(複数の基準)
  • オファーの表(複数の基準)

基準には、文字列(例:国名)、ブール値、数値、..を指定できます。

多かれ少なかれ一致するすべてのデマンドオファーを見つけたいと思います(ジョブバンク、マッチメイキングなどに少し似ています)

テーブルに多くの行が含まれていない場合は、次のように計算します。

  • 需要ごとに、各基準の関連性を平均することにより、オファーごとにマッチングの関連性を計算します。

しかし、重要なデータベースの場合、これには時間がかかりすぎますね。

どのような解決策をお勧めしますか?

4

2 に答える 2

1

2010年6月24日から回答を拡張するには-事前に計算された関連性スコアを結合テーブル(デマンドキー、オファーキー、関連性スコア)にキャプチャします。この結合テーブルは、Count(Demands)* Count(Offers)レコードを保持できることに注意してください。関連性スコアがしきい値よりも大きいレコードのみを保存するのが賢明な場合があります。

このアプローチでは、データ挿入時にO(n)の計算が複雑になります。需要の機能スペース(オファーの場合と同様)が、同じオファーの関連性スコアが高い2つの需要も「クローズ」であるという仮定の場合、この複雑さをO(log(n))に減らすことができる場合があります。それらの機能スペースは、以下を保持します。

  • 需要の比較機能(およびオファーの場合は個別)でK最近傍分析を実行し、Kの値をデータセットのおよそlog(n)に制限します。
  • クラスターの代表的な特徴ベクトル間の一致関連性を計算し、それをデータベーステーブルに保存します。
  • 挿入時に、新しいレコードとそのタイプの各クラスター間の「距離」を測定し、クラスターへの外部キーを新しいレコードに保存します。
  • 需要に一致するオファーを検索する場合は、需要からそのクラスター、最も関連性の高いオファークラスターから個々のオファーへのリンクをたどります。

これは、速度と特異性を交換します。需要のサンプルを各オファーと比較し、関連性で並べ替えることにより、最初の仮定の信憑性を検証します。順序付けられたオファーのセットをトラバースし、クラスター検索の結果セットで見つかったオファーの数を数えてから、欠落しているオファーを見つけます。このテストの主観的な分析により、クラスタリングにかかる​​コストがわかります。

于 2011-08-08T18:05:36.853 に答える
0

私はあなたが説明した方法でそれを行いますが、ローリングキャッシュメカニズムといくつかのインデックスを使用します。

創造との関連性を考え出し、それがどうなるか見てみましょう。頻度が低い場合 (高読み取り、低書き込み) は、増分追加で問題ない可能性があります。両端で高い場合は、2 つのデータベースに分割できます... 一方で更新を処理し、後処理されたデータをもう一方に定期的にプッシュします。これが読み取りのデフォルト ソースです。

于 2010-06-24T09:27:50.220 に答える