Hbase 整合 Phoenix 之二级索引

Hbase 整合 Phoenix 之二级索引

Phoenix 的一级索引就是它的主键,对应的就是 hbase 的 rowkey,这个是默认的机制,我们不需要额外操作。

故二级索引就是非主键 /rowkey 列的索引。创建二级索引的目的就是为了加快查询速度。

Hbase 只能基于 rowkey 去查询数据,要是基于其他列查询数据就只能使用 filter 的功能,但是效果十分不好。他是全表扫描,性能比较差。通过 Phoenix 创建索引可以避免全表扫描,因此就增加了查询的效率。

Phoenix 二级索引需要 Hbase 的配置支持,添加如下配置到 HBase 的 HRegionserver 节点的 hbase-site.xml。

<!-- phoenix regionserver 配置参数-->
<property>
    <name>hbase.regionserver.wal.codec</name>
    <value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
</property>

创建索引

-- 执行的时候不要加分号; ,否则无法执行
CREATE INDEX IDX_ods_anylink_pro_history_pid2 ON "hs_spin"."ods_anylink_pro_history"("cf"."producer_id")
create index idx_energy_hid on "hs_spin"."dwd_energy_platforms"("cf"."host_id") ;
create index idx_energy_bc on "hs_spin"."dwd_energy_platforms"("cf"."class_order") ;

全局索引:适合多读少写的业务场景,因为写数据的时候会消耗大量开销,因为索引表也要更新,而索引表是分布在不同的数据节点上的,跨节点的数据传输带来了较大的性能消耗。在读数据的时候 Phoenix 会选择索引表来降低查询消耗的时间。

本地索引:适用于写操作频繁的场景。索引数据和数据表的数据是存放在同一张表中(且是同一个 Region),避免了在写操作的时候往不同服务器的索引表中写索引带来的额外开销。

参考

http://www.fblinux.com/?p=2813
https://www.52dianzi.com/category/article/37/387096.html

posted @ 2023-08-23 16:46  三里清风18  阅读(101)  评论(0)    收藏  举报