Tair LDB基于Prefixkey的范围查找性能优化项目之如何提取key的prefix_size

目前项目已快截止,编码任务也基本完成,现在主要是性能测试。项目是按照“Tair LDB基于Prefixkey的范围查找性能优化项目提议方案”的步骤一步步完成的,首先先介绍第一个关键问题是如何解决的。在提案中有以下描述:由于getrange接口的数据是从prefixput/prefixincr接口进来的,那么prefix的长度信息就可以从它们的pkey参数得到,pkey的数据类型是dataentry
摘要由CSDN通过智能技术生成

目前项目已快截止,编码任务也基本完成,现在主要是性能测试。

项目是按照“Tair LDB基于Prefixkey的范围查找性能优化项目提议方案”的步骤一步步完成的,首先先介绍第一个关键问题是如何解决的。在提案中有以下描述:

由于getrange接口的数据是从prefixput/prefixincr接口进来的,那么prefix的长度信息就可以从它们的pkey参数得到,pkey的数据类型是dataentry,有属性prefixsize,那么我们在客户端将pkey和skey合并为mkey(已经设置mkey的prefixsize为pkey的size)后与value一起传送到服务器端。

在客户端与服务器端的连接过程中,将key的类型封装成LdbKey类,value的类型封装成LdbItem类,LdbItem里面含有key的prefixsize信息,然后两者都转化为Slice类型发送到leveldb底层进行存储操作。注意此时value里面包含了prefixszie信息(序列化信息,不能直接提取),因此我们在生成filter block时可以从value中提取出prefix_size信息(按LdbItem的格式进行分析提取)以生成我们所需要的prefix bloomfilter。提取的具体实现可以放在leveldb层的外面,在leveldb里面进行调用即可(分离操作)。

这里面提到一个关键信息:key的prefix_size信息在db中是存储在value中而不是在key中.

那么value的格式是什么样的呢?

首先value的内容是由LdbItem的数据得到的,知道了LdbItem里数据的存储格式也就知道了value的数据存储格式。LdbItem里data_的数据构成是由下面这个set函数完成的:

// meta_ MUST already be set correctly
void set(const char* value_data, const int32_t value_size)
{
   
  if (value_data != NULL && value_size > 0)
  {
   
    char *metap = reinterpret_cast<char 
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值