Leveldb write

年前分享了LevelDB的时候遗留了一个问题 就是在LevelDB Write操作的时候, 如何做到线程安全的, 以及在代码里面为什么要同时通知这么多个的线程

CAP theorem

CAP theorem (摘自维基百科)

How redis implement data structure

  1. redis implement the append command by realloc the space need by the function.

vector clocks

vector clocks 是Amazon 的Dynamo 论文提出的一个处理冲突的解决方案

Basho levelDB 改进

Basho levelDB 改进

levelDB Compaction 相关

level DB 如何选择要Compaction的级别

levelDB Get过程

leveldb 代码 get 过程

levelDB thought

  1. 在ENV 里面可以把levelDB的结果从写入到本地 改成写入到 hdfs 来实现数据的备份, 复制等操作 具体的做法就是调用hdfs的写入这些库来实现. 这样实现levelDB的分布实话非常方便
  2. levelDB的VersionSet 是管理者 version. 然后 每一个version 有一个列表, 这个列表是这个version 的对应的所有的SST文件. 所以你要查找某一个Version的数据的时候. 先会在这个VersionSet里面查找一遍包含这个当前快照的一个版本, 然后再从这个version 的这个list里面去具体的文件查找具体的内容
  3. 在一台机器上面getInstance()出来1000 levelDB的实例的话, 只会有一个compaction线程, 然后一个机器1000 个levelDB 实例和1个机器1个levelDB的实例的话 带来的好处是在机器挂掉得时候recovery的非常的快. 不过这样compaction起来就很费劲
  4. 在将本地文件写入到hdfs的节点中, 因为hdfs的写入性能比较慢. 所以在本地应该是writrBranch. 然后20ms向hdfs写一次. 这样比较适合.
  5. levelDB 如何实现原子的getAndSet. 因为levelDB不是再内存层面实现这个对具体某一个key操作. 所以这个levelDB 的getAndSet操作不是通过汇编层面实现的.

levelDB中用到的迭代器模型

迭代器的设计模式是一种很常用的设计模式. leveldb的实现里面就用到了.

learn c++ from levelDB

LevelDB是一个学习c++很好的一个代码. 里面有很多写代码的好习惯值得我们学习.