3

私の仕事には、いくつかのタイプの多面多面体テーブルがあります。単語を他の単語 (ngram) に関連付けるアプリと、ユーザーを他のユーザー (友達/フォロワー) に関連付けることができるデータベースがあります。

このデータとの関係を構築して、アプリケーションの推奨事項とユーザーの両方にとって有用な接続を見つける方法を知りたいです。

ノードを別のノードにリンクする外部キーを持つ次の単純化されたデータベース テーブルを取り上げます。

id | node1  | node2 
--------------------
1  |   1    |   2
2  |   1    |   3
3  |   1    |   4
4  |   2    |   1
5  |   2    |   3
6  |   2    |   5
7  |   3    |   1

たとえば、上の表では、「1」が最も多くリンクされているため (2 & 3)、「1」が最も人気があることは明らかです。また、「2」は「1」と非常に多くの関係を共有している (そして「1」は「4」にリンクされている) ため、「2」を「4」にリンクする必要があることも明らかです。

したがって、たとえば、次のことがわかります。

  • ノードを他のノードに接続するパス。
  • 類似性に基づく有益な接続 (推奨事項)
  • 関連する接続を共有するノードのグループ

関係の他の一般的な形式は、user <=> friendsまたは のようなものblog_post <=> tagsです。

フロントエンドで直接実行できる SQL クエリ、またはこのデータから関係を引き出すために毎晩実行できるマップ削減ジョブを探しています。

4

4 に答える 4

1

ffriend が指摘しているように、あなたのデータ構造はあなたがやろうとしていることに対して適切です。これはどちらかというとフロント エンドの質問です。たとえば、どのように情報を提示しますか?

ノード間のホップ数 (関連性)、1 つのノードに接続するノードの数 (幅)、意味のあるパスに必要なホップ数 (深さ) を決定するためのノード トラバーシング テクニックを検討する必要があります。私が考慮する他の唯一のことは、関連性を判断するのに役立つ使用法です。これは多かれ少なかれ、使用中にノード パスが移動された回数のカウンターになります。ここで、特定のパスに重みを割り当てることができます。たとえば、1 から 5 へのパス (1 -> 2 -> 5) が最初のトラバーサルとして移動する場合、次のようになります...

id | node1  | node2  | count
------------------------------
1  |   1    |   2    |   1
2  |   1    |   3    |   0
3  |   1    |   4    |   0
4  |   2    |   1    |   0
5  |   2    |   3    |   0
6  |   2    |   5    |   1
7  |   3    |   1    |   0

この方法は、カウンターを重み係数として使用することで、ノード間の意味関係を識別するのに役立ちます。

この種のデータ構造では、各方向 (1 -> 5 および 5 -> 1) に進むためのメソッドが必要になることに注意してください。

于 2012-07-16T18:28:15.843 に答える
0

たぶん、NOSQLデータベースを探すことはあなたの問題を解決するためのより良い方法でしょう。具体的には、neo4jなどのグラフデータベースを使用して最初にSQLデータを表し、単にグラフをトラバースして目的の関係とグループを見つけます。

ユースケースでは、テーブルで複数の結合を使用してsqlを使用する場合よりもパフォーマンスが数倍速いため、グラフデータベースを使用する方が常に優れています。

于 2012-12-05T14:39:24.063 に答える
0

Powergagetsは、SQL データを使用してグラフやチャートを作成できます。

于 2012-04-13T19:34:55.923 に答える
0

グラフについて私が覚えていることから、ここでは Dijkstra-Prinn と Kruskal のアルゴリズムが役に立つかもしれません。どちらも検索アルゴリズムです (BFS なのか DFS なのか思い出せません... しばらく経ちました :p) グラフ全体を取得して最適なトラバーサル パスを見つけるのに役立ちます。

SQL クエリを取得することはできませんが、SQL クエリに適したロジックを取得するのに役立つ数学的な「飛び込み台」を提供します。

ハイドロパラダイスが彼のカウンター システムで述べたように、上記の手順を利用して開始点を取得し、カウンター システムを使用して再確認することができます。

また、ffriend が以前に述べたように、このデータを最適化目的で収集しているのか、他の目的で収集しているのかはわかりません。そのため、質問を再構成すると、より良いヘルプが得られると思います。

幸運を祈ります。

于 2012-07-23T17:57:32.613 に答える