为什么选择使用Cassandra而不是MySQL作为NoSQL数据库?

14

我在处理海量的数据库(数百GB),目前使用MySQL基本上能够满足我的需求。但我犹豫是否要尝试Cassandra。

想要了解关于这种NoSQL数据库管理系统的所有内容,它们是否比MySQL更快?

有几个要点:

  • 行中列数的变化 在MySQL中,它们必须事先定义好。这些列在表的结构中设置。 而在NoSQL中,它们可以是多变的。 固定结构下真正有性能差异吗?为什么?

  • 去除关系对性能有益。 好的,但我不一定要创建关系表在MySQL中。 我使用聚合表,即只包含从其他表派生的数据的表, 以避免过于昂贵的连接。 如果我在MySQL中采用这种模型,那么性能水平会有何不同? 例如,作者在http://www.rackspacecloud.com/blog/2010/05/12/cassandra-by-example/中多次插入跟随者在消息USERLINE推送中。 我也可以在MySQL中做到这一点。

  • 可扩展性,可扩展性,可扩展性......我喜欢这个,Cassandra能否让我在不同的服务器上存储数据(无需SAN)? 我这里不是在谈论复制,而是一个单独的NoSQL服务器跨越多个物理服务器。

  • 即时计算。MySQL提供了像SUM、AVG等非常有用的函数,可以避免我在其他表中重新聚合我的数据。我没有看到Cassandra的相应功能?

  • 索引怎么样。在MySQL中,我对多个字段建立索引。例如,我的表有多个列的主键,并且我根据功能选择它们。Cassandra如何编写呢?为每一行连接成一个单一的标识符?我想我还没有完全掌握索引的管理。它们是在集成或上游重新计算的吗?

  • 异步请求。对我来说似乎是一个错误的参数,Mysql可以使用INSERT / UPDATE LOW_PRIORITY完成。

  • 我想我误解了这个问题。感谢你给我启示。

    3个回答

    23

    我真的不明白为什么会有人将像Cassandra和MySQL这样的数据提供者进行比较——这就像是在比较苹果和橙子。

    是的,NoSQL解决方案在某些情况下可以比SQL提供更好的性能。但不要忘记它们提供速度的原因——它们放弃了SQL中常常被认为理所当然的几项检查。例如,在NoSQL系统中,您将看不到事务,也不会拥有类似于SQL系统作为一部分提供的连接和数据聚合功能。您对数据一致性的保证非常少。

    对于99%的应用程序来说,这根本不值得时间和精力。如果你像Facebook或Twitter一样拥有大量结构化数据,你并不在乎实际上在数据处理过程中失去一些数据,或者在插入数据后可用性方面存在延迟,那么NoSQL就可以胜任。然而,对于绝大多数应用程序来说,你仍然应该坚持使用SQL。

    至于可扩展性,如果像Stack Overflow或Ebay这样的庞大网站可以在SQL之上运行,我不明白为什么你的应用程序不能在SQL之上运行。


    我不明白为什么在数据结构相等的情况下,性能会有如此大的差异,因为我没有看到MySQL无法与Cassandra进行比较(否则就是非结构化数据)。实际上,我正在运行SAS HD 15k转/分,并且已经达到了一个服务器上可用空间的极限。所以我可以选择创建一个SAN(非常昂贵的解决方案),或者转移到一个存储可扩展的DBMS(如果它被优化了,那么它就是最快的),或者再次使用软件解决方案来定位包含我的目标数据的服务器(但需要很长时间来开发)。 - Xorax
    2
    如果你看到了显著的性能差异,那么数据结构很可能并不相等。你不容易击败大多数SQL引擎。如果SQL对于你的应用程序太慢,我怀疑你需要在正确的位置添加索引。要么这样,要么你需要稍微去规范化你的数据。 - Billy ONeal
    1
    @BillyONeal 您提出了非常有力的观点,当没有转换的必要时,为什么需要从MySQL转移到其他DBMS,但有时仅依赖于一个DBMS可能不如所需那样丰富多果。Twitter目前在其所有用户数据需求方面使用MySQL,并使用Cassandra进行分析工具。 - FaizanHussainRabbani

    4

    当然可以通过减少很多开销来调整MySQL以提高性能。NoSQL通过在第一次启用时不具备启用它们的功能来消除开销。

    NoSQL的应用与传统的SQL结构非常不同。 SQL默认情况下针对OLTP性能进行了调整,具有规范化的模式结构和具有联接查询等功能。另一方面,NoSQL是一个快速读/写结构。一个非常好的例子就是Twitter / Facebook上的活动源(我不知道Twitter / FB是否使用NoSQL,我只是举个例子)。


    Cassandra最初是由Facebook开发的,所以他们确实使用NoSql。 - Arslan Mehboob

    0

    playOrm正在帮助越来越多的OLTP系统掌握noSQL系统。它非常类似于SQL,但也有所不同。您需要对预计增长到非常大的表进行分区,并可以查询这些分区。您甚至可以在分区上执行联接操作。您将分区大小保持与典型RDBMS表相同的大小,并且可以根据您的需求进行扩展。

    因此,对于您的索引和计算问题,我认为越来越多的工具将建立在noSQL系统上。无论如何,这可能是解决您问题的一种方法。


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