代码之家  ›  专栏  ›  技术社区  ›  ahron

在单节点设置中,Cassandra与MySQL(或任何其他RDBMS)相比如何?

  •  1
  • ahron  · 技术社区  · 9 年前

    在研究了关系数据库、文档存储、图形数据库和面向列的数据库之后,我得出结论,像Cassandra这样的东西最适合我的需求。特别是,能够动态添加列,而且不需要有严格的模式,这对我来说是一笔交易。这似乎很好地弥补了相当新颖的图形数据库和经过时间测试的rdbms之间的差距。

    但我担心如何在单个节点上运行Cassandra。和许多其他人一样,我只能从少量数据开始,因此从多个节点开始是不实际的。基于另一个出色的SO问题: Why don't you start off with a "single & small" Cassandra server as you usually do it with MySQL? 我得出的结论是,Cassandra确实可以作为单个节点运行,只要用户愿意放弃多节点设置带来的可用性等好处。

    在RDBMS中似乎也有实现字段动态添加的方法,例如在SO上讨论的: How to design a database for User Defined Fields? 在某种程度上,这将模仿无计划状态。

    所以我现在想了解Cassandra和MySQL在功能和性能方面如何比较,在单个节点设置上?在我的情况下,你会给某人什么建议?从一个简单的RDBMS开始,计划/打算稍后切换到Cassandra?还是从卡桑德拉开始?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Jim Meyer    9 年前

    在Cassandra的单节点设置中,Cassandra所具有的许多优点都会丢失,所以这样做的主要原因是如果您打算将来扩展到多个节点。在大多数应用程序中,当使用单个节点时,性能会倾向于RDBMS,因为RDBMS是为该环境设计的,并且可以假设所有数据都是本地的。

    Cassandra的优势在于可扩展性和可用性。您可以添加节点以增加容量,拥有多个节点意味着您可以处理硬件故障,而不会停机。这些优势是以更困难的模式设计为代价的,因为访问主要基于一致的哈希。这也意味着您没有完整的SQL可用,并且通常必须依赖非规范化技术来支持对数据的快速访问。Cassandra对于ACID事务也很弱,因为在多个节点上协调原子操作本身就很困难。

    相比之下,RDBMS是一种更成熟的技术。ACID事务没有问题。模式设计要简单得多,因为您可以向任何列添加有效的索引以优化查询,并且可以使用联接,从而可以在很大程度上消除冗余数据。通过消除冗余数据,可以更容易地保持数据的一致性,因为当某人更改地址时,不需要更新多个数据副本。但是,存储所有数据的单个计算机可能会耗尽空间。如果发生磁盘崩溃,您将需要停机并需要备份来恢复数据,而Cassandra通常可以轻松修复不同步节点上的数据。除了购买一台更快的机器之外,还没有简单的方法来扩展RDBMS以处理更高的事务速率。

    还有很多其他的区别,但这些是主要的区别。两者都不是 较好的 但是每一种可能更适合于某些应用。因此,这实际上取决于用例的需求,哪一个更适合。