Phoenix简单介绍
Phoenix是HBase的sql层,基于Phoenix可以通过sql命令操作HBase,降低了学习HBase的成本,同时方便与代码迁移,之前面向关系型数据库的代码,只需要换下数据库的连接及驱动即可。
通过Phoenix创建表,必须制定一个主键,内部实际上会以该主键作为rowkey,在HBase中创建一张表。
在基于Phoenix创建表时,如果没有指定列族的话,会默认自动创建一个名字为0列族。
同时也可以指定列族,指定列族的时候需要注意,主键列不能指定,否则会报错。
# 会默认将这三列均放置在列族0下 create table test (id integer, name varchar(10), age integer, constraint my_pk primary key (id)); # 指定列族名 create table test ( "id" integer, "person"."name" varchar(10), "person"."age" integer, constraint my_pk primary key (id));
Phoenix最有用功能就是为HBase表创建二级索引。在Phoenix表没有二级索引,我们又没有基于主键进行查询的时候,会进行全表扫描,如下图所示。
但是通过Phoenix创建二级索引,可以避免全表扫描,从而提高检索速度。
Phoenix二级索引
基于Phoenix可以创建二级索引,二级索引主要由以下几种类型:
全局索引
创建全局索引的命令如下图所示。
创建的全局索引,会在HBase中创建一个真实的表,该索引表的rowkey是原表的索引列和rowkey组合而来的。
当我们对原表进行select查询时,只有索引列中包含要查询的列时,才会走索引,否则走全表扫描。
全局索引适合用于读多写少的场景,因为索引表是一个真实存在的表,因此每次的更新都会连带着对全局索引表的更新。
本地索引
创建本地索引的命令如下图所示。
本地索引的特点是,不会额外在hbase中创建一张新表,而是在原表中新增一行,用于存储索引数据,如下图所示。
新增的这行数据的rowkey是由原表中的rowkey,索引列组成的。
本地索引适合写多读少的场景,因为索引数据和真实数据都是在同一张表中的。
本地索引的特点就是不管查询的数据索引表中有没有,都会先走索引,如下图所示。
![](/i/l/?n=23&i=blog/1806623/202303/1806623-20230317142323220-1505388196.png)
覆盖索引
所谓覆盖索引就是,就是把原数据再索引表中也存储一份,这样仅扫描索引表就可以读取到我们所需要的全部数据,不必再对原表进行扫描,只有从索引表中拿不到的数据,才会去原表中获取,从而提高检索速度。
覆盖索引同样也会在HBase中创建一张真实的表,创建覆盖索引的命令如下,通过include
关键字,将原表中我们需要的列写入到索引表中。
覆盖索引的特点,只有基于索引列的查询才会走索引,否则全部扫描,另外能从索引中全部数据的话,就不会去原表再次读取数据。
删除索引
删除索引命令如下图所示。
标签:Phoenix,列族,创建,表中,索引,初探,HBase From: https://www.cnblogs.com/zsrecord/p/17226696.html