MySql vs NoSql - 社交网络评论和通知数据结构与实现

4

我确实很难弄清楚一个社交网络网站(以Facebook为例)如何管理其用户的评论和通知,特别是它们如何存储评论数据?以及通知是如何存储并发送给所有用户的。例如,当我的朋友在我的状态下发表评论时,所有喜欢我状态的人,包括我自己,都会收到通知。此外,每个用户都有自己的已读/未读功能,因此我想每个用户都有自己的通知参考。但是这将产生大量冗余的通知信息。如果我们使用单独的表/集合来存储带有实际通知引用的这些内容,那么这将创建实时可扩展性问题。那么你如何决定权衡的方式。当我思考所有这些事情时,我的脑子会瘫痪。网络上没有太多可用的帮助。

现在每个通知应该如何发送到所有应该接收到的用户..数据结构又该是什么样子的呢。

我看了很多实现建议使用MySql。我的理解是,这种数据类型(大小)更适合使用NoSql进行可伸缩性目的。那么MySql在这种情况下怎样运作良好,为什么像Mongo这样的NoSql没有被建议用于这样的实现,尽管这些数据是为高度可扩展而设计的。

好吧,我知道有很多问题。但我不是在寻找完整的答案,对特定事物的见解也对我构建自己的应用程序非常有帮助。


Facebook不是开源的,因此您只能猜测它们内部数据库架构的样子。此外,知道它如何工作并没有真正帮助,因为1. 您不知道它们的效率和问题所在,2. 即使您假设它完美运行,也可能适用于他们特殊需求的功能对您并不适用。 - Philipp
这里的Facebook只是一个参考,我甚至编辑了我的问题,使用社交网络代替Facebook。我知道实际的Facebook实现是不可能找到的...但正如我所说,我不是在寻找完整的解决方案,而只是对架构和设计,甚至是个别组件的见解。 - Sambhav Sharma
我的建议是,两者都可以,nosql与rdbms不会成为问题。规划您的数据结构,建模关系,然后从那里开始工作。尝试制作原型,然后回来解决难题。 - scalabilitysolved
1个回答

15
这个问题非常广泛,但我会尽力回答。
他们实际上如何存储评论数据?还有通知如何存储并发送给所有用户?
针对后端设计没有"灵丹妙药",特别是涉及到数据库的时候。SQL数据库通常在大多数数据库功能上表现得很好,这是合理的;它是一种非常成熟的技术,经历了时间的考验。大多数NOSQL解决方案都是专门针对特定用途的。例如:如果你正在记录大量信息,你可能需要看看Cassandra。如果你正在处理大量关系型数据,你需要使用像Neo4j(或PostgreSQL/MySQL RMDBS)这样的东西。如果你正在处理大量实时数据,你可能需要看看Redis。
关于NOSQL vs SQL的问题是愚蠢的,因为:
NOSQL是一个不好的术语。它并不意味着"No SQL"。它的意思是"不仅仅是SQL"。不幸的是,这个术语包含了甚至最极端的数据库。
只有你知道你的应用程序的全部功能。即使我知道你想要实现的基础知识,我仍然不能给你一个明确的答案。也没有其他人可以。它高度主观,并且,只有你精确地知道你的应用程序应该做什么。
最大的原因:现在是2014年。为什么只有一个数据库?十年前,“数据库X vs数据库Y”会是一个实际的问题。现在,你可以在几分钟内配置许多应用程序框架以可靠地使用多个数据库。寓意是:使用每个数据库的专门用途。有关多语言持久性的更多信息请点击这里

就Facebook而言:只要进行五分钟的谷歌搜索,就可以了解他们过去使用的后端技术,并且研究一些他们当前的后端解决方案并不难。你不是Facebook,现在不需要为十亿用户做准备。从简单的、经过验证的技术开始。这将让您自然地扩展应用程序。当这些技术开始成为瓶颈时,再考虑可扩展性。

我希望这能对您开始编程之旅有所帮助,但如果您在编写代码时遇到困难,请将Stack Overflow作为最后的求助手段,而非首选。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接