2012-04-01 21 views
2

私はvk.comのデートアプリを開発しています(ロシア語のfacebookです)ので、私はソーシャルグラフ(相互利益、友人、好きな音楽、映画などのプロフィールを維持する必要があります。 )。 「ユーザーCは2人のお友達と5人の相互利益を持ち、1人の友人と4人の相互利益を持っているため、ユーザーCに最も近いユーザーA」、「ユーザーCは...に近い」などと思われます。 この問題の解決策? 私はグラフの理論を数学から知っていますが、まだコンピュータサイエンスのグラフを使ったことはありません(私はウェブ開発者です)。この問題は、どのユーザーのグラフを生成してもNoSQLデータベース(mongoやredisのように)、それは悪い解決策ではありません(リアルタイムの変更なし、生成には長い時間がかかります)。 この問題についてどう思いますか?グラフを保つための良い解決策(データベース)

+0

私はそれらについてよく分かりませんが、FacebookのデータにアクセスするためにはAPIを使用しています。だからcheckint VKontakteのAPIを試してください:http://vk.com/developers.php –

+0

ありがとうございますが、私の質問はAPIについてではなく、それはどのようにどのようなデータベースにグラフのデータ構造を維持するかについてです。 –

答えて

2

1つの選択肢はFlockDB(Neo4jは既に言及されています)です。問題のスペースが大規模な単純な照会であれば、これは適切かもしれません。 Neoのようなグラフウォーキングクエリはサポートしていませんが、Twitterでソーシャルグラフを保存するためにTwitterに使用されています。「Who does A follow」などのクエリをサポートしています。

2

Key-Valueベースのデータベースよりもさらに特殊化されたNoSQLソリューションがあります。 neo4jのようなグラフデータベースを見てください。グラフデータベースを使用すると、直感的な方法でグラフを簡単に保存および操作できます。多くのグラフベースのアルゴリズムは、(SQLと比較して)非常に高速に実行されます。

また、大規模なソーシャルネットワークでは、特にグラフ全体の分析に興味がある場合(データマイニングの場合は、単一ユーザーのリアルタイム計算を超えています)を見てください。私の知る限り、Facebookはウェブリクエストにはキャッシュの多いMySQLデータベースを使用し、Hadoop/HBaseとHiveはデータの重い計算に使用します。彼らのメッセージングプラットフォームに加えて、Facebookのほとんどのリアルタイム部分はNoSQLを必要としません。

1

正直言ってFacebookがメインデータグラフデータベースに保存します。私は彼らが友人のリストと興味のリストなどを保存していると思います。彼らの文書を見ると、少なくともそれがどのように整理されているかがわかります。 "私は映画が好きです"という情報が私のアカウントと興味のある "映画"に関連付けられていると、好きなものを探すのが簡単で、映画も好きです。

全体的な「親密度」を計算するには...少なくとも1人の共通の友人を持つ人にのみ必要な場合は、そのような人々をすべて親密度で直接評価すると、十分に速くなる可能性があります。さもなければ、私はより高い次元のおおよそのk-dツリー探索を見て、あなたの探索空間の次元にintestを作りたいと考えます。

関連する問題