部署配置
LevelDB 背景与配置
Google BigTable 的设计已总所周知,但许多细节 BigTable 论文中并不详细,LevelDB 可看作是 Bigtable 中 Tablet Server 的开源版本,亦即可认为是一个 K-V 持久化引擎,此项目由 BigTable 设计者发起。LevelDB 可以作为一个独立的持久化引擎来使用,淘宝的 Tair 就选择了 LevelDB 来做持久化,已在主流 NoSQL 系统中广泛使用,除开 BigTable/HBase,还有 Cassandra 等。
LevelDb 就是 Jeff Dean 和 Sanjay Ghemawat 这两位大神级别的工程师发起的开源项目,简而言之,LevelDb 是能够处理十亿级别规模 Key-Value 型数据持久性存储的 C++ 程序库。如果了解 Bigtable 的话,应该知道在这个影响深远的分布式存储系统中有两个核心的部分:Master Server 和 Tablet Server。其中 Master Server 做一些管理数据的存储以及分布式调度工作,实际的分布式数据存储以及读写操作是由 Tablet Server 完成的,而 LevelDb 则可以理解为一个简化版的 Tablet Server。
LevelDb 有如下一些特点:
- 首先,LevelDb 是一个持久化存储的 KV 系统,和 Redis 这种内存型的 KV 系统不同,LevelDb 不会像 Redis 一样狂吃内存,而是将大部分数据存储到磁盘上。
- 其次,LevleDb 在存储数据时,是根据记录的 key 值有序存储的,就是说相邻的 key 值在存储文件中是依次顺序存储的,而应用可以自定义 key 大小比较函数,LevleDb 会按照用户定义的比较函数依序存储这些记录。
- 再次,像大多数 KV 系统一样,LevelDb 的操作接口很简单,基本操作包括写记录,读记录以及删除记录。也支持针对多条操作的原子批量操作。
- 另外,LevelDb 支持数据快照(snapshot)功能,使得读取操作不受写操作影响,可以在读操作过程中始终看到一致的数据。
- 除此外,LevelDb 还支持数据压缩等操作,这对于减小存储空间以及增快 IO 效率都有直接的帮助。
LevelDb 性能非常突出,官方网站报道其随机写性能达到 40 万条记录每秒,而随机读性能达到 6 万条记录每秒。总体来说,LevelDb 的写操作要大大快于读操作,而顺序读写操作则大大快于随机读写操作。