首页 > 其他分享 >Phoenix初探

Phoenix初探

时间:2023-03-17 14:35:56浏览次数:43  
标签:Phoenix 列族 创建 表中 索引 初探 HBase

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,索引列组成的。

本地索引适合写多读少的场景,因为索引数据和真实数据都是在同一张表中的。

本地索引的特点就是不管查询的数据索引表中有没有,都会先走索引,如下图所示。

 

覆盖索引

所谓覆盖索引就是,就是把原数据再索引表中也存储一份,这样仅扫描索引表就可以读取到我们所需要的全部数据,不必再对原表进行扫描,只有从索引表中拿不到的数据,才会去原表中获取,从而提高检索速度。

覆盖索引同样也会在HBase中创建一张真实的表,创建覆盖索引的命令如下,通过include关键字,将原表中我们需要的列写入到索引表中。

 覆盖索引的特点,只有基于索引列的查询才会走索引,否则全部扫描,另外能从索引中全部数据的话,就不会去原表再次读取数据。

删除索引

删除索引命令如下图所示。

 

 

标签:Phoenix,列族,创建,表中,索引,初探,HBase
From: https://www.cnblogs.com/zsrecord/p/17226696.html

相关文章

  • 电脑经常蓝屏的解决方案初探
    寒假办公电脑没怎么动。新学期来办公,一万多的电脑就开始是不是蓝屏,一天办公下来给你蓝过2-3次,就问你蓝瘦不蓝瘦。开始想着找LinQiu帮忙弄。后来不想麻烦人家。想着重装系......
  • Python爬虫初探
    准备部分0x01爬虫的简介和价值a.简介自动抓取互联网数据的程序,是基础技术之一b.价值快速提取网络中有价值的信息0x02爬虫的开发环境a.环境清单Python3.7开......
  • Caffeine高性能本地缓存框架初探
    通常情况下,为了提升服务性能,使用缓存框架是一个非常常见的选择。在Java语境下,经过我查阅,Caffeine被称作地标最强Java本地缓存框架。Caffeine是站在巨人(GuavaCache)的肩膀上,......
  • 初探富文本之CRDT协同实例
    初探富文本之CRDT协同实例在前边初探富文本之CRDT协同算法一文中我们探讨了为什么需要协同、分布式的最终一致性理论、偏序集与半格的概念、为什么需要有偏序关系、如何通......
  • 不背锅运维:k8s调度之初探nodeSelector和nodeAffinity
    写在开篇在k8s的调度中,有强制性的nodeSelector,节点亲和性nodeAffinity、Pod亲和性podAffinity、pod反亲和性podAntiAffinity。本篇先对nodeSelector和nodeAffinity做个初......
  • 【初探人工智能ChatGPT】2、雏形开始长成
    笔者初次接触人工智能领域,文章中错误的地方还望各位大佬指正!(【初探人工智能ChatGPT】2、雏形开始长成)【初探人工智能ChatGPT】2、雏形开始长成这篇文章主要介绍如何......
  • Java微基准测试神器JMH初探
    当我们编写一段Java代码之后,如果想知道代码性能如何,就需要进行一些快速的性能测试。当我们实现一个需求,面临2种及以上的方案,选择一种性能更好的方案时,也需要进行一些快速的......
  • WFP初探
    WFP初探参考资料https://www.cnblogs.com/XYDsoft/articles/16857933.htmlhttps://learn.microsoft.com/zh-cn/windows/win32/fwp/tcp-packet-flowshttps://bot-man-jl......
  • 初探数据增强
    这篇文章主要用来大概梳理数据增强的内容。以下内容部分包含我和chatGPT对话的提炼内容(有修改)总述当我们训练机器学习模型时,我们希望用尽可能多的数据来提高模型的性能。......
  • Quill编辑器实现原理初探
    简介从事前端开发的同学,对富文本编辑器都不是很陌生。但是大多数富文本编辑器都是开箱即用,很少会对其实现原理进行深入的探讨。假如静下心去细细品味,会发现想要做好一款富......