我正在构建一个新的应用程序,它将具有与Facebook非常相似的功能,虽然显然它不需要处理400,000,000,000用户,它仍然会被大量用户群使用,而且大多数都需要它运行得非常快。
我有丰富的MySQL经验,但社交应用程序提供了MySQL不太适合的复杂性。我知道Facebook,Twitter等已经向Cassandra转移了很多他们的数据,但我不确定它会走多远。
例如,你会在Cassandra中存储用户数据 - 用户名,密码,地址等内容吗?你会在Cassandra中存储电子邮件,评论,状态更新等吗?我还读过很多像neo4j这样的东西更能代表社交应用程序使用的朋友关系,因为它是一个图形数据库。我只是刚开始使用NoSQL路线,所以非常感谢任何指导。
有人能告诉我这个吗?我希望我不是太一般!
例如,你会在Cassandra中存储用户数据 - 用户名,密码,地址等内容吗?
不,因为它不保证一致性。卡桑德拉是 最终一致。当然,某个用户帐户的数据不应该是并发的,但我不想赌它。您可能不需要在全文搜索,消息收件箱等方面保持一致性,但您希望与安全相关的任何内容保持一致。
我还读过很多像neo4j这样的东西更能代表社交应用程序使用的朋友关系,因为它是一个图形数据库。
我是正确工作的合适工具的忠实粉丝。我没有使用neo4j,但我一直在使用db4o(这是一个对象数据库),并发现它非常有用。它使开发更容易使用本机支持您的需求的工具。既然你需要图表并在SQL中使用图表是一件痛苦的事情,我建议你先看一下,然后评估它是否符合你的特定需求。
只要选择是自然的(即各个数据库对特定作业有用,图形图表数据库,表格表格,ACID数据库用于任何需要交易安全的数据库等),混合数据库对我来说听起来都是个好主意。 ..)。
我建议用MySQL和Cassandra做一些测试。当我们在我的一个工作中不得不在PostgreSQL和MongoDB之间做出选择时,我们比较了两者中数百万条记录的查询时间,并发现有大约1000万条记录,Postgres会为我们提供足够的响应时间。
我们知道至少在几年内我们不会达到那么多的记录,而且我们有Postgres的经验(当时MongoDB还不是很成熟),所以我们选择了Postgres。
我的观点是,您可以查看MySQL基准测试,自己进行一些性能测试,估算数据集的大小以及它将如何增长,并以这种方式做出明智的决策。
至于混合关系数据库和非关系数据库,这也是我们考虑过的问题,但我认为这样做太麻烦了,因为这意味着要维护两种软件,并编写相当多的胶水代码来获得来自两者的数据。我认为Cassandra完全有能力存储您的所有数据。
Facebook没有 移动 到卡桑德拉,他们创造了它。 :)据我所知,noSQL DBMS不需要 甚至提到 (感谢mnemosyn的纠正,Facebook使用Oracle和Cassandra)与关系数据库并行运行。 这个 是一个相反的例子(将用户信息存储在noSQL DB中)。
我想说,如果Cassandra对Facebook来说足够好,它对你的项目来说可能已经足够了。尝试抽象持久性逻辑可能没有什么坏处,这样你就有可能切换到别的东西,如果绝对的话。
免责声明:我还没有(还没有)拥有无数据库数据库的经验:我所知道的就是阅读它。
Cassandra提供了一个很好的分布式解决方案,对于类似Facebook的平台而言可能比MySQL更好(如果它需要扩展)。但是,Cassandra不适合您需要多对多关系挑战的数据关系。与Cassandra绑定的图形数据库将提供批量卷需求,以及非常快速的关系查询功能。
我们正致力于结合这两种技术,并始终对您的平台所提出的要求类型感兴趣。如果您对如何处理我喜欢听到的某些数据相关问题有任何疑问,也许我们可以帮助解决这个问题。