云HBase发布了“全文索引服务”功能,自2019年01月25日后创建的云HBase实例,可以在控制台免费开启此“全文索引服务”功能。使用此功能可以让用户在HBase之上构建功能更丰富的搜索业务,不再局限于KV简单查询,不再苦恼于设计各种rowkey,不再后怕日益变化的HBase复杂查询业务。“全文索引服务”为云HBase增强查询能力而设计,自动同步数据,用户只需重点关注如何使用强大的检索功能来丰富自己的业务架构。

为什么要增强HBase的检索能力

我们在使用HBase的时候都会面临一个问题,就是设计HBase的rowkey。可尽管我们工程师是多么的优秀,整理罗列了所有业务检索需求,并裁剪折中了这样那样的业务,缺依然不能设计一个全能的rowkey来满足各种业务查询需求。

例如在某物流管理系统中,我们需要对收件人姓名/手机/地址、寄件人姓名/手机/地址、运单编号/开始时间/结束时间、邮递员姓名/手机等条件,进行任意组合查询。这种复杂查询情况下,HBase原先的KV查询无法满足,尽管我们如何设计rowkey,都不能满足查询条件的任意性。另外,在这些查询中,可能会涉及到姓名/地址/手机号等条件的模糊查询,这也是HBase rowkey不能很好满足的。

又例如在某新零售业务中,需要对商品标题或者描述内容进行关键字查询,在HBase中我们只能使用模糊查询来实现,但模糊查询在HBase中是比较低效的。类似这种标题/描述内容中进行关键字查询业务,比较合适使用分词查询,这个功能HBase都无法提供满足。另外,在新零售查询业务中,为了提高用户体验,经常会提高搜索结果进行分类统计的需求,例如我们在电商网站中,搜索关键字“时尚”,在显示匹配此关键字结果的商品中,按照 衣服、电子、日用等类型进行了分类统计匹配结果,这样用户就可以选择对应的大类进行二次查询,快速查询到用户想要的商品,从而提高了用户体验。像这个功能,HBase也无法满足。

最终为了适应HBase系统的查询特点,对业务做了折中,只保留部分KV查询的业务,其他可以提高用户体验的各种查询业务被全部砍掉了。

总结下来,我们列出来了几个使用HBase进行查询业务设计时碰到的痛点:

  1. 无法满足任意条件组合查询
  2. 不能高效支持模糊查询
  3. 不支持关键字分词查询
  4. 不能高效支持多维度的排序/分页
  5. 不能对查询的结果集进行分类统计

云HBase全文索引服务,增强HBase检索能力

全文索引服务是为了增强HBase查询能力而设计,使得HBase除了强大的KV能力外,更加丰富了它的在复杂条件查询下的能力,具体抽象出来以下几个场景:

  1. 复杂条件任意查询
  2. 多维度排序
  3. 复杂条件分页
  4. 分词关键字查询
  5. 匹配结果集分类统计
  6. 常用min/max/avg/sum等stats统计

云HBase全文索引服务使用简单,只需要DDL阶段建立索引,后续自动进行数据索引同步,架构如下:

和自建的区别

功能云HBase启用全文索引自建HBase+indexer+solrHBase简单rowkey查询支持支持支持复杂查询支持支持不支持索引同步支持支持不支持乱序同步支持不支持———强一致支持不支持———xml动态列支持不支持———

另外,自建hbase+indexer+solr存在几个bug,导致很多用户反馈的自建这种架构丢数据现象;云HBase对此进行了许多bugfix和改进。

如何使用云HBase全文索引服务

云HBase全文索引服务的使用,启用此服务后,只需要简单DDL建立索引即可,插入同步无限管理,用户只需关注后续查询要使用HBase api/Solr api进行构建丰富的业务查询即可。下面我们来简单体验下整个流程。

开启服务

“全文索引服务”属于云HBase的免费扩展服务,自2019年1月25日后创建的云HBase实例控制台,实例左侧点击“全文索引服务”详情页进行服务开启即可,如下:

申请后的如下Solr访问地址以及WebUI连接,如图:

其中solr zk地址即可构造cloud solr client进行访问,此访问客户端自带负载均衡功能。Solr WebUI访问方式与云HBase WebUI访问一致,第一次访问是设置好用户密码与白名单,然后直接点上面的链接即可跳转到Solr的WebUI。

