你的位置:首页 > 软件开发 > 数据库 > LevelDB源码之六缓存机制

LevelDB源码之六缓存机制

发布时间:2015-09-21 22:00:42
缓存机制一直是性能优化的重要方式,LevelDB在读取SSTable、Block中均采用了缓存。LevelDB的缓存机制可谓“白手起家”,由最下层的Hash类到最上层的TableCache都由作者编写完成。先来看下类图: LRUHand ...

缓存机制一直是性能优化的重要方式,LevelDB在读取SSTable、Block中均采用了缓存。

LevelDB的缓存机制可谓“白手起家”,由最下层的Hash类到最上层的TableCache都由作者编写完成。先来看下类图:

LevelDB源码之六缓存机制

 

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 (#换成@)。