对于简单的操作,Cassandra比Mysql慢得多?

时间:2012-01-13 12:04:07

标签: php mysql performance cassandra

我看到很多声明如下:“Cassandra写入速度非常快”,“Cassandra的读取速度比写入慢,但比Mysql快得多”

在我的windows7系统上: 我安装了默认配置的Mysql。 我安装了PHP5的默认配置。 我安装了默认配置的Casssandra。

在mysql上进行简单的写入测试:“INSERT INTO wp_testidtitle)VALUES('id01','test')”给我结果:0.0002(s) 对于1000个插入物:0.1106(s)

在Cassandra上进行简单的相同写入测试:$ column_faily-> insert('id01',array('title'=>'test'))给出结果:0.005(s) 对于1000个插入:1.047(s)

对于读取测试,我也得知Cassandra比mysql慢得多。

所以问题是,这听起来是否正确,我在Cassadra上进行一次写操作需要5ms?或者出了什么问题,应该至少0.5毫秒。

4 个答案:

答案 0 :(得分:11)

当人们说“Cassandra比MySQL更快”时,他们意味着当你处理数TB的数据和许多同时用户时。 Cassandra(以及许多分布式NoSQL数据库)针对许多节点上的数百个同时读取器和写入器进行了优化,而MySQL(和其他关系数据库)则被优化为在单个节点上真正快速,但是当你尝试在多个节点上缩放它们时,往往会崩溃。顺便说一下这种权衡的概括 - 绝对最快的磁盘I / O是普通的旧UNIX平面文件,许多对延迟敏感的金融应用程序因此使用它们。

如果你正在构建下一个Facebook,你需要像Cassandra这样的东西,因为单个MySQL盒子永远不会经受数千个同时读写的惩罚,而使用Cassandra你可以扩展到数百个数据节点并轻松处理该负载。见scaling up vs. scaling out

另一个用例是当您需要将大量批处理能力应用于太字节或数PB的数据时。 Cassandra或HBase非常棒,因为它们与MapReduce集成,允许您在数据节点上运行处理。使用MySQL,您需要提取数据并将其喷射到处理节点网格中,这将占用大量网络带宽并导致大量不必要的复杂化。

答案 1 :(得分:2)

Cassandra受益于并行化和批处理。尝试在100个线程中的每一个上进行100万次插入(每个线程都有自己的连接和100个批量)并查看哪些更快。

最后,Cassandra插入性能应该相对稳定(在很长一段时间内保持高吞吐量)。使用MySQL,你会发现一旦用于索引的btree增加了太大的内存,它就会大大减少。

答案 2 :(得分:0)

MySQL驱动程序的成熟度,特别是PHP 5.3中改进的MySQL驱动程序,可能会对测试产生一些影响。查询中数据的简单性也完全有可能影响结果 - 可能在100个值插入上,Cassandra变得更快。

从命令行尝试相同的测试并查看时间戳是什么,然后尝试使用不同数量的值。你不能做一个单独的测试,并根据它做出决定。

答案 3 :(得分:0)

许多用户空间因素可能会影响写入性能。如:

  • 每个数据库服务器配置中的几十个设置。
  • 表的结构和设置。
  • 连接设置。
  • 查询设置。

您是否吞下警告或异常?从表面上看,MySQL示例将产生重复的键错误。不执行任何操作可能会失败。我不熟悉Cassandra在同一情况下可能会做的事情。

我对Cassandra的有限经验告诉我关于插入的一件事,尽管其他所有数据的性能都会随着数据的增长而降低,但插入似乎会保持相同的速度。它与MySQL相比有多快,但是我没有测试过。

插入的速度可能并不快,但是却尝试从不慢。如果您想进行更有意义的测试,则需要结合并发性和更多情况下的变化,例如大数据集,各种批处理大小等。更复杂的测试可能会测试延迟,以了解随时间推移数据插入和读取速度的可用性。

如果Cassandra插入数据的第一个调用端口是将其放入队列或简单地追加,这不会令我感到惊讶。如果您查看一致性级别,则这是可配置的。 MySQL同样允许您在性能和可靠性/可用性之间取得平衡,尽管每种方法在允许和不允许的方面都会有所不同。

除此之外,除非您了解内部原理,否则可能很难说出为什么一个比另一个表现更好。

我做了一段时间的基准测试,我曾为Cassandra用过。对于基准测试,它将首先插入数万行。我不得不让脚本休眠几秒钟,因为否则查询会在事实发生后运行,而看不到数据并且结果在我正在测试的实现之间是不一致的。

如果您确实想要快速插入,请附加到ramdisk上的文件中。