建立索引

  1. 下载索引管理客户端工具
wget http://public-hbase.oss-cn-hangzhou.aliyuncs.com/installpackage/solr-7.3.1-ali-1.0.tgztar zxvf solr-7.3.1-ali-1.0.tgz
  1. 修改solr-7.3.1-ali-1.0/bin/solr.in.sh文件的ZK_HOST如下:
ZK_HOST=zk1:2181,zk2:2181,zk3:2181/solr

zk地址即为上图控制台开通全文索引服务后的solr zk访问地址。

  1. 创建HBase表,开启replication同步机制
create 'solrdemo',{NAME=>'info', REPLICATION_SCOPE=> '1'}
  1. 创建Solr表democollection
  2. 第一步,修改并上传solrconfig.xml/schema,如果不需要修改,可使用demo默认config进行上传,如下:
solr-7.3.1-ali-1.0/bin/solr zk upconfig -d _democonfig -n democollection_config -z zk1:2181/solr

第二步,使用刚上传的配置创建democollection,如下:

curl "http://hostname:8983/solr/admin/collections?action=CREATE&name=democollection&numShards=1&replicationFactor=1&collection.configName=democollection_config"

其中hostname可以使用master3-1中缀的zk hostname进行替换。

  1. 配置HBase solrdemo表到Solr democollection表的字段映射索引关系
  2. 第一步,编辑index_conf.xml配置映射关系,例如:
<?xml version="1.0"?>

配置描述了hbase表solrdemo的 info:q2 info:3 分别映射成solr democollection里面的name_s和age_i 字段。并指定以string解析info:q2 列保存到name_s字段中,以int解析info:q3 保存到age_i中。其中solr collection的name_s、age_i是何种类型,是根据solr collection的配置觉得,默认采用动态类型推断,即根据collection字段的名字后缀判断类型进行存储。常见类型_i、_s、_l、_b、_f、_d分别对应int/string/long/boolean/float/double。当然,用户也可以直接指定字段类型。最后一个update_version_l为固定写法,保存document级别的最新更新时间。

第二步,使用工具将 index_conf.xml 设置关联hbase表solrdemo和solr表democollection的索引映射关系,命令如下:

solr-7.3.1-ali-1.0/bin/solr-indexer add  -n demoindex  -f indexer_conf.xml  -c democollection

到此,我们就完成了索引的关系映射,随后正常插入hbase即可,就不需要关心索引同步,它会自动同步hbase solrdemo表的对应字段到solr democollection表的对应字段中。如上例映射如下:

其中,HBase表的rowkey映射到Solr表里面的id字段。

查询检索

查询较为简单,依然完全兼容开源HBase API和Solr API的操作,根据业务使用solr进行条件查询,结果集中,id字段就是所有符合条件的hbase rowkey,我们只有这个id转换为rowkey,并使用HBase API读取属于这个行的原数据即可。流程图大致如下:

展望

  • 索引管理更简单易用
  • SQL入口接入全文索引服务
  • 全文引擎新一代更高效副本机制
  • 除了异步索引,同步索引也会后续支持

产品入口:

https://cn.aliyun.com/product/hbase​

使用全文索引服务帮助文档:

https://help.aliyun.com/document_detail/88404.html

