MySQL集群的性能低于10 ops/秒,延迟为400 ms。它在集群中的节点上分区,因此系统使用一个优化器将SQL命令转换为查询计划。该计划的执行被划分到多个节点中。对于范围扫描,B-tree索引用于在表达式>、<或BETWEEN中进行列比较。
Sharded MySQL基于连接器端的键散列,不支持集群上的真实范围扫描。虽然单个碎片的运行速度大约为10 ops/秒,但整个分片设置的运行速度接近40 ops/秒,延迟高达400 ms。MyISAM缓存索引块,但不缓存数据块。可能会因为从OS缓冲区缓存中重新读取数据块而产生开销。
Riak bitcask存储引擎不支持范围扫描。这可以通过使用eleveldb的二级索引和引用主键的特殊$key索引来完成。在导入了50,000,000条记录后,Eleveldb的性能开始下降,我们又回到了bitcask。
*工作负载G:大部分插入模式。工作负载设置:
1)插入/阅读:90/10
2)最新请求分发
HBase在包含大量写操作的工作负载下显示了最佳结果。卡桑德拉是第二。MySQL集群的NDB引擎也可以很好地管理密集型编写。
结论
正如您所看到的,没有完美的NoSQL数据库。每个数据库都有其优点和缺点,这些优点或多或少取决于您的偏好和任务类型。
例如,一个数据库可以展示出色的性能,但是一旦记录的数量超过了某个限制,速度就会急剧下降。这意味着这种特定的解决方案适合中等的数据加载和极快的计算,但不适合需要大量读写的作业。此外,数据库性能还取决于硬件的容量。
几乎不可能在一篇文章中包含所有的性能图并描述所有的内容。您可以下载研究的完整版本,其中包含单独的章节专门用于每个数据库,YCSB和Amazon EC2配置细节,以及附录和其他性能图表http://altoros.com/nosql-research。
我们希望这项研究对使用NoSQL解决方案的开发人员和试图选择数据库的客户都有用。Altoros的研发团队将定期修订和更新这项研究的信息,以涵盖新的数据库和最受欢迎的产品的发布。
关于作者:Sergey Bushik是Altoros的高级研发工程师。他有超过七年的基于java的项目实施经验,包括大数据处理、数据挖掘和Hadoop计算。Sergey拥有许多Java证书,是Sun认证的Java平台企业架构师。他经常在国际会议上发表演讲——最近,他在大数据会议(Sunnyvale, Calif.)、GOTO哥本哈根2012、Hadoop晚会(东欧)等会议上发表演讲。