11

我正在构建一个新应用程序,它将具有与 Facebook 非常相似的功能,虽然它显然不需要处理 400,000,000 亿用户之类的用户,但它仍将被大量用户群使用,并且他们中的大多数人会要求它运行得非常非常快。

我在 MySQL 方面有丰富的经验,但一个社交应用程序提供了 MySQL 不太适合的复杂性。我知道 Facebook、Twitter 等已经将他们的大量数据转移到 Cassandra,但我不确定它还能走多远。

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

有人可以就此向我提供建议吗?我希望我不是太笼统!

4

4 回答 4

5

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

我们知道至少在几年内我们不会获得这么多的记录,而且我们有使用 Postgres 的经验(而当时 MongoDB 还不是很成熟),所以我们选择了 Postgres。

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

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

于 2010-04-05T23:33:48.903 回答
5

例如,您会在 Cassandra 中存储用户数据(用户名、密码、地址等)吗?

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

我也读过很多,像 neo4j 这样的东西更适合表示社交应用程序使用的朋友关系,因为它是一个图形数据库。

我非常喜欢为正确的工作使用正确的工具。我没有使用过 neo4j,但我一直在使用 db4o(它是一个对象数据库)并且发现它非常有用。使用本机支持您需求的工具使开发变得更容易。由于您需要图表并且在 SQL 中使用图表很痛苦,我建议您看一看,并评估它是否符合您的特定需求。

只要选择是自然的,混合数据库对我来说听起来是个好主意(即,各个数据库对特定工作有帮助,图形数据库用于图形,表用于表,ACID 数据库用于需要事务安全的任何事物等。 ..)。

于 2010-04-05T23:54:55.253 回答
1

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

我想说的是,如果 Cassandra 对 Facebook 来说足够好,那么它可能对你的项目也足够好。尝试抽象持久性逻辑可能不会有什么坏处,这样您就有可能切换到其他东西,如果确实如此的话。

免责声明:我(还没有?)有任何使用 noSQL 数据库的经验:我所知道的来自阅读它。

于 2010-04-05T22:21:17.200 回答
0

Cassandra 提供了一个很好的分布式解决方案,对于类似 Facebook 的平台来说可能比 MySQL 更好(如果需要扩展的话)。但 Cassandra 不适合处理多对多关系挑战的数据关系。与 Cassandra 绑定的图形数据库将提供大容量需求以及非常快速的关系查询功能。我们正在研究结合这两种技术的东西,并且总是对您的平台将呈现的需求类型感兴趣。如果您对如何处理某些与数据相关的问题有任何疑问,我很想听听,也许我们可以帮助您解决。

于 2010-06-06T22:15:33.690 回答