大数据时代常用的几类Key-Value(NoSQL)数据库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gunri_tianjin/article/details/83215422

在过去的十年中,计算世界已经改变。现在不仅在大公司,甚至一些小公司也积累了TB量级的数据。各种规模的组织开始有了处理大数据的需求,而目前关系型数据库在可缩放方面几乎已经达到极限。 

一个解决方案是使用键值(Key-Value)存储数据库,这是一种NoSQL(非关系型数据库)模型,其数据按照键值对的形式进行组织、索引和存储。KV存储非常适合不涉及过多数据关系业务关系的业务数据,同时能有效减少读写磁盘的次数,比SQL数据库存储拥有更好的读写性能。 

本文就为你介绍9种用于大数据处理的免费键值存储数据库。

1. Aerospike 社区版

Aerospike是一个以分布式为核心基础,可基于行随机存取内存中索引、数据或SSD存储中数据的数据库。 
Aerospike主要用于广告业务,作为一个服务器端的cookie存储来使用,在这种场景下读取和写入性能是至关重要的。 
 

2. LevelDB

Leveldb是Google开发的一个非常高效的kv数据库,支持billion级别的数据量,在这个数量级别下还有着非常高的性能,主要归功于它的良好的设计,特别是LSM算法。Leveldb已经作为存储引擎被Riak和Kyoto Tycoon所支持,在国内淘宝的Tair开源key-value存储也已经将LevelDB作为其持久化存储引擎,并部署在线上使用。 
 

3. RocksDB

RocksDB是一个可嵌入的持久的Key-Value存储。

*leveldb和rocksdb性能对比

测试一:将1B(即10亿)个key数据随机批量写入空数据库

rocksdb:   103 minutes, 80 MB/sec (total data size 481 GB, 1 billion key-values)
leveldb:   many many days (in 20 hours it inserted only 200 million key-values)

原因:

rocksdb其实使用了两步:先做fillrandom,再做compact

leveldb只是使用了一步:fillrandom

测试二:将1B个key数据顺序批量插入空数据库

rocksdb:   36 minutes, 370 MB/sec (total data size 760 GB)
leveldb:   91 minutes, 146 MB/sec (total data size 760 GB)
Java
fillseq : 2.48233 micros/op; 311.2 MB/s; 1000000000 ops done; 1 / 1 task(s) finished.

原因:

rocksdb使用了多线程compact

测试三:随机覆盖1B个key数据

rocksdb: 15 hours 38 min;  56.295 micros/op, 17K ops/sec,  13.8 MB/sec
leveldb: many many days;  600 micros/op,     1.6K ops/sec, 1.3 MB/sec
          (in 5 days it overwrote only 662 million out of 1 billion keys, after which I killed the test)

原因:

rocksdb使用了20个compact线程,使用了6个level,仅了level 2及以上启用了gzip

测试四:随机读取1B个key数据

rocksdb:  70 hours,  8 micros/op, 126K ops/sec (checksum verification)
leveldb: 102 hours, 12 micros/op,  83K ops/sec (no checksum verification)
Java:
readrandom : 7.67180 micros/op; 101.4 MB/s; 1000000000 / 1000000000 found; 32 / 32 task(s) finished.

配置:rocksdb额外启用了checksum,leveldb关闭了checksum

原因:rocksdb没有用mmaped IOs,这个在某些linux平台上会慢。rocksdb把block cache分成了64份,以降低锁力度。

测试五:多线程读,同时单线程写

rocksdb: 11 hours 30 minutes, 9.640 micros/read, 103734 reads/sec
leveldb: 20 hours 28 minutes

Java:

readwhilewriting :     9.55882 micros/op;   81.4 MB/s; 100000000 / 100000000 found;  32 / 32 task(s) finished.

配置:rocksdb release 2.7 and leveldb 1.15

PS: RocksDB的配置,见官网:https://github.com/facebook/rocksdb/wiki/RocksDB-Tuning-Guide

中文参考:http://www.jianshu.com/p/ddf652aa4882

猜你喜欢

转载自blog.csdn.net/gunri_tianjin/article/details/83215422