1、Ali-HBase的SQL实践与改进阿里巴巴天穆为什么需要SQL?SQL on Ali-HBase优化与改进ApsaraDB-HBase未来的工作2 3 4 51案例:时间序列数据的存取time(desc)eventmessage10040011aaa8010020bbb8010010ccc7010040ddd6020000eee.需求:按时间顺序追加新记录 按时间范围查询数据 查询结果按时间倒排写热点问题time(desc)eventmessage10040011aaa8010020bbb8010010ccc7010040ddd6020000eee.time(desc)eventmessag
2、e12010010 xxx11010020yyy10040011aaa8010020bbb8010010ccc.hashtimeeventmessageAAAA10040011aaaBBBB8010020bbbCCCC12010010 xxxDDDD8010010cccEEEE11010010yyyFFFF.解决写热点问题:Hash散列time(desc)eventmessage12010010 xxx11010020yyy10040011aaa8010020bbb8010010ccc.bucket_idtime(desc)eventmessage110040011aaa7010040ddd5
3、030000fff28010010ccc6020000eee38010020bbb4010050hhh.分桶:bucket_id=md5(rowkey)%bucket_num 所有“桶”都可写 数据在桶内有序,桶之间无序 代价:范围查询时,须并发查所有桶,客户端执行merge sort解决写热点问题:分桶bucket_idtime(desc)eventmessage110040011aaa7010040ddd5030000fff28010010ccc6020000eee39010020bbb4010050hhh.Select*from eventLog where time 40 and ti
4、me=70;解决写热点问题:分桶bucket_1:70,50bucket_2:60bucket_3:NA70,60,50merge sort 分桶:写:打散 读:并发scan,client merge sort desc主键:ts=Long.MAX_VALUE-ts rowkey:3列主键的拼接与拆分 数据类型转换:Hbase只支持byte对于复杂的业务场景,用户要做的事情更多基于HBase Native API的实现使用HBase Native API的代价与收益 成本/负担 学习成本:学习曲线陡峭 开发成本:代码量大 重复 每个用户都要做相同/相似的事情 精准 细节:用户可精确控制一切,如
5、hash函数选取 最佳性能/吞吐:便于针对场景进行优化 自定义 实现复杂的业务场景“难用”的HBase Native APIHBase Native API仅提供“原语”级别的操作抽象层次低目标:降低接入门槛,让用户能快速、低成本的接入需求:解决共性问题 自动/透明的rowkey散列 自动拼接/解析rowkey(schema)支持丰富的数据类型 支持丰富的查询语义 支持二级索引 支持聚合.解决方案:SQL on HBase 具备Native API的全部能力 与Native API性能差距5%相比HBase API,大家更熟悉SQL 快速开发(ORM框架)对用户透明的优化 SQL工具 更低的接
6、入门槛和成本解决Native API“难用”的问题成为HBase的默认户接口拓展服务边界基于Phoenix的SQL on HBase解决方案Phoenix JDBC DriverHBase ClientRegionServerPhoenix CoprocessorRegionServerPhoenix CoprocessorRegionServerPhoenix CoprocessorHDFSZooKeeper ServiceHBase Master Service案例1:支付宝智能搜索dump平台数据源HBaseShopItemRelationShopItemRelationResultHB