基于Phoenix对HBase建索引
参考:
操作1,执行查询,如下:
: jdbc:phoenix:node3::/hbase> SELECT * FROM ASSET_RECORD WHERE ASSET_ID='设345-1149640126759047168'; +-----------------------------------+---------------------------+-------------------+---------------+-----------------------------------+--------+ | ID | ASSET_ID | MANAGEMENT_TABLE | INTRODUCTION | MANAGEMENT_ID | | +-----------------------------------+---------------------------+-------------------+---------------+-----------------------------------+--------+ | 0292ebbfdf3e4d97a6e9fc930ed126d4 | 设345- | ASSET_SEAL | | dd9ff0fc0ad4486bb0812e78fa53ce0e | - | +-----------------------------------+---------------------------+-------------------+---------------+-----------------------------------+--------+ row selected (0.081 seconds)
操作2,重复以上查询,如下:
: jdbc:phoenix:node3::/hbase> SELECT * FROM ASSET_RECORD WHERE ASSET_ID='设345-1149640126759047168'; +-----------------------------------+---------------------------+-------------------+---------------+-----------------------------------+--------+ | ID | ASSET_ID | MANAGEMENT_TABLE | INTRODUCTION | MANAGEMENT_ID | | +-----------------------------------+---------------------------+-------------------+---------------+-----------------------------------+--------+ | 0292ebbfdf3e4d97a6e9fc930ed126d4 | 设345- | ASSET_SEAL | | dd9ff0fc0ad4486bb0812e78fa53ce0e | - | +-----------------------------------+---------------------------+-------------------+---------------+-----------------------------------+--------+ row selected (0.077 seconds)
操作3,使用explain重复以上查询,如下:
: jdbc:phoenix:node3::/hbase> explain SELECT * FROM ASSET_RECORD WHERE ASSET_ID='设345-1149640126759047168'; +----------------------------------------------------------------------------------------------------+-----------------+----------------+--------+ | PLAN | EST_BYTES_READ | EST_ROWS_READ | EST_I | +----------------------------------------------------------------------------------------------------+-----------------+----------------+--------+ | CLIENT -CHUNK ROWS BYTES PARALLEL -WAY ROUND ROBIN FULL SCAN OVER ASSET_RECORD | | | | | SERVER FILTER BY ASSET_ID = | | | +----------------------------------------------------------------------------------------------------+-----------------+----------------+--------+ rows selected (0.015 seconds)
操作4,在表上建索引,如下:
: jdbc:phoenix:node3::/hbase> create index IDX_ASSET_RECORD on ASSET_RECORD(ASSET_ID,MANAGEMENT_TABLE); , rows affected (6.25 seconds)
操作5,强制使用索引执行查询,如下:
: jdbc:phoenix:node3::/hbase> SELECT /*+ INDEX(ASSET_RECORD IDX_ASSET_RECORD)*/ * FROM ASSET_RECORD WHERE ASSET_ID='设345-1149640126759047168; +-----------------------------------+---------------------------+-------------------+---------------+-----------------------------------+--------+ | ID | ASSET_ID | MANAGEMENT_TABLE | INTRODUCTION | MANAGEMENT_ID | | +-----------------------------------+---------------------------+-------------------+---------------+-----------------------------------+--------+ | 0292ebbfdf3e4d97a6e9fc930ed126d4 | 设345- | ASSET_SEAL | | dd9ff0fc0ad4486bb0812e78fa53ce0e | - | +-----------------------------------+---------------------------+-------------------+---------------+-----------------------------------+--------+ row selected (0.058 seconds)
操作6,强制使用索引执行查询,如下:
: jdbc:phoenix:node3::/hbase> SELECT /*+ INDEX(ASSET_RECORD IDX_ASSET_RECORD)*/ * FROM ASSET_RECORD WHERE ASSET_ID='设345-1149640126759047168'; +-----------------------------------+---------------------------+-------------------+---------------+-----------------------------------+--------+ | ID | ASSET_ID | MANAGEMENT_TABLE | INTRODUCTION | MANAGEMENT_ID | | +-----------------------------------+---------------------------+-------------------+---------------+-----------------------------------+--------+ | 0292ebbfdf3e4d97a6e9fc930ed126d4 | 设345- | ASSET_SEAL | | dd9ff0fc0ad4486bb0812e78fa53ce0e | - | +-----------------------------------+---------------------------+-------------------+---------------+-----------------------------------+--------+ row selected (0.033 seconds)
操作7,使用explain强制使用索引执行查询,如下:
: jdbc:phoenix:node3::/hbase> explain SELECT /*+ INDEX(ASSET_RECORD IDX_ASSET_RECORD)*/ * FROM ASSET_RECORD WHERE ASSET_ID='设345-114964012679047168'; +------------------------------------------------------------------------------------------------------------------+-----------------+-----------+ | PLAN | EST_BYTES_READ | EST_ROWS_ | +------------------------------------------------------------------------------------------------------------------+-----------------+-----------+ | CLIENT -CHUNK ROWS BYTES PARALLEL -WAY ROUND ROBIN FULL SCAN OVER ASSET_RECORD | null | null | | SKIP-SCAN-JOIN TABLE | null | null | | CLIENT -CHUNK PARALLEL -WAY ROUND ROBIN RANGE SCAN OVER IDX_ASSET_RECORD ['设345-1149640126759047168'] | null | null | | SERVER FILTER BY FIRST KEY ONLY | null | null | | DYNAMIC SERVER FILTER BY .$) | null | null | +------------------------------------------------------------------------------------------------------------------+-----------------+-----------+ rows selected (0.045 seconds)
操作8,删除索引,如下:
: jdbc:phoenix:node3::/hbase> drop index IDX_ASSET_RECORD on ASSET_RECORD; No rows affected (3.688 seconds)
计算操作1和操作2的平均执行时间,建索引后,计算操作5和操作6的平均执行时间,经比较发现使用索引确实提高了查询的速度。
Phoenix具有索引同步更新机制,增删改一条或多条数据以后,索引会自动更新;但是,如果原来的表增加了字段,那就需要更新建在表上的索引。
表的属性越多,条目越多,建索引节约的时间越多,如下是82个属性和195821条记录的表:
: jdbc:phoenix:node3::/hbase> SELECT COUNT(*) FROM ASSET_NORMAL; +-----------+ | COUNT() | +-----------+ | | +-----------+ row selected (4.54 seconds) : jdbc:phoenix:node3::/hbase> create index IDX_ASSET_NORMAL on ASSET_NORMAL(ASSET_ID,ASSET_NAME,USER_ID); , rows affected (8.887 seconds) : jdbc:phoenix:node3::/hbase> SELECT /*+ INDEX(ASSET_NORMAL IDX_ASSET_NORMAL)*/ * FROM ASSET_NORMAL WHERE ASSET_ID='仪1-1151470269278326784'; +-----------------------------------+-------------------------+-------------+------------------------+--------------------------+----------------+ | ID | ASSET_ID | ASSET_NAME | ASSET_FIRST_DEGREE_ID | ASSET_FIRST_DEGREE_NAME | ASSET_SECOND_D | +-----------------------------------+-------------------------+-------------+------------------------+--------------------------+----------------+ | 002e028151e24b07a21e0a0e9ce7f74c | 仪1- | 测量仪器 | | 仪表 | | +-----------------------------------+-------------------------+-------------+------------------------+--------------------------+----------------+ row selected (0.209 seconds) : jdbc:phoenix:node3::/hbase> SELECT * FROM ASSET_NORMAL WHERE ASSET_ID='仪1-1151470269278326784'; +-----------------------------------+-------------------------+-------------+------------------------+--------------------------+----------------+ | ID | ASSET_ID | ASSET_NAME | ASSET_FIRST_DEGREE_ID | ASSET_FIRST_DEGREE_NAME | ASSET_SECOND_D | +-----------------------------------+-------------------------+-------------+------------------------+--------------------------+----------------+ | 002e028151e24b07a21e0a0e9ce7f74c | 仪1- | 测量仪器 | | 仪表 | | +-----------------------------------+-------------------------+-------------+------------------------+--------------------------+----------------+ row selected (4.306 seconds)
参考:
https://my.oschina.net/puwenchao/blog/1935302
基于Phoenix对HBase建索引的更多相关文章
- hbase建索引的两种方式
转载自http://blog.csdn.net/ryantotti/article/details/13295325 在二级索引的实现技术上一般有几个方案: 1. 表索引 使用单独的hbas ...
- Spark教程——(6)Spark-shell基于Phoenix访问HBase数据
package statistics import common.util.timeUtil import org.apache.spark.{SparkConf, SparkContext} imp ...
- phoenix中添加二级索引
Phoenix创建Hbase二级索引 官方文档 1. 配置Hbase支持Phoenix创建二级索引 1. 添加如下配置到Hbase的Hregionserver节点的hbase-site.xml ...
- phoenix连接hbase数据库,创建二级索引报错:Error: org.apache.phoenix.exception.PhoenixIOException: Failed after attempts=36, exceptions: Tue Mar 06 10:32:02 CST 2018, null, java.net.SocketTimeoutException: callTimeou
v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...
- HBase之八--(2):HBase二级索引之Phoenix
1. 介绍 Phoenix 是 Salesforce.com 开源的一个 Java 中间件,可以让开发者在Apache HBase 上执行 SQL 查询.Phoenix完全使用Java编写,代码位于 ...
- 「从零单排HBase 12」HBase二级索引Phoenix使用与最佳实践
Phoenix是构建在HBase上的一个SQL层,能让我们用标准的JDBC APIs对HBase数据进行增删改查,构建二级索引.当然,开源产品嘛,自然需要注意“避坑”啦,阿丸会把使用方式和最佳实践都告 ...
- 通过phoenix在hbase上创建二级索引,Secondary Indexing
环境描述: 操作系统版本:CentOS release 6.5 (Final) 内核版本:2.6.32-431.el6.x86_64 phoenix版本:phoenix-4.10.0 hbase版本: ...
- Hadoop生态圈-phoenix(HBase)的索引配置
Hadoop生态圈-phoenix(HBase)的索引配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 创建索引是为了优化查询,我们可以在phoenix上配置索引方式. 一.修改 ...
- Phoenix系列:二级索引(1)
Phoenix使用HBase作为后端存储,对于HBase来说,我们通常使用字典序的RowKey来快速访问数据,除此之外,也可以使用自定义的Filter来搜索数据,但是它是基于全表扫描的.而Phoeni ...
随机推荐
- 2.1.FastDFS-单机拆分版-调度器安装配置
Centos610系列配置 我们在Centos610FastDFS单机模式-FastDFS安装 中已经完成了FastDFS的安装,接下来我们进行FastDFS调度器的安装. 1.找到FastDFS配置 ...
- leetcode菜鸡斗智斗勇系列(9)--- Range Sum of BST
1.原题: https://leetcode.com/problems/range-sum-of-bst/ Given the root node of a binary search tree, r ...
- 用python来更改windows开机密码
今天教大家用python脚本来控制小伙伴们windows电脑的开机密码.没错就是神不知鬼不觉,用random()随机生成的密码,只有你自己知道哦~ 代码呢分两部分,一部分是client端跟server ...
- 【代码总结】PHP之会话跟踪技术
有些时候感觉自己学习的效率好低,一套教程一本书,反复听,反复看,反复敲代码.自学这条路真的是很艰难,在任何事情都没有成功之前都很枯燥乏味.自学的过程中总会遇到很多问题,有时候连错误的原因都找不出来,那 ...
- 【转载】IntelliJ IDEA配置JUnit进行单元测试
前提条件 安装JDK,并配置好环境变量 工程已解决JUnit依赖关系(pom.xml) IDEA中JUnit配置 IDEA自带一个JUnit插件,打开Settings窗口搜索junit,如图: 图 ...
- 通过UA实现手机端电脑端的分离!(重点)
实现Nginx区分PC和手机访问不同的网站是物理上完全隔离的两套网站(一套手机端.一套pc端) 这样带来的好处pc端和移动端的内容可以不一样,移动版网站不需要包含特别多内容.只要包含必要的文字和较小的 ...
- JavaScript的发展史
一.JavaScript发展历程 1. 诞生 JavaScript因互联网而生,紧跟浏览器的发展而发展. 1990年,欧洲核能研究所(CERN)科学家在互联网(Internet)基础上,发明了 ...
- Python3.5学习之旅——day3
本节内容: 1.字符串操作 2.字典操作 3.集合 4.文件操作 5.字符编码与转码 6.函数与函数式编程 一.字符串操作 name='kobe' name.capitalize() 首字母大写 na ...
- linux操作系统及内核
自己的一点总结,把知识重新编码~ 一.操作系统概述 在Richard Stevens的unix环境高级编程中这样定义“它控制计算机硬件资源,提供程序运行环境.一般而言我们称这种软件为内核(kernel ...
- SpringBoot与Jpa入门
一.JPA简介 目前JPA主要实现由hibernate和openJPA等. Spring Data JPA 是Spring Data 的一个子项目,它通过提供基于JPA的Repository极大了减少 ...