Skip to content
Zhang Jc edited this page May 13, 2018 · 7 revisions

KV-stores(memcached, Redis, LevelDB, RocksDB ...)

KV存储的基本接口是put, get和remove,很多KV存储支持scans操作(两个输入:upper bound和lower bound)。

Bitcask?

LevelDB 和 RocksDB

LSM存储

levelDB是一个KV存储,基于LSMT(Log-Structured Merge Tree)结构。

LSM主要优化磁盘写,分两层(tier),内存层(memory component)和磁盘层(disk component),内存层主要用来作cache和buffer,put和delete这两种update操作在这里进行并迅速返回。磁盘层有分为很多层(level),每个level中有1个或多个文件,如果要求严格,改内存层之前,可以先将所有更改写到磁盘的commit-log中。

LSM的关键操作是compaction,一个后台的操作,一个或者多个专用的线程进行,内存中的memory component达到一定的阈值,会被merge到disk中。compaction分两步:1)把暂时不可更改的memory component写到disk;2)重新组织磁盘上的结构,将文件移动、merge到合适的levels。

在内存层中,可以用顺序的skiplist或者乱序的hash table,顺序skiplist需要在插入操作时用log时间进行排序,但是scan操作和compaction操作会比较快。用乱序hash table,插入是常数时间,但是scan会很慢,在compaction时会进行全部的重排序再写磁盘,所以时间比较长。

skip list

区别。。

...

Redis 和 memcached

相对LevelDB 和 RocksDB两种“嵌入式”的数据库,Redis 和 memcached虽然也是KV存储,但是是server形式,远程访问(给出IP和端口)。[2]


[1] O. Balmau, R. Guerraoui, V. Trigonakis, and I. Zablotchi, “FloDB : Unlocking Memory in Persistent Key-Value Stores,” EuroSys ’17, 2017.

[2] How does Leveldb compare with Redis or Riak or Tokyo Tyrant?, https://stackoverflow.com/questions/6101402/how-does-leveldb-compare-with-redis-or-riak-or-tokyo-tyrant

[3] Getting Started with RocksDB in CentOS 7, https://blog.jeffli.me/blog/2016/12/02/getting-started-with-rocksdb-in-centos-7/

Clone this wiki locally