1

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

但我担心如何在单个节点上运行 Cassandra。像许多其他人一样,我只能从少量数据开始,所以从多个节点开始是不切实际的。基于另一个出色的 SO 问题:您为什么不像通常使用 MySQL 那样从“单一和小型”Cassandra 服务器开始?我的结论是,Cassandra 确实可以作为单节点运行,只要愿意放弃多节点设置带来的可用性等好处。

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

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

4

1 回答 1

3

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

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

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

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

于 2015-07-29T12:48:27.500 回答