私は(ROR 3を使用して)ソーシャルネットワークのプロトタイプを作成している最中で、Neo4jをチェックすることにしました。見た目は素晴らしいですが、デザインの観点からスケーリングとパフォーマンスについて質問があります。
私はEtsyがどのようにまとめてアクティビティフィードを作成するかを調査し(http://www.slideshare.net/danmckinley/etsy-activity-feeds-architectureを参照)、メッセージングキューがアクティビティ(写真の共有やこのアクティビティを500人ほどの友達がニュースフィードで利用できるようにします)。また、ニュースフィードをキャッシュする方法(memcache)と、Redisに対してルックアップを実行する方法も理解しています。
全体として、適切にスケーリングする高性能アクティビティフィード(および一般的なソーシャルネットワーク)を作成するための一般的なパターンは、シャーディング、水平スケーリング、memcache、rabbitmq、redis、Mongodb、innodb(mysql)などを使用することです-すべて大量のディスクの読み取りなどを補うために。 しかし、これは設計の観点からはかなりのオーバーヘッドです。
Neo4Jは、少なくとも早い段階で、そのような配置の必要性を排除できますか?つまり、ファンアウトやメッセージング用のメッセージキューを設定する必要がなく、ユーザーが実行するすべてのアクションに対して「アクティビティ」キャッシュを設定する必要がなく、注文と注文の両方を処理するために使用できるほど高速です。メッセージを保存しますか?Facebookのようなニュースフィードはそのようなシステムで作成できますか、それとも高性能アクティビティフィードは基本的なステータスの更新に限定されますか?
これらの質問が広すぎる場合は、別の方法で質問させてください。neo4jを使用してFacebookまたはTwitterを作成し、更新をファンアウトするためのメッセージキューの必要性を排除できますか(代わりに、更新のライブストリームをその場で取得したい)。ニュースフィードのmemcache、およびキャッシュされたアクティビティフィードオブジェクト?それとも、毎秒数百のリクエストを処理するために、同じこと、またはそれ以上のことをしていることに気付くでしょうか。
なぜなら、Etsy、Twitter、Facebookが高いパフォーマンスを維持するために採用しているトリックを使用せずに、実際に大量を処理できるのであれば、Neo4Jを使用することでかなりの時間を節約できるからです。