phoenix 索引重建的三种方式

举报
wangchao316 发表于 2020/06/29 16:45:26 2020/06/29
【摘要】 Phoenix索引重建的三种方式1.Alter index语句1.1 执行逻辑alter index idx_table on main_table rebuild首先sql语句通过antlr解析后,生成ExecutableAlterIndexStatement执行句柄。接下来要在MetaDataClient类中,进行索引的重建。接着在客户端会发送sql语句将system.catlog表...

Phoenix索引重建的三种方式

1.Alter index语句

1.1 执行逻辑

alter index idx_table on main_table   rebuild

首先sql语句通过antlr解析后,生成ExecutableAlterIndexStatement执行句柄。

接下来要在MetaDataClient类中,进行索引的重建。

接着在客户端会发送sql语句将system.catlog表中的索引的状态修改为PIndexState.BUILDING状态。

接下来分为同步重建和异步重建。

同步重建,会将索引表中已经有的索引数据清空。

然后构造一个upsert select语句,从主表中查出数据然后插入到索引表中。

等到执行完成后,由客户端下发更新索引状态的sql,来修改状态。

异步重建,只修改了索引表的状态为buildingbuilding异步重建的时间戳UPDATE_INDEX_REBUILD_ASYNC_STATE。需要接下来执行IndexTool工具来重建。(后面会讲到这个时间戳的用处)

1.2 优缺点

同步重建客户端会一直等待,并且upsert select语句执行比较慢,而且同时消耗服务端大量的查询写入资源,会影响其他查询写入效率。

2.Index Tool 工具

2.1 执行逻辑

hbase   org.apache.phoenix.mapreduce.index.IndexTool --data-table   RUN_SUBCONLOT_STAGE_ECID --index-table IDX_RUN_SUBCONLOT_STAGE_ECID   --output-path /user/mds/phoenix/idx_subconlot

 

其中有一个参数"pr", "partial-rebuild"。该参数指定是否部分重建,默认是false,如果指定true,则从disable或者building状态的时间戳开始重建,此时就用到了第一种方法的alter index异步执行的时间戳。

工具是启动一个mapreduce任务,将数据表中的数据插入到索引中。

数据插入在map中进行,reduce只是修改了索引的状态为active

2.2 优缺点

启动MR,需要消耗yarn资源。在大量数据进行索引补建的时候,建议使用此方法。

3. 自动补建索引

3.1 执行逻辑

自动补建索引线程在system.catlog表的第一个region上启动,每隔30分钟跑一次,参数可配。

扫描所有数据表的索引表状态,状态为disable,和inactive的才进行补建。

并且会检测索引表的所有region是否上线,如果有不上线的也不进行补建。

还要检测索引disable时间距离当前时间是否超过半小时(可配),超过了也不补建。

disable时间戳开始算起,到当前时间扫描。

构造scan扫描数据表,在rscp上进行索引数据的插入。

3.2 优缺点

自动补建索引机制,限制太多,比如只补建disableinactive状态下的索引。

补建是顺序同步补建,如果disable状态的索引表太多,补建将会很慢。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。