当前位置: 首页 > article >正文

phoenix 使用技巧

好记忆不如烂笔头,能记下点东西,就记下点,有时间拿出来看看,也会发觉不一样的感受.

目录

1.什么是Phoenix

2.Phoniex架构

3.基本使用

3.1 建表

3.2 建索引

3.3 select查询

4.最佳实践

4.1 大小写问题

4.2 加盐注意事项

4.3 慎用扫全表、OR、Join和子查询

4.4 Phoenix不支持复杂查询

4.5 Phoenix不支持复杂分析

4.6 Phoenix是否支持映射已经存在的HBase表?

5.使用规范


Phoenix是构建在HBase上的一个SQL层,能让我们用标准的JDBC APIs对HBase数据进行增删改查,构建二级索引。当然,开源产品嘛,自然需要注意“避坑”啦,阿丸会把使用方式和最佳实践都告诉你。

1.什么是Phoenix

「从零单排HBase 12」HBase二级索引Phoenix使用与最佳实践

 

Phoenix完全使用Java编写,将SQL查询转换为一个或多个HBase扫描,并编排执行以生成标准的JDBC结果集。Phoenix主要能做以下这些事情:

  • 将SQL查询编译为HBase扫描scan
  • 确定scan的开始和停止位置
  • 将scan并行执行
  • 将where子句中的谓词推送到服务器端进行过滤
  • 通过服务器端挂钩(称为协处理器co-processors)执行聚合查询

除了这些之外,phoenix还进行了一些有趣的增强,以进一步优化性能:

  • 二级索引,以提高非行键查询的性能(这也是我们引入phoenix的主要原因)
  • 跳过扫描过滤器来优化IN,LIKE和OR查询
  • 可选的对行键进行加盐以实现负载均衡,避免热点

2.Phoniex架构

Phoenix结构上划分为客户端和服务端两部分:

  • 客户端包括应用程序开发,将SQL进行解析优化生成QueryPlan,进而转化为HBase Scans,调用HBase API下发查询计算请求,并接收返回结果;
  • 服务端主要是利用HBase的协处理器,处理二级索引、聚合及JOIN计算等。

Phoiex的旧版架构采用重客户端的模式,在客户端执行一系列的parser、query plan的过程,如下图所示。

「从零单排HBase 12」HBase二级索引Phoenix使用与最佳实践

 

这种架构存在使用上的缺陷:

  • 应用程序与Phoenix core绑定使用,需要引入Phoenix内核依赖,一个单独Phoenix重客户端集成包已达120多M;
  • 运维不便,Phoenix仍在不断优化和发展,一旦Phoenix版本更新,那么应用程序也需要对应升级版本并重新发布;
  • 仅支持Java API,其他语言开发者不能使用Phoenix。

因此,社区进行改造,引入了新的“轻客户端”模式。

 

「从零单排HBase 12」HBase二级索引Phoenix使用与最佳实践

 

轻客户端架构将Phoenix分为两部分:

  • 客户端是用户最小依赖的JDBC驱动程序,与Phoenix依赖进行解耦,支持Java、Python、Go等多种语言客户端;
  • 将QueryServer部署为一个独立的的HTTP服务,接收轻客户端的请求,对SQL进行解析、优化、产生执行计划;

3.基本使用

传送门:https://phoenix.apache.org/language/index.html(平时多参考官方的语法)

http://www.lryc.cn/news/2417688.html

相关文章:

  • Lombok常用注解总结
  • (P33-P35)lambda表达式语法,lambda表达式注意事项,lambda表达式本质
  • mariaDB(mysql数据库)-安装配置和使用
  • 理解:QPS、TPS、RT、吞吐量
  • MinGW安装教程
  • Java中 static 关键字相关的用法
  • ADB 安装 + 打驱动全教程
  • 不同的存储库(Repository)模式实现
  • 开源项目 `signature` 使用教程
  • GCC详解-Binutils工具之strip
  • 消息传递机制之Handler使用总结
  • 一分钟快速过安卓四大组件——Activity篇
  • 2024年最新GIMP(Linux下的Photoshop)-KOS安装教程_linux photoshop
  • 19 张图概览 Spring Cloud(收藏夹吃亏系列)
  • linux后台运行nohup | 进程查看、终止 | linux基础命令记录
  • Mybatis-Plus理解及使用
  • 前端进阶之路——域名(domain)
  • win11下配置visual studio 2022+PCL1.13.0
  • 50个常用的 Numpy 函数详解!
  • kali简介
  • Java | final关键字快速上手【通俗易懂,看这篇就够了】
  • UUID介绍与生成方法
  • fps游戏战斗相关漫谈(五)
  • 安卓工程师必须了解的Gradle知识
  • ASCII码对照表(包括十六进制、十进制和字符)
  • 如何使用Chat GPT
  • 适合小白入门!Sqlite数据库学习(附操作过程截图)
  • 大白话讲vuex
  • 随记——ELK部署
  • Linux whois命令教程:查询域名所有者信息(附案例详解和注意事项)