hbase二级索引

1.配置

  • 添加如下配置到HBase的HRegionserver节点的hbase-site.xml

  <!-- phoenix regionserver 配置参数-->
    <property>
        <name>hbase.regionserver.wal.codec</name>
        <value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
    </property>
​
    <property>
        <name>hbase.region.server.rpc.scheduler.factory.class</name>
        <value>org.apache.hadoop.hbase.ipc.PhoenixRpcSchedulerFactory</value>
        <description>Factory to create the Phoenix RPC Scheduler that uses separate queues for index and metadata updates</description>
    </property>
​
    <property>
        <name>hbase.rpc.controllerfactory.class</name>
        <value>org.apache.hadoop.hbase.ipc.controller.ServerRpcControllerFactory</value>
        <description>Factory to create the Phoenix RPC Scheduler that uses separate queues for index and metadata updates</description>
    </property>

2.全局二级索引

  •  创建全局索引时,会在HBase中建立一张新表
  • 写数据要更新索引表,而索引表是分布在不同的数据节点上的,跨节点的数据传输带来了较大的性能消耗。适合读多写少的场景

2.1.创建单个字段的全局索引

CREATE INDEX my_index ON my_table (my_col);
'如果想查询的字段不是索引字段的话索引表不会被使用,也就是说不会带来查询速度的提升

 

2.2.创建携带其他字段的全局索引

CREATE INDEX my_index ON my_table (v1) INCLUDE (v2);

20200629011141.png

3.局部二级索引

  • 索引数据和数据表的数据是存放在同一张表中(且是同一个Region)

  • 适用于写操作频繁的场景

CREATE LOCAL INDEX my_index ON my_table (my_column);

20200629011154.png

4.局部和全局的选择

4.1. 两种索引的介绍
全局索引:会单独创建一个新的文件,默认是一个region,同时会采用默认的region split的切分规则;
局部索引:在原数据表插入数据,索引数据和数据表的数据是存放在同一张表中(且是同一个Region)。

4.2. 在需要创建索引时,我们是选择创建哪种索引呢?
创建索引以后,每次数据的改动

都需要更新索引表。
两种索引选择的规则如下:
'情况1':写操作频繁,则选择局部索引,因为数据和索引在同一张表的同一个region中,所以更新索引的数据就不需要跨节点,避免了在写操作的时候往不同服务器的索引表中写索引带来的额外开销;但是这种情况读数据时,因为索引和数据在一个文件中,读索引时效率就会变低
'情况2': 读操作频繁时,则选择全局索引,因为全局索引中可以直接定位到数据,效率高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值