|
@ -299,7 +299,7 @@ Value设计为:1字节标志位+Varint64文件ID+Varint64偏移量+Varint64长 |
|
|
- 有效的键值对会被重新 put 进入数据库(在此操作中自然的被插入到最新的ValueLog中),SSTable中无效的键值对则会在compaction过程中被自然的回收。 |
|
|
- 有效的键值对会被重新 put 进入数据库(在此操作中自然的被插入到最新的ValueLog中),SSTable中无效的键值对则会在compaction过程中被自然的回收。 |
|
|
- 如果一条记录异常(读文件失败,或者CRC校验失败),则跳过整个ValueLog(已经GC的部分不影响)。该ValueLog不会进入后面的**延迟删除**环节。 |
|
|
- 如果一条记录异常(读文件失败,或者CRC校验失败),则跳过整个ValueLog(已经GC的部分不影响)。该ValueLog不会进入后面的**延迟删除**环节。 |
|
|
4. **延迟清理GC完毕的ValueLog文件**: |
|
|
4. **延迟清理GC完毕的ValueLog文件**: |
|
|
- 对ValueLog扫描完毕后,**延迟删除(Trick2)**该ValueLog。 |
|
|
|
|
|
|
|
|
- 对ValueLog扫描完毕后,**延迟删除(Trick2)** 该ValueLog。 |
|
|
|
|
|
|
|
|
#### Trick1:验证元数据/重新Put的正确性保证 |
|
|
#### Trick1:验证元数据/重新Put的正确性保证 |
|
|
|
|
|
|
|
@ -402,7 +402,7 @@ void CheckValid(){ |
|
|
|
|
|
|
|
|
经过perf火焰图测试发现,大多数时间仍用于系统调用read,IO仍然是瓶颈,因此未从本质上解决问题。 |
|
|
经过perf火焰图测试发现,大多数时间仍用于系统调用read,IO仍然是瓶颈,因此未从本质上解决问题。 |
|
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
**缺陷2:prefetch数组需要存放所有Value,实践中不可行** |
|
|
**缺陷2:prefetch数组需要存放所有Value,实践中不可行** |
|
|
|
|
|
|
|
@ -430,7 +430,7 @@ void CheckValid(){ |
|
|
|
|
|
|
|
|
#### 实现3.Unordered Iterator |
|
|
#### 实现3.Unordered Iterator |
|
|
|
|
|
|
|
|
**观察:**许多使用NoSQL scan功能的场景并不需求Iterator返回数据的有序性。并且使用Iterator时并不会用Prev和Next反复横跳,而是单向遍历。 |
|
|
|
|
|
|
|
|
**观察:** 许多使用NoSQL scan功能的场景并不需求Iterator返回数据的有序性。并且使用Iterator时并不会用Prev和Next反复横跳,而是单向遍历。 |
|
|
|
|
|
|
|
|
基于观察,我们提出了Unordered Iterator。即与原Iterator功能相同但不保证返回数据有序性的Iterator。 |
|
|
基于观察,我们提出了Unordered Iterator。即与原Iterator功能相同但不保证返回数据有序性的Iterator。 |
|
|
|
|
|
|
|
@ -1145,9 +1145,9 @@ getkeysbyfieldproportion=0.001 |
|
|
|
|
|
|
|
|
以下第一张图是fillRandom的火焰图,第二张图是overwrite的火焰图。 |
|
|
以下第一张图是fillRandom的火焰图,第二张图是overwrite的火焰图。 |
|
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
## 7. 分工和进度安排 |
|
|
## 7. 分工和进度安排 |
|
|
|
|
|
|
|
|