您的位置:首页 > 博客中心 > 数据库 >

tair源码分析——leveldb存储引擎使用

时间:2022-03-10 18:13

分析完leveldb以后,接下来的时间准备队tair的源码进行阅读和分析。我们刚刚分析完了leveldb而在tair中leveldb是其几大存储引擎之一,所以我们这里首先从tair对leveldb的使用和修改来窥探在这个分布式的存储引擎中是如何将area和bucket持久化到存储,并且方便bucket和area的处理的。

我们首先来看tair中key的结构,我们以大致梳理存储和查询一个KV的流程来确认key的处理。tair_client_api::put直接调用tair_client_impl::put,impl中首先会对key和value(data)进行合法性判断,然后调用get_server_id取得存储当前key的server_id后将组装好的request_put发送到服务器端。服务端接收到消息后handlePacketQueue解码然后会调用对应的process函数,这里是 request_processor::process(request_put *, ……)这个函数。这个函数会进行一些plugin和是否存储在本地等一些处理和判断,我们这里只需关注其调用到了tair_manager::put,这个函数里面对可以进行了一定的处理

expire(4B) | bucket_no(3B) | area (2B) | user_key

而又使用了自己实现的Comparator跳过开始的expire4个字节,这样最后就得到了整个leveldb中存储的数据就先以bucket_no排序,然后是area,最后才是安装user_key,经过这样的处理后我们以bucket进行迁移时就只需安装bucket_no生成对应的区间扫描的key就可以了。

 

本文介绍leveldb的key存储结构,希望以此为起点理清tair内部存储然后再以此为脉络进一步分析tair的实现。

tair源码分析——leveldb存储引擎使用,布布扣,bubuko.com

热门排行

今日推荐

热门手游