logo资料库

HBase分页查询的rowkey设计技巧.ppt

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
用户订单列表查询rowkey设计 Ø 需求场景 某用户根据查询条件查询历史订单列表 查询条件有:开始结束时间(orderTime)---必选, 订单号(seriaNum), 状态(status),游戏号(gameid) 结果按照时间倒排序 Ø rowkey的设计 rowkwy=userNum$orderTime$seriaNum cf:status,cf:gameid,cf:xxx Ø 为什么不rowkwy=userNum$gameid$orderTime$issueNum
先看一下mysql(最左前缀原则) Ø mysql create table test(a varchar(10) not null, b varchar(10) not null, c varchar(10) not null, d varchar(10); ) create index idx_complex(a,b,c) Ø 查询效率(利用好索引,尽量避免回表过滤) select a,b,c where a=10,b=1,c=10 select xx where a=10,b>1,c=10(x) select xx where a=10,c=10(x) select xx where a>10,b=10,c=10(x) select xx where a>10,b=10(x) select xx where a=10,b=10,c>10(x)
HBase的索引设计(最左前缀原则) Ø HBase的META表 VS mysql的二级索引 rowkey=userNum$orderTime$seriaNum 以下设计是不合理的 rowkey=userNum$gameid$orderTime$issueNum rowkey=userNum$status$orderTime$issueNum rowkwy=userNum$orderTime$gameid$issueNum Ø 查询 rowkey=userNum$orderTime$seriaNum可以唯一标识一条记录 ClientScan的startRow和stopRow只需要设置到userNum$orderTime即可 startRow=userNum$maxvalue-stopTime stopRow=userNum$maxvalue-startTime 其他字段用filter实现
订单详情rowkey设计 Ø 订单详情是可以根据订单号issumeNum,查看订单的明细 Ø rowkey=颠倒后的issueNum 因关系数据库中issueNum在设计是按照递增的顺序生成的, 所以在导出到HBase中时,为了分散到各个region中, 减轻对region的压力,所以用颠倒后的issumeNum作为订单详情表的rowkey
分享到:
收藏