Skip to content

Commit

Permalink
feat: move tcp to 计算机网络
Browse files Browse the repository at this point in the history
  • Loading branch information
yangjie committed Aug 11, 2020
1 parent 1d8fd30 commit d783b3d
Show file tree
Hide file tree
Showing 39 changed files with 2,656 additions and 122 deletions.
32 changes: 31 additions & 1 deletion LEVLEDB/compaction.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,24 @@





- 如果有比较大的写buffer,没有必要做太多的0层压缩
- 如果写buffer比较小,由于我们每次read的时候都要读取level0层的全部文件,所以我们不要太多的文件。

```go
// We treat level-0 specially by bounding the number of files
// instead of number of bytes for two reasons:
//
// (1) With larger write-buffer sizes, it is nice not to do too
// many level-0 compaction.
//
// (2) The files in level-0 are merged on every read and
// therefore we wish to avoid too many files when the individual
// file size is small (perhaps because of a small write-buffer
// setting, or very high compression ratios, or lots of
// overwrites/deletions).
```
- minor compaction是一个时效性要求非常高的过程,要求其在尽可能短的时间内完成,否则就会堵塞正常的写入操作,因此**minor compaction的优先级高于major compaction**


Expand All @@ -34,6 +52,14 @@
- 0层文件比较多时,写入减慢
- 0层文件太多时,写入暂停,直到major compaction完成


### 直接移动(很重要)

- source层的文件个数只有一个;
- source层文件与source+1层文件没有重叠;
- source层文件与source+2层的文件重叠部分不超过10个文件;
- 注:条件三主要是(避免mv到level + 1后,导致level + 1 与 level + 2层compact压力过大)

#### 错峰合并

如果同时好几层需要合并,那么开销很大。
Expand All @@ -60,4 +86,8 @@

## 用户行为

由于leveldb内部进行compaction时有trivial move优化,且根据内部的文件格式组织,用户在使用leveldb时,可以尽量将大批量需要写入的数据进行预排序,利用空间局部性,尽量减少多路合并的IO开销。
由于leveldb内部进行compaction时有trivial move优化,且根据内部的文件格式组织,用户在使用leveldb时,可以尽量将大批量需要写入的数据进行预排序,利用空间局部性,尽量减少多路合并的IO开销。



除了level 0以外,任何一个level的文件内部是有序的,文件之间也是有序的。但是level(n)和level(n+1)中的两个文件的key可能存在交叉。正是因为这种交叉,查找某个key值的时候,level(n) 的查找无功而返,而不得不去level(n+1)查找。如果查找了多次,某个文件不得不查找,却总也找不到,总是去高一级的level,才能找到。这说明该层级的文件和上一级的文件,key的范围重叠的很严重,这是不合理的,会导致效率的下降。因此,需要对该level 发起一次major compaction,减少 level 和level + 1的重叠情况。
2 changes: 2 additions & 0 deletions LEVLEDB/leveldb log.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,8 @@ batch为key, 而memedb为sequence number。



(和internalkey不同的是没有key和value的大小。以及对应的type)

- 其中internal key len不仅包括key的大小,还是internal key的大小(每条数据项额外8个字节)

```
Expand Down
Loading

0 comments on commit d783b3d

Please sign in to comment.