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

How does Cassandra compare to MySQL (or any other RDBMS) in a single node setup?

在研究了关系数据库、文档存储、图形数据库和面向列的数据库之后,我得出结论,像 Cassandra 这样的东西最适合我的需要。特别是,动态添加列的能力并且不需要严格的架构对我来说很划算。这似乎很好地弥合了相当新颖的图形数据库和经过时间考验的 rdbms 之间的差距。

但我担心如何在单个节点上 运行ning 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 在功能和性能方面如何在单节点设置上进行比较?对于处于我这种情况的人,您有什么建议 - 从带有 plan/intent 的简单 RDBMS 开始,稍后再切换到 Cassandra?或者从 Cassandra 开始?

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

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

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

还有很多其他差​​异,但这些是主要差异。两者都不 优于另一种,但每一种都可能更适合某些应用程序。因此,这实际上取决于您的用例的要求,哪一个更适合。