用于社交网络应用的Cassandra而不是MySQL

时间:2010-04-05 22:04:57

标签: mysql social-networking cassandra neo4j

我正在构建一个新的应用程序,它将具有与Facebook非常相似的功能,虽然显然它不需要处理400,000,000,000用户的喜欢它仍然会被大量用户群和大部分用户使用他们会要求它非常快地运行。

我对MySQL有丰富的经验,但社交应用程序提供了MySQL不太适合的复杂性。我知道Facebook,Twitter等已经向Cassandra转移了很多他们的数据,但我不确定它会走多远。

例如,你会在Cassandra中存储用户数据 - 用户名,密码,地址等内容吗?你会在Cassandra中存储电子邮件,评论,状态更新等吗?我还读过很多像neo4j这样的东西更能代表社交应用程序使用的朋友关系,因为它是一个图形数据库。我只是刚开始使用NoSQL路线,所以非常感谢任何指导。

有人可以就此提出建议吗?我希望我不是太一般!

4 个答案:

答案 0 :(得分:5)

  

例如,你会在Cassandra中存储用户数据 - 用户名,密码,地址等内容吗?

不,因为它不保证一致性。 Cassandra 最终是一致的。当然,某个用户帐户的数据不应该是并发的,但我不想赌它。您可能不需要在全文搜索,消息收件箱等方面保持一致性,但您希望与安全相关的任何内容保持一致。

  

我还读到很多像neo4j这样的东西更能代表社交应用所使用的朋友关系,因为它是一个图形数据库。

我是正确工作的合适工具的忠实粉丝。我没有使用neo4j,但我一直在使用db4o(这是一个对象数据库),并发现它非常有用。它使开发更容易使用本机支持您的需求的工具。既然您需要图表并在SQL中使用图表是一件痛苦的事情,我建议您先看一下,然后评估它是否符合您的特定需求。

只要选择是自然的(即,相应的数据库对特定作业有用,图表的图形数据库,表格的表格,ACID数据库用于需要交易安全的任何事物),混合数据库对我来说听起来是个好主意等等......)

答案 1 :(得分:4)

我建议用MySQL和Cassandra做一些测试。当我们在我的一个工作中不得不在PostgreSQL和MongoDB之间做出选择时,我们比较了两者中数百万条记录的查询时间,并发现有大约1000万条记录,Postgres将为我们提供足够的响应时间。

我们知道至少在几年内我们不会达到那么多的记录,而且我们有Postgres的经验(当时MongoDB还不是很成熟),所以我们选择了Postgres。 / p>

我的观点是你可以查看MySQL基准测试,自己做一些性能测试,估算数据集的大小以及它将如何增长,并以这种方式作出明智的决定。

至于混合关系数据库和非关系数据库,这也是我们考虑过的问题,但我认为这样做太麻烦了,因为这意味着要维护两种软件,并编写相当多的胶水代码从两者获取数据。我认为Cassandra完全有能力存储你的所有数据。

答案 2 :(得分:1)

Facebook没有移动到Cassandra,他们创建了它。 :)据我所知,noSQL DBMS不需要甚至提及(感谢mnemosyn进行更正,Facebook使用Oracle和Cassandra)与关系数据库并行运行。 This是一个相反的例子(将用户信息存储在noSQL DB中)。

我想说如果Cassandra对Facebook来说足够好,它可能对你的项目来说已经足够了。尝试抽象持久性逻辑可能没有什么坏处,这样你就有可能切换到别的东西,如果绝对的话。

免责声明:我还没有(还有?)对没有SQL数据库的经验:我所知道的就是阅读它。

答案 3 :(得分:0)

Cassandra提供了一个很好的分布式解决方案,对于像MySQL这样的平台而言可能比MySQL更好(如果它需要扩展)。但是Cassandra不适合数据关系,在这种关系中你会遇到多对多的关系挑战。与Cassandra绑定的图形数据库将提供批量卷需求,以及非常快速的关系查询功能。 我们正致力于将这两种技术结合起来,并始终对您的平台所提出的要求类型感兴趣。如果您对如何处理某些数据相关问题有任何疑问,我很乐意听到它们,也许我们可以帮忙解决这个问题。