一、测试平台

  本次评测并没有采用传统的关系型数据库测试常用的TPC-H标准,而是针对性的 采用写入500万条100个字节的数据,然后随机读出500条记录的方法,来评测数据的存储和读取效率,客户端采用PHP写的程序,接口使用了不同的第三 方类库,使用Apache ab工具进行并发测试。

  NoSQL所在配置如下:

  为Xeon 2.80GHz *4

  为4G

  为一块400G SATA盘

  为64位CentOS 5.3版本

  二、数据读写效率

数据库横评 5款NoSQL数据库评测总结

  从图中可见HandlerSocket、TTServer(Table类型)和Redis的读取效率很高,在配置不高的测试环境中,能达到2.5万以上QPS,TTServer(BTree类型)、MongoDB和Redis写效率较高,能达到6千以上QPS。

  综合来看,Redis的读写效率都很高,这是因为它的大部分操作都在中 完成,只是定期刷新数据到磁盘。MongoDB的读写效率比较均衡,HBase在存取效率上的表现不高。HandlerSocket读取效率很高,但是写 入偏慢,这是因为写入完全是利用Innodb存储引擎的机制,利用传统关系型数据库的日志和存储机制保障降低在异常情况下丢失数据的概率。

 

三、占用情况

数据库横评 5款NoSQL数据库评测总结

  可见MongoDB占用较多,这是因为其内存是管理的,可能会使用较多的系统可用内存来缓存数据。Redis使用很少,和实际数据的容量大小相当。

  四、数据文件大小

数据库横评 5款NoSQL数据库评测总结

  可见MongoDB产生的数据文件很大,接近4G,这是由其预分配存储空间的实现机制决定的。Redis和TTServer(BTree类型)的数据文件大小都和500条100字节数据的容量大小接近。

  五、比较结论

   由于NoSQL的产品设计思路和实现方式和传统的关系型数据库不同,不同的NoSQL产品有其自身侧重的方向,比如HandlerSocket、 TTserver和Redis侧重Key-Value的高效读写效率,MongoDB侧重文档型的数据存储结构,HBase则是需要存储海量数据的 BigTable实现。因此简单的横向对比意义不大,我们更重要的是要深刻了解我们的应用场景,在此基础上尽量选择合适的并且是自身比较熟悉的NoSQL 产品,在这技术发展日新月异的时代,新的产品和技术不断涌现,我们需要不断的权衡取舍,以能解决我们工作中的实际问题为出发点来做出选型,而不是盲目跟 风,为了尝试新技术而采用新技术的做法是不可取的。只有我们有能力驾驭了新技术,新技术才能真正的为我所有,从而为产品创造价值。