【发布时间】:2014-06-19 23:47:53
【问题描述】:
我真的发现很难弄清楚社交网站(Facebook 是一个参考)如何为用户管理他们的 cmets 和通知。
他们将如何实际存储 cmets 数据?以及如何存储通知并将其发送给所有用户。一个示例场景是,朋友对我的状态进行了评论,并且喜欢我状态的每个人(包括我)都会收到通知。此外,每个用户都实现了自己的已读/未读功能,所以我想每个用户都有一个通知参考。但是这样就会有很多冗余的通知信息。如果我们使用单独的表/集合来存储这些并参考实际通知,那么这将产生实时可伸缩性问题。那么你将如何决定以哪种方式进行权衡。当我想到这一切时,我的大脑崩溃了。在网络上没有太多帮助的情况下,要计算的东西太多了。
现在将如何将每个通知发送给应该接收该通知的所有用户......以及数据结构的外观。
我阅读了很多建议使用 MySql 的实现。我的理解是那种数据(大小),也就是为了可扩展性目的使用 NoSql 会更好。 那么 MySql 如何在此类用例中运行良好,以及为什么不建议在任何地方使用像 Mongo 这样的 NoSql 来实现此类实现,而这些实现是高度可扩展的。
嗯,我知道很多问题。但我不是在这里寻找完整的答案,对特定事物的见解也会对我构建自己的应用程序有很大帮助。
【问题讨论】:
-
Facebook 不是开源的,因此您只能猜测其内部数据库架构的外观。此外,了解它的工作原理并没有真正的帮助,因为 1. 你不知道它对他们的效果如何以及他们有什么问题; 2. 即使你认为它工作得很好,但对他们的特殊要求有用的东西可能不会也为你工作。
-
facebook 在这里只是一个参考,我什至编辑了我的问题以使用社交网络而不是 facebook。我知道实际的 facebook 实现是不可能找到的。但正如我所说,我不是在寻找一个完整的解决方案,而只是对架构和设计的见解,甚至是单个组件。
-
我的建议是,无论哪种方式都可以,nosql 与 rdbms 都不会成为问题。规划您的数据结构,建模关系并从那里开始工作。尝试原型,然后带着绊脚石回来。
标签: mysql database-design social-networking scalability nosql