我正准备对社交网络进行原型(prototype)设计(使用ROR 3),并决定查看Neo4j,尽管它看起来不错,但我对设计的可扩展性和性能存在疑问。

我研究了Etsy的组合方式和 Activity 供稿(请参阅http://www.slideshare.net/danmckinley/etsy-activity-feeds-architecture),并了解消息队列如何散布 Activity (如共享图片并在您的新闻供稿中为您的500个左右的 friend 提供此 Activity )。我也了解如何缓存新闻摘要(memcache)以及如何针对Redis执行查找。

总而言之,似乎要制作一个可以很好地进行扩展的高性能 Activity 供稿(以及一般来说是社交网络),常见的模式是使用分片,水平扩展,memcache,rabbitmq,redis,Mongodb,innodb(mysql)等-全部尝试补偿大容量,磁盘读取等。但这在设计方面是相当大的开销。

Neo4J是否可以至少在早期消除对这样的安排的需要?我的意思是说它是如此之快以至于我不需要为扇出和消息传递设置消息队列,也不需要为用户执行的每个 Action 设置“ Activity ”缓存,并且可以使用它来处理排序和存储消息?可以使用这样的系统创建像Facebook这样的新闻提要,还是将高性能 Activity 提要限制为基本状态更新?

如果这些问题过于笼统,请让我以另一种方式提出:我可以使用neo4j编写facebook或twitter并消除消息队列以散布更新的需要(相反,我想即时获得实时更新),用于新闻提要的memcache,以及缓存的 Activity 提要对象?还是我会发现自己做同样的事情甚至更多,每秒可以处理数百个请求?

我问这是因为如果Neo4J确实可以处理大量数据而不必使用Etsy,Twitter和Facebook用来维持高性能的技巧,那么它将节省大量时间使用Neo4J。

最佳答案

是。实际上,Rene Pickhardt已经做到了。

http://www.rene-pickhardt.de/graphity-an-efficient-graph-model-for-retrieving-the-top-k-news-feeds-for-users-in-social-networks/

关于ruby-on-rails - neo4j vs “traditional” RDBMS和Memcached/消息传递/Redis解决方案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15490477/

10-16 03:46