0603: 代码重构
如果把 SSTable 增加到 KV 里,查询时要同时查询内存数据结构(MemTable)和 SSTable,合并结果。现在的内存数据结构只是2个数组:
type KV struct {
log Log
keys [][]byte
vals [][]byte
}这一步不增加功能,而是把内存数据结构挪到单独的模块里,为下一步的合并操作做准备。也方便以后替换数据结构。
type KV struct {
log Log
mem SortedArray
}
type SortedArray struct {
keys [][]byte
vals [][]byte
}抽离出的 SortedArray 满足 SortedKV interface,可作为 SSTable 的输入:
func (arr *SortedArray) Size() int { return len(arr.keys) }
func (arr *SortedArray) Iter() (SortedKVIter, error) {
return &SortedArrayIter{arr.keys, arr.vals, 0}, nil
}KVIterator 换个更合适的名字:SortedArrayIter。KV.Seek() 改成返回 interface:
func (kv *KV) Seek(key []byte) (SortedKVIter, error)结构体不要直接操作,而是通过方法函数。原来的 get、set、del 也挪过去:
func (arr *SortedArray) Key(i int) []byte { return arr.keys[i] }
func (arr *SortedArray) Clear()
func (arr *SortedArray) Push(key []byte, val []byte)
func (arr *SortedArray) Pop()
func (arr *SortedArray) Get(key []byte) (val []byte, ok bool, err error)
func (arr *SortedArray) Set(key []byte, val []byte) (updated bool, err error)
func (arr *SortedArray) Del(key []byte) (deleted bool, err error)您正在阅读免费版教程,从第4章起只有简单的指引,适合爱好挑战和自学的读者。
可以购买有详细指导+背景知识的完整版。