知识库 : 基于HBase模糊查询的RowKey设计

Edit Document

基于H Base 模糊 查询的RowKey 设计

 

 

目录

一、概述

二、业务场景

三、 RowKey 设计

四、过滤器选择

五、进一步说明

 

 

 

 

一、 概述

HB ase 作为 一种 kv数据库 ,能够很好的面对高吞吐率 在线数据 读写 服务, RowKey字段 条件查询 上, 性能 表现就 不是 太理想,本文 探讨 通过 对Row Key 的设计,提升非R owKey 字段 模糊查询 性能 设计 方法

二、业务场景

医院一般检验 流程 :检验 申请 单( bill )→检验 报告 (report ,现在 要求能够通过申请单号以及 检验 指标对检验报告进行快速 模糊 查询。其中申请单号 ( OrderNo ) 以及检验指标代码 ( TestCode ) 是检验报告的两个字段。

R owKey 设计

如果 直接对检验报告 两个字段进行 模糊 匹配查询 ,HB ase 需要 扫描整个数据集,逐条进行 筛选 ,性能表现可想而知。

为了 提升查询性能,我们要想办法把这两个字段组合到表的 RowK ey 里, 初步想法:

 

RowKey

f1

OrderNo

TestCode

0001_2003_ *

1

2003

 

0002_1025_ *

2

1025

 

R owKey 申请单号和检验指标 代码组合 而成,当然这两个字段外 还会 有其它拼接值,比如时间戳、序号等,这些就不再展开说。 申请 单号作为 Row Key 前缀,如果有基于申请单号的查询,可以直接走 HBase的 前缀查询,性能会非常高, 第二 字段 检验指标代码 如果有 基于 检验指标代码的查询 可以走 HBase的 模糊查询,两个字段的组合情况,就不一一说了,因为最终它都 落地到以上两种方式的查询。

、过滤器选择

前缀 查询 PrefixFilter 很简单,直接上代码:

模糊 查询用 FuzzyRowFilter 相对 复杂 一点, 假如 ,我们要查询检验 指标 代码 是1025的 所有检验报告,代码如下:

FuzzyRowFilter 需要把 模糊字段值组织成 P air firt是定长 RowKey串 ,其中模糊匹配部分用 ?或 \\x00 占位 second是first的 掩码,模糊匹配部分是 1, 固定部分是 0,first和second长度 相同。

、进一步说明

前提 条件:

1、     HBase 装入数据前 需要有 R owKey 设计规划。

2、     HBase RowKey 的每个 组合部分 都要 固定长度,不够长度的要有填充策略。

 

Attachments:

基于HBase模糊查询的RowKey设计.docx (application/vnd.openxmlformats-officedocument.wordprocessingml.document)
基于HBase模糊查询的RowKey设计.docx (application/vnd.openxmlformats-officedocument.wordprocessingml.document)