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

在单节点设置中,Cassandra与MySQL(或任何其他RDBMS)相比如何?,mysql,database-design,cassandra,rdbms,schemaless,Mysql,Database Design,Cassandra,Rdbms,Schemaless,在研究了关系数据库、文档存储、图形数据库和面向列的数据库之后,我得出结论,像Cassandra这样的东西最适合我的需要。特别是,动态添加列的能力,以及不需要严格的模式,为我带来了成功。这似乎很好地弥补了一个相当新颖的graph db和一个经过时间测试的rdbms之间的差距 但我关心的是如何在单个节点上运行Cassandra。像许多其他人一样,我只能从少量数据开始,因此从多个节点开始是不实际的。基于另一个优秀的SO问题:我得出结论,Cassandra确实可以作为单个节点正常运行,只要您愿意放弃从多

在研究了关系数据库、文档存储、图形数据库和面向列的数据库之后,我得出结论,像Cassandra这样的东西最适合我的需要。特别是,动态添加列的能力,以及不需要严格的模式,为我带来了成功。这似乎很好地弥补了一个相当新颖的graph db和一个经过时间测试的rdbms之间的差距

但我关心的是如何在单个节点上运行Cassandra。像许多其他人一样,我只能从少量数据开始,因此从多个节点开始是不实际的。基于另一个优秀的SO问题:我得出结论,Cassandra确实可以作为单个节点正常运行,只要您愿意放弃从多节点设置中获得的可用性等好处

例如,在RDBMS中似乎也有实现字段动态添加的方法,如本文所讨论的:这在某种程度上模拟了无模式性


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

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

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

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


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

您将在这里得到自以为是的回答。由于你方没有明确的要求,没有事实可以准确地得出什么更快的结论-什么足够快?如果卡桑德拉对你有吸引力,为什么不直接使用它,看看它是如何发展的呢?MySQL是一个关系型数据库,显然,您需要非关系模式,并能够动态添加定义。虽然是可行的,但这不是关系数据库的用途——维护这样一个模式变得相当棘手。我担心的是,这些都是自以为是的反应。一般来说,一毫秒的读取时间足够快。但要注意的是,将关系数据库用于它不是为之设计的东西确实可能是一个维护问题。感谢您的反馈。阅读时间主要取决于从何处阅读。如果磁盘速度慢,那么Cassandra和MySQL都不能实现一些神奇的代码来加快速度。我敢肯定,所有存储解决方案都喜欢从缓存中读取数据,而缓存通常保存在RAM中。如果您知道要检索的记录,那么Cassandra和MySQL的操作几乎相同。这里的关键是知道你想读什么。如果您需要首先搜索记录,那么我们将进入整个“什么样的数据结构及其存储位置”的讨论。如果我是你的话,我会用卡桑德拉。是的,我也开始这样靠了。但作为一种替代方案,我们也在考虑在应用程序级别对数据进行分区,并改用传统数据库……您听说过Percona TokuDB吗?也许可以试一试?