目录:

  1、建表优化

  2、二级索引

  3、并行处理

1.建表优化

  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
  2. Pre-split 这个就是HBase的预分区了,在建phoenix表时,可以精确的指定要根据什么值来做预分区 示例: CREATE TABLE TEST (HOST VARCHAR NOT NULL PRIMARY KEY, DESCRIPTION VARCHAR) SPLIT ON ('CS','EU','NA')
  3. 使用多个列族,在创建phoenix表是可以指定列所在的列族 示例: CREATE TABLE TEST (MYKEY VARCHAR NOT NULL PRIMARY KEY, A.COL1 VARCHAR, A.COL2 VARCHAR, B.COL3 VARCHAR)
  4. 在数据量大的表上使用压缩算法来提高性能 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
使用表的region边界
Else if r/2 > t
将每个region都拆分成s份,s满足公式: s = max(x) x满足 s * x < m
Else
将每个region拆分成s份,s满足公式:s = max(x) x满足 s * x < t

    可以根据客户端机器的内核数和集群的大小,来调大phoenix.query.threadPoolSize, phoenix.query.queueSize, phoenix.query.maxConcurrency, 和 phoenix.query.targetConcurrency的值,允许更多的线程做并行的查询,来降低延迟。

  但是这个方法也并非没有限制,最大的问题是phoenix没有足够的信息来拆分region。 如果查询结果跨越很多region,这没有问题,因为region中总会有一些大小相差不多的region,然而如果查询仅仅涉及到少数几个region,可能就会有问题

Phoenix性能优化的更多相关文章

  1. 01.SQLServer性能优化之----强大的文件组----分盘存储

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 文章内容皆自己的理解,如有不足之处欢迎指正~谢谢 前天有学弟问逆天:“逆天,有没有一种方 ...

  2. 03.SQLServer性能优化之---存储优化系列

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 概  述:http://www.cnblogs.com/dunitian/p/60413 ...

  3. Web性能优化:What? Why? How?

    为什么要提升web性能? Web性能黄金准则:只有10%~20%的最终用户响应时间花在了下载html文档上,其余的80%~90%时间花在了下载页面组件上. web性能对于用户体验有及其重要的影响,根据 ...

  4. Web性能优化:图片优化

    程序员都是懒孩子,想直接看自动优化的点:传送门 我自己的Blog:http://cabbit.me/web-image-optimization/ HTTP Archieve有个统计,图片内容已经占到 ...

  5. C#中那些[举手之劳]的性能优化

    隔了很久没写东西了,主要是最近比较忙,更主要的是最近比较懒...... 其实这篇很早就想写了 工作和生活中经常可以看到一些程序猿,写代码的时候只关注代码的逻辑性,而不考虑运行效率 其实这对大多数程序猿 ...

  6. JavaScript性能优化

    如今主流浏览器都在比拼JavaScript引擎的执行速度,但最终都会达到一个理论极限,即无限接近编译后程序执行速度. 这种情况下决定程序速度的另一个重要因素就是代码本身. 在这里我们会分门别类的介绍J ...

  7. 02.SQLServer性能优化之---牛逼的OSQL----大数据导入

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 上一篇:01.SQLServer性能优化之----强大的文件组----分盘存储 http ...

  8. C++ 应用程序性能优化

    C++ 应用程序性能优化 eryar@163.com 1. Introduction 对于几何造型内核OpenCASCADE,由于会涉及到大量的数值算法,如矩阵相关计算,微积分,Newton迭代法解方 ...

  9. Android性能优化之利用LeakCanary检测内存泄漏及解决办法

    前言: 最近公司C轮融资成功了,移动团队准备扩大一下,需要招聘Android开发工程师,陆陆续续面试了几位Android应聘者,面试过程中聊到性能优化中如何避免内存泄漏问题时,很少有人全面的回答上来. ...

随机推荐

  1. tomcat添加crt证书

    使用keytool生成证书苹果手机添加后提示未验证,可以使用Apache的openssl生成证书导入到tomcat中. 使用Apache 生成证书:openssl genrsa 4096 > s ...

  2. Spring MVC的路径匹配

    Spring MVC中的路径匹配比起标准web.xml的servlet映射要灵活得多.路径匹配的默认策略是由org.springframework.util.AntPathMatcher实现的.顾名思 ...

  3. Intellij IDEA工具的常用快捷键

    掌握如下常用快捷键可以使自己的开发效率提供十倍. ctrl + B : 转到类或者方法的定义 ctrl + Alt + B:弹出接口/虚类的实现类/子类 ctrl + Alt + 左箭头/右箭头 : ...

  4. 巨蟒python全栈开发linux之cento8

    1.复习路飞部署学习 2.mysql数据库远程访问 3.mysql主从复制 4.redis安全方式启动 5.redis数据类型 6.redis发布订阅 7.redis持久化 8.redis哨兵 9.r ...

  5. Jquery Ajax Json ashx 实现前后台数据传输

    经过一个多星期的研究,各种查找资料终于自己实现了Jquery  Ajax Json ashx 的前后台数据交流功能 首先一点,Ajax只能对应一个ashx文件,多余两个,如果打开异步传输的async: ...

  6. php-fpm 启动 关闭 进程逃逸 pid

    正常关闭失败 [root@d personas]# /etc/init.d/php-fpm stopGracefully shutting down php-fpm /etc/init.d/php-f ...

  7. do not use numbers as enumeration values

    w 字段类型设置错误 有限元的判断,勿用枚举行. MySQL :: MySQL 5.7 Reference Manual :: 12.4.4 The ENUM Typehttps://dev.mysq ...

  8. python基础——函数参数

    课上老师已经讲过函数(func)的参数(args)传递. 之前学习了根据位置传递对应的参数,下面会介绍其他参数传递方式. 之前的位置传参: def f(a,b,c): return a+b+c pri ...

  9. MySQL 第三天

    回顾     字段类型(列类型): 数值型, 时间日期型和字符串类型     数值型: 整型和小数型(浮点型和定点型) 时间日期型: datetime, date,time,timestamp, ye ...

  10. 004-RIP、OSPF【路由选择协议】

    常见的路由选择协议有:RIP协议.OSPF协议. 1.RIP协议 路由信息协议(英语:Routing Information Protocol,缩写:RIP)是一种内部网关协议(IGP),为最早出现的 ...