Phoenix性能优化
目录:
1、建表优化
2、二级索引
3、并行处理
1.建表优化
- Salting 翻译成中文是加盐的意思,本质是在hbase的rowkey的byte数组的第一个字节位置设定一个系统生成的byte值, 这个byte值是由主键生成rowkey的byte数组做一个哈希算法,计算得来的。Salting之后可以把数据分布到不同的region上,这样有利于phoenix并发的读写操作。 示例:CREATE TABLE TEST (HOST VARCHAR NOT NULL PRIMARY KEY, DESCRIPTION VARCHAR) SALT_BUCKETS=16
- Pre-split 这个就是HBase的预分区了,在建phoenix表时,可以精确的指定要根据什么值来做预分区 示例: CREATE TABLE TEST (HOST VARCHAR NOT NULL PRIMARY KEY, DESCRIPTION VARCHAR) SPLIT ON ('CS','EU','NA')
- 使用多个列族,在创建phoenix表是可以指定列所在的列族 示例: CREATE TABLE TEST (MYKEY VARCHAR NOT NULL PRIMARY KEY, A.COL1 VARCHAR, A.COL2 VARCHAR, B.COL3 VARCHAR)
- 在数据量大的表上使用压缩算法来提高性能 GZ,lzo等 示例: CREATE TABLE TEST (HOST VARCHAR NOT NULL PRIMARY KEY, DESCRIPTION VARCHAR) COMPRESSION='GZ'
2.二级索引
Phoenix的二级索引从2.1版本开始支持可变和不可变(数据插入之后不可更新)数据了,之前的版本只支持不可变的数据,我们现在使用的版本是2.2.2是支持二级索引的,我们可以做一些尝试。
可以通过explain select … 来看phoniex在执行sql时是否用上了二级索引。
3.并行
Phoenix会将一个聚合查询分成多个Scan,然后将这些Scan分配给phoenix自定义的hbase协处理器,这些协处理器可以在服务器端并行执行来提高查询性能。平衡的拆分表是Phoenix获得高效查询的最重要因素之一,这包括将相等大小的分区平均分配到不同的region server上。这个工具http://www.sentric.ch/blog/hbase-split-visualisation-introducing-hannibal 可以帮助我们监控hbase表分区的情况。表中的数据在各个region sever上均匀分布可以保证每一个phoenix线程处理的数据量相当,这样就可以减少查询的等待时间。
在客户端可以通过phoenix.query.targetConcurrency 和 phoenix.query.maxConcurrency 来控制查询如何来拆分扫描。并行查询最好可以将查询scan的切分和表数据的region切分对齐。如果扫描很不均匀,就需要用多个线程来处理数据量较大的分区扫描。
并行执行扫描时的切分点定义如下,我们假设:
t 是目标的并发数
m 是最大的并发数
r 是我们要扫描的分区数
if r >= t |
可以根据客户端机器的内核数和集群的大小,来调大phoenix.query.threadPoolSize, phoenix.query.queueSize, phoenix.query.maxConcurrency, 和 phoenix.query.targetConcurrency的值,允许更多的线程做并行的查询,来降低延迟。
但是这个方法也并非没有限制,最大的问题是phoenix没有足够的信息来拆分region。 如果查询结果跨越很多region,这没有问题,因为region中总会有一些大小相差不多的region,然而如果查询仅仅涉及到少数几个region,可能就会有问题
Phoenix性能优化的更多相关文章
- 01.SQLServer性能优化之----强大的文件组----分盘存储
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 文章内容皆自己的理解,如有不足之处欢迎指正~谢谢 前天有学弟问逆天:“逆天,有没有一种方 ...
- 03.SQLServer性能优化之---存储优化系列
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 概 述:http://www.cnblogs.com/dunitian/p/60413 ...
- Web性能优化:What? Why? How?
为什么要提升web性能? Web性能黄金准则:只有10%~20%的最终用户响应时间花在了下载html文档上,其余的80%~90%时间花在了下载页面组件上. web性能对于用户体验有及其重要的影响,根据 ...
- Web性能优化:图片优化
程序员都是懒孩子,想直接看自动优化的点:传送门 我自己的Blog:http://cabbit.me/web-image-optimization/ HTTP Archieve有个统计,图片内容已经占到 ...
- C#中那些[举手之劳]的性能优化
隔了很久没写东西了,主要是最近比较忙,更主要的是最近比较懒...... 其实这篇很早就想写了 工作和生活中经常可以看到一些程序猿,写代码的时候只关注代码的逻辑性,而不考虑运行效率 其实这对大多数程序猿 ...
- JavaScript性能优化
如今主流浏览器都在比拼JavaScript引擎的执行速度,但最终都会达到一个理论极限,即无限接近编译后程序执行速度. 这种情况下决定程序速度的另一个重要因素就是代码本身. 在这里我们会分门别类的介绍J ...
- 02.SQLServer性能优化之---牛逼的OSQL----大数据导入
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 上一篇:01.SQLServer性能优化之----强大的文件组----分盘存储 http ...
- C++ 应用程序性能优化
C++ 应用程序性能优化 eryar@163.com 1. Introduction 对于几何造型内核OpenCASCADE,由于会涉及到大量的数值算法,如矩阵相关计算,微积分,Newton迭代法解方 ...
- Android性能优化之利用LeakCanary检测内存泄漏及解决办法
前言: 最近公司C轮融资成功了,移动团队准备扩大一下,需要招聘Android开发工程师,陆陆续续面试了几位Android应聘者,面试过程中聊到性能优化中如何避免内存泄漏问题时,很少有人全面的回答上来. ...
随机推荐
- selenium的元素定位-iframe
# name = top-frame # 如果iframe有name属性 或 id属性则 可以直接在frame种填写 # 如果没有name和id属性 frame() 可以接受elementOBj el ...
- nginx 在浏览器端保持cookie 一致
一般来说,我们在java中都通过如下代码进行用户登录后的服务端注册,并且在用户下次请求时无需再登陆一遍,这就是Servlet的Session.使用了这种Session策略,那么Web容器比如tomca ...
- Kotlin——中级篇(一):类(class)详解
在任何一门面向对象编程的语言里,类(class)是非常基础.但也是非常重要的一项组成,通俗的说就是万般皆对象,而所说的对象就是我们生成的类.Kotlin也是如此,下面详细为大家介绍Kotlin中的类的 ...
- n++ ++n
n = 100 + m++ n = 100 +m; ++m n = 100 + ++m; ++m; n = 100 +m ;
- Cocos2d-x Lua Node与Node层级架构
Cocos2d-x Lua采用层级(树形)结构管理场景.层.精灵.菜单.文本.地图和粒子系统等节点(Node)对象.一个场景包含了多个层,一个层又包含多个精灵.菜单.文本.地图和粒子系统等对象.层级结 ...
- 数组中binarySearch 中小小的误区! 用的时候大家要注意点
- C#设计模式-单实例
单例模式就是保证在整个应用程序的生命周期中,在任何时刻,被指定的类只有一个实例,并为客户程序提供一个获取该实例的全局访问点. 1.经典的模式 namespace singleClass { class ...
- Oracle 12c 读书笔记(二):Oracle数据库体系结构
以11g来分析 数据库实例包括:SGA和一系列后台管理.监控简称 数据库包括三种文件:数据文件.控制文件.重做日志文件 数据库实例和数据库是Orale数据库体系的核心部分 Oracle服务器和实例 实 ...
- 怎样使用Chrome模拟手机浏览器測试移动端网站
作者:zhanhailiang 日期:2014-10-10 环境说明: Chrome 37.0.2062.124 m 1. 通过[菜单→工具→开发人员工具|Javascript控制台]或[快捷键Ctr ...
- mybatis-generator和TKmybatis的结合使用
mybatis-generator可以自动生成mapper和entity文件,mybatis-generator有三种用法:命令行.eclipse插件.maven插件.这里使用的是maven插件方式, ...