hbase 查询_云HBase发布全文索引服务,轻松应对复杂查询相关推荐

  1. 云HBase发布全文索引服务,轻松应对复杂查询

    云HBase发布了"全文索引服务"功能,自2019年01月25日后创建的云HBase实例,可以在控制台免费开启此"全文索引服务"功能.使用此功能可以让用户在HB ...

  2. 网站域名过户查询_聚查教你怎么用域名批量查询工具查询网站历史和域名权重...

    购买老域名之前,要先查网站历史和域名权重,但是很多小编都找不到合适的域名批量查询工具,那么,聚查教你怎么用域名批量查询工具查询网站历史和域名权重. 一:域名批量查询工具查询网站历史和域名权重查询入口 ...

  3. tkmybatis 子查询_日均20亿流量:携程机票查询系统的架构升级

    携程机票查询系统,日均20亿流量,且要求高吞吐,低延迟的架构设计.于是,提升缓存的效率以及实时计算模块长尾延迟,成为制约机票查询系统性能的关键.本文是携程集团机票业务技术总监宋涛在「云加社区沙龙onl ...

  4. python摄像头识别快递单号查询_免费对接快递鸟api单号识别查询接口(python)

    由于自己网站需要对接一些物流查询快递,然后在网上搜了一圈发现快递鸟比较适合我 之前写快递api的时候,官网上只有php和.net的示例,而我使用python封装的相关功能踩了许多坑,才搞出来,分享一下 ...

  5. python课程水平测试成绩查询_学业水平测试成绩(学业水平考试成绩查询系统)

    有人说50~70 C等70~85 B85~100 A是么? 学业水平测试实行等级计分,分为4个等级,用A.B.C.D表示.技术科目测试等级为合格.不合格.2.必修学科等级计算方法:各科原始分满分为10 ...

  6. java手机号归属地查询_【原创】Java实现手机号码归属地查询

    网络上已经有很多的手机号码归属地查询的API接口,但是这些接口总是有一些大大小小的缺陷. 总结一下这些缺陷: 1.要直接将它的搜索框链接形式粘到自己的页面,点击查询的时候还要跳转到他们的网站来展示归属 ...

  7. mysql不同服务器数据库查询_不同服务器不同数据库两张表连接查询使用经验

    使用SQL语句连接查询位于两个不同的服务器不同的数据库中的两张表,最初将SQL语句写成以下形式select*fromProduct pinnerjoin opendatasource('SQLOLED ...

  8. python数据库模糊查询_原创:Python编写通讯录,支持模糊查询,利用数据库存储...

    1.要求 数据库存储通讯录,要求按姓名/电话号码查询,查询条件只有一个输入入口,自动识别输入的是姓名还是号码,允许模糊查询. 2.实现功能 可通过输入指令进行操作. (1)首先输入"add& ...

  9. java参数化查询_小博老师解析Java核心技术 ——JDBC参数化查询(二)

    [步骤阅读四]SQL注入 按照以上方式开发,确实已经完成了基本的用户登录业务需求,但是这么做的话可以会出现一个比较严重的问题,那就是容易被SQL注入.所谓SQL注入,就是在需要用户填写信息,并且这些信 ...

最新文章

  1. Docker官方Centos镜像下安装Elasticsearch【详细步骤】
  2. Socket编程 - 网络基础知识
  3. Mysql 查询一天中每半小时记录的数量
  4. P1445-[Violet]樱花【数学】
  5. 安装ubuntu出现花屏_电脑显卡花屏怎么办?电脑独立显卡花屏的原因和解决方法...
  6. 基于canvas的视频遮罩插件
  7. Greenplum 类型一致性使用规范 - 索引条件、JOIN的类型一致性限制
  8. Python 基础 —— str
  9. C# const, readonly, static readonly
  10. 公司-瑞幸咖啡:瑞幸咖啡
  11. 基于指纹识别技术的身份认证系统的设计与实现
  12. [论坛专贴]关于接口
  13. 算法——指定日期的星期推算
  14. 基于C++控制台(Windows平台)的一个植物大战僵尸小游戏
  15. [USACO17DEC]Greedy Gift Takers
  16. 2021年安全员-A证考试题库及安全员-A证报名考试
  17. sketchup转stl_skp怎么转化成stl,我用sketchUp建了模想3D打印
  18. tunel凋亡试剂盒说明书_自己翻译的罗氏tunel检测细胞凋亡试剂盒说明书
  19. 家庭云 海康威视 H90 硬盘数据恢复方法
  20. 用Python基础知识实现了一个在线的markdown编辑工具、基于Editor.md、Flask、Flask_SQLAlchemy、sm.ms

热门文章

  1. Mabatis(2) 全局配置文件
  2. [bzoj4568][Scoi2016]幸运数字
  3. 01.轮播图之四 :imageViews(2 或者 3 个imageview) 轮播
  4. hdoj--1716--排列2(暴力水题)
  5. 笔试 - 高德软件有限公司python问题 和 答案
  6. DataTable新增列设置DefaultValue问题。
  7. 百度AI快车道深圳实战班启动,用极致技术打造实用产品
  8. 手写及场景文字分析与识别的一些新尝试
  9. CV Code | 计算机视觉开源周报 20190604期
  10. 程序员工资过高吗?月薪20K属于基本水平?你看到的只是冰山一角