回答
许多社交网站如Twitter的不除了Message Queue应用程序外,完全可以使用RDBMS。他们中的很多人开始使用像RabbitMQ这样的应用程序。他们中的一些人足够大,他们必须大量定制或建立自己的。 Twitter正在进行第二次这样做。
消息队列应用程序通过为一个或多个其他服务保存来自一个服务的消息来工作。比如说服务Frank将消息发布到队列foo。 Joe和Jill订阅了Franks foo队列。应用程序将跟踪Joe或Jill是否收到消息,并且一旦队列中的每个订户都收到它丢弃的消息。弗兰克发出消息并忘记它。 Joe和Jill要求foo发送消息并获取他们还没有收到的消息。乔和吉尔做了他们需要处理的信息。也许保持它可能不是。
消息队列应用保证大家谁应该能得到消息,当他们要求他们将得到的消息。发布者可以发送消息确信订户可以最终获得它们。这具有完全异步的优点,并且不需要昂贵的连接。
编辑:我还要提到的是,通常这些高规模的存储都是非常规范化的。所以乔和吉尔可能会存储完全相同的消息的副本。这被认为是可行的,因为它可以帮助应用扩展到数十亿用户。
其他阅读:
对于小规模上做users.friends和users.events和查询高速缓存的加入可能是罚款,但不会很快作为朋友和事件增长放缓。您还可以尝试基于事件的模型,其中每次用户创建一个事件时,都会在连接表中创建一个条目(可能称为“friends_events”)。因此,无论何时用户想要查看他们的朋友创建的事件,他们都可以简单地在他们自己的id和friends_events表之间进行连接并查找。通过这种方式,您可以避免与朋友一起抓住所有用户,然后通过事件表加入他们的朋友。
社交网站的支柱数据结构是graph。在脸书上,图表是无向的(当你是某人的朋友时,他们是你的朋友)。在Twitter上,图表是直接的(你跟随某人,但他们不一定跟随你)。
两个流行的方式来表示图是adjacency lists和adjacency matrices。
邻接列表只是图中边缘的列表。考虑具有整数用户标识的用户。
User1, User2
1 2
1 3
2 3
这些记录的无向的解释是,用户1是朋友,用户2和3的用户2也与朋友用户3
在数据库表中代表这是微不足道的。它是我们熟悉的多对多关系连接表。 SQL查询来查找特定用户的朋友很容易编写。
既然您了解特定用户的朋友,您只需将这些结果加入更新表。该表包含用户ID索引的所有用户更新。
只要所有这些表都正确的索引,你有一个非常简单的时间设计高效的查询来回答你感兴趣的问题。
特拉维斯写了这个伟大的职位,
- 1. 社交网站的朋友桌
- 2. 社交网站的朋友桌
- 3. 如何在社交网站2.1.3中从社交网站注销?
- 4. 设计一个社交网站
- 5. 如何维护社交网站?
- 6. 如何使网站浏览器友好?
- 7. 社交网站网站按钮库
- 8. 社交网站发展
- 9. 安全的社交网站
- 10. Apache mpm为社交网站
- 11. 网站文字不友好
- 12. 社交网站的Joomla VS笨社交网络
- 13. 如何让这个例子让我的网站更友好?
- 14. 社交网络数据库设计 - 朋友/座位关系
- 15. 使用ASP.NET的社交网络网站
- 16. 社交网络好友列表,朋友圈子,帖子分享的数据库设计
- 17. 如何将我网站的网址更改为友好的网址?
- 18. joomla网站的友好网址
- 19. 轻松创建社交网站的好框架
- 20. RewriteRule更友好的网址
- 21. 如何在facebook,google等社交网站上分享网址?
- 22. 如何将社交网络评论应用嵌入网站
- 23. Memcached的社交网络站点(指正)
- 24. 用PHP创建社交网站
- 25. 社交网站的报表/ BI框架
- 26. 社交网站数据库开发
- 27. 社交网站的博客图片
- 28. 分享 - 网站中的社交按钮
- 29. 社交网站的数据存储
- 30. 社交网站的服务器要求
+1提的非正规化,这是不是对旧的SQL工作很明显ld在那里3NF长期以来一直是引导性的明星。 (http://en.wikipedia.org/wiki/Third_normal_form) – Crypth 2013-09-26 07:21:35