私はvk.comのデートアプリを開発しています(ロシア語のfacebookです)ので、私はソーシャルグラフ(相互利益、友人、好きな音楽、映画などのプロフィールを維持する必要があります。 )。 「ユーザーCは2人のお友達と5人の相互利益を持ち、1人の友人と4人の相互利益を持っているため、ユーザーCに最も近いユーザーA」、「ユーザーCは...に近い」などと思われます。 この問題の解決策? 私はグラフの理論を数学から知っていますが、まだコンピュータサイエンスのグラフを使ったことはありません(私はウェブ開発者です)。この問題は、どのユーザーのグラフを生成してもNoSQLデータベース(mongoやredisのように)、それは悪い解決策ではありません(リアルタイムの変更なし、生成には長い時間がかかります)。 この問題についてどう思いますか?グラフを保つための良い解決策(データベース)
答えて
1つの選択肢はFlockDB(Neo4jは既に言及されています)です。問題のスペースが大規模な単純な照会であれば、これは適切かもしれません。 Neoのようなグラフウォーキングクエリはサポートしていませんが、Twitterでソーシャルグラフを保存するためにTwitterに使用されています。「Who does A follow」などのクエリをサポートしています。
Key-Valueベースのデータベースよりもさらに特殊化されたNoSQLソリューションがあります。 neo4jのようなグラフデータベースを見てください。グラフデータベースを使用すると、直感的な方法でグラフを簡単に保存および操作できます。多くのグラフベースのアルゴリズムは、(SQLと比較して)非常に高速に実行されます。
また、大規模なソーシャルネットワークでは、特にグラフ全体の分析に興味がある場合(データマイニングの場合は、単一ユーザーのリアルタイム計算を超えています)を見てください。私の知る限り、Facebookはウェブリクエストにはキャッシュの多いMySQLデータベースを使用し、Hadoop/HBaseとHiveはデータの重い計算に使用します。彼らのメッセージングプラットフォームに加えて、Facebookのほとんどのリアルタイム部分はNoSQLを必要としません。
正直言ってFacebookがメインデータグラフデータベースに保存します。私は彼らが友人のリストと興味のリストなどを保存していると思います。彼らの文書を見ると、少なくともそれがどのように整理されているかがわかります。 "私は映画が好きです"という情報が私のアカウントと興味のある "映画"に関連付けられていると、好きなものを探すのが簡単で、映画も好きです。
全体的な「親密度」を計算するには...少なくとも1人の共通の友人を持つ人にのみ必要な場合は、そのような人々をすべて親密度で直接評価すると、十分に速くなる可能性があります。さもなければ、私はより高い次元のおおよそのk-dツリー探索を見て、あなたの探索空間の次元にintestを作りたいと考えます。
- 1. は良い解決策
- 2. CakePHP1.3の非モデルリクエストのためのより良い解決策
- 3. 古いデータベースを保持しながら新しいデータベースを作成するための解決策
- 4. GitLab CI/CDの制限またはより良い解決策?
- 5. ファイルなし、プロジェクトなし、解決策がまだ解決策を保存したくない
- 6. フラッシュのビットマップを歪める解決策
- 7. 角2の回転数を止めるための解決策
- 8. PHP - このスクリプトは乱数の良い解決策ですか?
- 9. Firebaseはこのアプリの良い解決策ですか?
- 10. より良い正規表現解決策を探して
- 11. 良い解決策ですか?タブの表示/非表示
- 12. ASP.NETの良い解決策<-> PHPリモーティングですか?
- 13. 右側のDIV ...良い解決策は何ですか?
- 14. 文法問題を解決するための実用的な解決策
- 15. WebSocket/Socket.IOサーバーの良い解決策(Nginx、Nodeなどを試しました)
- 16. DOMイベントログには良い解決策がありますか?
- 17. AJAXコール、またはより良い解決策のためにSESSION_SAVE_ON_EVERY_REQUESTをバイパスします。
- 18. Node.jsユーザー側の場所を見つけるためのサーバー側の解決策
- 19. IOS TabBarItemにタップは、ケースのための解決策を見つけるのViewController
- 20. リフレッシュ後にカウントダウンを再開するための解決策
- 21. 重複するキーを挿入するための解決策
- 22. ファイルを検索するための解決策(ランプ内)
- 23. フォントダウンロードを無効にしてIEにアイコンを提供するための良い解決策は何ですか?
- 24. Sparkプログラムのバージョン競合のための最善の解決策
- 25. ウェブアプリケーションの自動テストのための解決策が必要
- 26. フォームのための大量のテキストフィールド、解決策が必要
- 27. 軽量一方向データバインディングのための最善の解決策
- 28. 複数の背景のための解決策?
- 29. 識別子をメッセージに関連付けるための良い解決策は何ですか?
- 30. 変数を同期させるための良い解決策 - Terraform、Chef、Jenkins、Octopus Deploy
私はそれらについてよく分かりませんが、FacebookのデータにアクセスするためにはAPIを使用しています。だからcheckint VKontakteのAPIを試してください:http://vk.com/developers.php –
ありがとうございますが、私の質問はAPIについてではなく、それはどのようにどのようなデータベースにグラフのデータ構造を維持するかについてです。 –