缓存机制一直是性能优化的重要方式,LevelDB在读取SSTable、Block中均采用了缓存。LevelDB的缓存机制可谓“白手起家”,由最下层的Hash类到最上层的TableCache都由作者编写完成。先来看下类图: LRUHand ...
缓存机制一直是性能优化的重要方式,LevelDB在读取SSTable、Block中均采用了缓存。
LevelDB的缓存机制可谓“白手起家”,由最下层的Hash类到最上层的TableCache都由作者编写完成。先来看下类图:
LRUHandle代表缓存记录,
HandleTable是专门用于存储LRUHandle的哈希表,
LRUCache则是基于HandleTable实现的LRU缓存,
SharedLRUCache继承自Cache抽象类,其内部实现了简单的一级缓存,并通过LRUCache实现二级缓存,
TableCache则是SSTable文件缓存。
LRUHandle(代表一条缓存记录)
1 // An entry is a variable length heap-allocated structure. Entries 2 // are kept in a circular doubly linked list ordered by access time. 3 struct LRUHandle { 4 void* value; 5 void(*deleter)(const Slice&, void* value); 6 LRUHandle* next_hash; 7 LRUHandle* next; 8 LRUHandle* prev; 9 size_t charge; // TODO(opt): Only allow uint32_t?10 size_t key_length;11 uint32_t refs;12 uint32_t hash; // Hash of key(); used for fast sharding and comparisons13 char key_data[1]; // Beginning of key14 15 Slice key() const {16 // For cheaper lookups, we allow a temporary Handle object17 // to store a pointer to a key in "value".18 if (next == this) {19 return *(reinterpret_cast<Slice*>(value));20 }21 else {22 return Slice(key_data, key_length);23 }24 }25 };
海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com
原标题:LevelDB源码之六缓存机制
关键词:缓存
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。