関係情報を MySQL テーブル (contact_id、other_contact_id、strength、recorded_at) に保存するアプリケーションがあります。連絡先の関係が誰であるかを示したり、2 つの連絡先の相互連絡先のリストを生成したりするだけでよい場合は、これで問題ありません。
しかし今、次のような統計を生成する必要があります:「2011 年 1 月の強度 3 以上の双方向接続の総数は?」または (各連絡先がグループの一部であると仮定して)「どのグループが接続数が最も多いか」他団体などへ
これらの統計情報を生成するための SQL が非常に速く扱いにくくなることがすぐにわかりました。
そこで、特定の日付に対してメモリ内にグラフを生成するスクリプトを作成しました。その後、そのグラフに対して必要な統計を実行できました。グラフ部分の生成を除いて、はるかに理解しやすく、一般的にパフォーマンスも大幅に向上します。
次に考えたのは、これらのグラフをキャッシュして、新しい統計を実行する必要があるときはいつでも呼び出すことができるようにすることでした (または、後でグラフを生成します。たとえば、今日のグラフの場合、昨日のグラフを取得し、昨日以降に発生した変更を適用します)。グラフが 1 MB を超えるまでうまく機能する memcached を試しました。
そこで、Neo4J のようなグラフ データベースを使用することを考えています。
唯一の問題は、グラフが 1 つだけではないことです。または私はそうしますが、それは時間の経過とともに変化するものであり、異なる参照時間でクエリできる必要があります。
私も:
- 複数のグラフをNeo4Jに保存し、それらを個別に取得/操作しますか? 次に、日付ごとに個別のソーシャル グラフを作成して保存します。
また
- 有効な to および from タイムスタンプを各エッジに追加し、グラフを適切にフィルター処理します。したがって、「5 月 1 日」のグラフが必要な場合は、「5 月 1 日」より前に作成された 2 つのノード間の最新のエッジのみをたどります (すべてのエッジが5 月 1 日以降に作成されたノードは接続されません)。
私はグラフデータベースにかなり慣れていないので、ヘルプ/ポインター/ヒントをいただければ幸いです。