NoSQL数据库性能大比拼

转自 http://jiaweiweb.com

NoSQL的优势

1.易扩展
NoSQL数据库去掉了关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。
2.大数据量,高性能
NoSQL数据库无需保证ACID,因此都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。
NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。这点在大数据量的web2.0时代尤其明显。
3.高可用
NoSQL在不太影响性能的情况,就可以方便的实现高可用的架构。比如Cassandra,HBase模型,通过复制模型也能实现高可用。

SQL和NoSQL都有各自的特点和使用的应用场景,两者的紧密结合将会给web2.0的数据库发展带来新的思路。让关系数据库关注在关系上,NoSQL关注在存储上。
这里挑选了几个常见的3个NoSQL的数据库进行一下各自在不同场景下的性能比较。挑选的数据库有HBase,Cassandra,MongoDB。
测试方式:
benchmarking
使用Yahoo Cloud Serving Benchmark (YCSB)。
数据集
每张表需要操作100,000,000行记录,每行记录1KB,每行记录包含10个field,其中包含一个主键,类型是string。
数据库配置
Cassandra 2.0. 使用随机分区分割数据,JVM堆大小6GB,
MongoDB 2.4.6. 增加两个实例作为router,和MongoDB建议的一样。基于document key做sharding。
HBase 0.92. JVM堆大小7GB。
以上三个数据库均部署4个节点。

1:50%读取 50%更新 模拟类似电子商务的场景。

更新的性能如下:Casssandra和HBase表现优异,均在20ms以下,MongoDB在1500TPS的时候性能极具下降,响应延迟达到100ms以上。
读取的性能如下:三个数据库的性能表现差不多,幅度在15-30ms左右

2:95%读取和5%的更新

更新的性能如下:Cassandra性能优异,HBase表现仅差于Cassandra一点,MongoDB和第一个测试一样,随着负载的增高,响应延迟上升的也比较快。表现比其他两个要差很多。
读取的性能如下:HBase表现最佳,而且获得了最大的吞吐量。其余两款数据受限于吞吐量的影响,不过整体延迟差别并不是很大。

3:100%读取 模拟缓存等场景

性能如下:和之前类似,三款数据库并无明显的性能差别

4:5%插入和95%读取 模拟消息盒子类的场景

插入性能如下:Cassandra性能表现最优,HBase和MongoDB变现和之前近似。
读取性能如下:Cassandra和MongoDB表现近似,领先与HBase,而且HBase的TPS只能达到1500

5:50%读取修改后回写和50%读取

读取性能如下:Cassandra和HBase表现类似,MongoDB在TPS在1000之后性能不够
更新性能如下:和读取性能类似,MongoDB同样性能很差

6:90%插入和10%读取

插入性能如下:三款数据库相差无几,不过MongoDB在TPS达到4000的时候性能是其他两款数据库的1/5

结论:

对以上情况可以看出,Cassandra和HBase是相对比较通用的方案,性能在各个场景下差距并不是很大。而MongoDB在某些场景下使用性能还是有一定影响。
没有一种数据库可以解决所有的需求场景。在不同的场景下和数据集下,数据库的性能表现也各不相同。需要什么样的数据库和你需要存储的数据集和应用场景有很大关联,以上提供这三款数据库在不同场景下的性能表现。你可以根据你自己的需要选用以上三种NoSQL数据库中的一种。当然在你做技术选型的时候,还需要考虑开发成本,维护成本等要求。

你可能感兴趣的:(编程)