RocksDB-01-Start
RocksDB
RocksDB 是一个可嵌入的,持久性的 key-value存储。
基于Google的LevelDB,但提高了扩展性可以运行在多核处理器上,可以有效使用快速存储,支持IO绑定、内存和一次写负荷
特性
高性能:RocksDB使用一套日志结构的数据库引擎,为了更好的性能,这套引擎是用C++编写的。 Key和value是任意大小的字节流。
为快速存储而优化:RocksDB...
2018-09-06 23:44:19 |
Cache
MapDB
MapDB
MapDB provides concurrent Maps, Sets and Queues backed by disk storage or off-heap-memory.
It is a fast and easy to use embedded Java database engine.
功能
直接替换映射、列表、队列和其他集合。
...
2018-09-06 23:44:19 |
Cache
LevelDB-09-Version Iterable
MVCC
Version 保存了当前磁盘以及内存中所有的文件信息,一般只有一个Version叫做”current” version(当前版本)。
Leveldb还保存了一系列的历史版本,这些历史版本有什么作用呢?
当一个Iterator创建后,Iterator就引用到了current version(当前版本),只要这个Iterator不被delete那么被Iterator引用的版本就...
2018-09-06 23:44:19 |
Cache
LevelDB-08-cache
Cache
书接前文,前面讲过对于levelDb来说,读取操作如果没有在内存的memtable中找到记录,要多次进行磁盘访问操作。
假设最优情况,即第一次就在level 0中最新的文件中找到了这个key,那么也需要读取2次磁盘,一次是将SSTable的文件中的index部分读入内存,这样根据这个index可以确定key是在哪个block中存储;第二次是读入这个block的内容,然后在内存...
2018-09-06 23:44:19 |
Cache
LevelDB-07-Compaction
Compaction
前文有述,对于LevelDb来说,写入记录操作很简单,删除记录仅仅写入一个删除标记就算完事,但是读取记录比较复杂,需要在内存以及各个层级文件中依照新鲜程度依次查找,代价很高。
为了加快读取速度,levelDb采取了compaction的方式来对已有的记录进行整理压缩,通过这种方式,来删除掉一些不再有效的KV数据,减小数据规模,减少文件数量等。
levelDb的co...
2018-09-06 23:44:19 |
Cache
LevelDB-06-CURD
写入与删除记录
在之前的五节LevelDb日知录中,我们介绍了LevelDb的一些静态文件及其详细布局,从本节开始,我们看看LevelDb的一些动态操作,比如读写记录,Compaction,错误恢复等操作。
本节介绍levelDb的记录更新操作,即插入一条KV记录或者删除一条KV记录。levelDb的更新操作速度是非常快的,源于其内部机制决定了这种更新操作的简单性。
图6.1是le...
2018-09-06 23:44:19 |
Cache
LevelDB-05-MemTable
MemTable
LevelDb日知录前述小节大致讲述了磁盘文件相关的重要静态结构,
本小节讲述内存中的数据结构Memtable,Memtable在整个体系中的重要地位也不言而喻。
总体而言,所有KV数据都是存储在Memtable,Immutable Memtable和SSTable中的,
Immutable Memtable从结构上讲和Memtable是完全一样的,区别仅仅在于其是只读的...
2018-09-06 23:44:19 |
Cache
LevelDB-04-SSTable
SSTable文件
SSTable是Bigtable中至关重要的一块,对于LevelDb来说也是如此,对LevelDb的SSTable实现细节的了解也有助于了解Bigtable中一些实现细节。
本节内容主要讲述SSTable的静态布局结构,我们曾在“LevelDb日知录之二:整体架构”中说过,SSTable文件形成了不同Level的层级结构,
至于这个层级结构是如何形成的我们放在后面Co...
2018-09-06 23:44:19 |
Cache