Row timestamp

Phoenix 从4.6版本开始,提供了一个映射Hbase 的native timestamp 到phoenix的办法,从而可以利用Hbase提供的对于时序数据处理和查询的一系列优化手段。

这玩意可以干什么呢?
如果表里面有raw_Timestamp列的话,可以在查询的时候省下大部分的扫描时间,因为Hbase的 HFile meta数据里面会有最小和最大的时间戳,查询的时候,如果目标时间戳没有在当前HFile, 那么就直接跳过。

如果有列名被声明为row_timestamp, 必须满足以下的约束条件

  • 只有类型为TIME, DATE, TIMESTAMP,BIGINT, UNSIGNED_LONG, 且是主键的列才能声明为row_timestamp
  • 只有一个主键列能够声明为row_timestamp
  • 值不能为null
  • 声明为row_timestamp的列的值不能为负数

当往表里插入row_timestamp 列的时候,使用upsert values 或者 upsert select,可以显式的指定或者是让Phoenix自动生成值,如果没有指定的话,Phoenix使用服务器时间来设定raw_timestamp列,

Sequences

Sequences是一个标准的sql特性,可以生成单调的递增的数字序列,通常作为ID来使用。

create sequence my_schema.my_sequences
这句话会创建一个叫做my_schema.my_sequence 的序列值1, 每次增加1,没有最大值最小值,在Phoenix会缓存100个序列值。

如果想要指定最小最大值和每次增加的步幅,可以使用下面的语句

create sequence my_schema.my_sequence start with 100 increment by 2 cache 10

Salted Tables

如果你写数据的key单调递增的话,或者说你的key会导致数据都写到一个hbase 的region server的话,会造成hbase的单点问题,就是负载都在一台机器上,其他机器比较空闲,负载失衡,出现这种情况的话是比较不合理的。
为什么会出现这样的问题呢?这和hbase的存储方式有关系,hbase是以多维有序map的形式存储数据的,所以如果你写数据的key单调有序,写入位置就会集中在一起。
Phoenix的解决方案是显式的给key加盐,如果你创建了一个为自己带盐的表的话,你再去看hbase里的原始数据,你会发现你的row key前面被随机加上了一个字节。这样的话就会改变数据的单调性。分散写入负载。
使用为自己带盐的表,可以这样写:

create table tableName(id integer primary key) salt_buckets=20.

由于在key只增加一个字节,所以salt_buckets的取值范围是1-256.

如果你使用为自己带盐的表,你需要注意一些事情
1,顺序扫描
因为rowKey自己带盐,所以尽管你顺序的插入了,但是实际上并没有顺序的存,所以如果你的查询有顺序扫描发生的话,返回的结果肯定会和没有为自己带盐的表的返回结果不一样的啦。
2,splitting
如果没有指明表的splitting point, 为自己带盐的表会根据salt byte来进行pre-split, 这样可以保证负载分散,即使是在表的初始化阶段也会pre-split(并不是很明白想说啥)。如果用户想要指明split-point的话,必须考虑到salt byte的存在。
3,Row Key Order
Pre-split 同样保证了在进入同一个region server的数据拥有同样的salt byte,这样的话可以保证数据按照原来应有的顺序来排序,当发生跨region server的并行扫描的时候, 我们可以使用这一特性来在客户端合并排序,扫描结果会和没有为自己带盐的表一样的。
这个RowKey order可以用 phoenix.query.rowKeyOrderSaltedTable 配置项来调整,当设置为true时,我们不允许用户指定为自己带盐的表的split-point, 这样可以确保每个bucket 只包含进入同一个region server的salt byte。当这个配置项打开时,在进行rowKey扫描的时候,为自己带盐的表会表现得和不为自己带盐的表一样

性能

性能当然没的说了:点这里查看性能评估报告

Hbase Sql 层 Phoenix 的三个特性Row timestamp, Sequences 和 Salted Tables相关推荐

  1. Hbase索引( Phoenix二级索引)

    Hbase索引( Phoenix二级索引) 1. Phoenix简介 1.1.Phoenix安装 1.2.常用命令 1.3.phoenix表映射 1.3.1.视图映射 1.3.2.表映射 1.3.3. ...

  2. CockroachDB架构——SQL层

    ChockroachDB架构的SQL层向开发人员公开SQL API并将SQL语句转换成数据库其他部分使用的键值操作. --注意: 1)如果您还没有准备好,我们建议您阅读架构概览部分. 一.概览 一旦C ...

  3. SQL优化整理(三)

    单表优化 字段 索引 查询SQL 引擎 MyISAM InnoDB 系统调优参数 升级硬件 读写分离 缓存 表分区 分区的好处: 分区的限制和缺点: 分区的类型: 分区适合的场景 垂直拆分的优点是: ...

  4. 分布式CAP定理,为什么不能同时满足三个特性?

    在弄清楚这个问题之前,我们先了解一下什么是分布式的CAP定理. 根据百度百科的定义,CAP定理又称CAP原则,指的是在一个分布式系统中,Consistency(一致性). Availability(可 ...

  5. CockroachDB分布式SQL层架构解析

    SQL 层 SQL层主要用来将SQL语句转化为K-V操作,并将操作送给事务层. SQL Parser, Planner, Executor,CRDB通过yacc将语句解析为抽象语句树(AST),yac ...

  6. php开发面试题---php面向对象详解(对象的主要三个特性)

    php开发面试题---php面向对象详解(对象的主要三个特性) 一.总结 一句话总结: 对象的行为:可以对 对象施加那些操作,开灯,关灯就是行为. 对象的形态:当施加那些方法是对象如何响应,颜色,尺寸 ...

  7. sql语言和php,SQL语言快速入门(三)_php

    我们日常使用SQL语言的工作过程中,使用最多的还是从已经建立好的数据库中查询信息.下面,我们就来详细介绍一下如何使用SQL语言实现各种数据库查询操作. SELECT-FROM 为方便讲解,我们在数据库 ...

  8. 标准SQL的update语句三种用法

    标准SQL的update语句三种用法 一.环境: MySQL-5.0.41-win32 Windows XP professional   二.建立测试环境:   DROP TABLE IF EXIS ...

  9. css的三个特性 背景透明设置

    关于行内元素(补充一点) 行内元素只能容纳文本或其他行内元素.(a特殊a里面可以放块级元素) 例子: 关于行高tip: 选择器的嵌套层级不应大于3级,位置靠后的限定条件应尽可能的精确. 属性定义必须另 ...

最新文章

  1. NVIDIA GPU的快速傅立叶变换
  2. python traceback安装_Python错误:Traceback (most recent call last):感觉是软件出了问题
  3. 电脑开机3秒就重启循环_3秒开机不是梦,泰捷WE40旗舰升级版体验
  4. 一看就懂的例子告诉你用react-redux的正确姿势
  5. 实现三联tab切换特效
  6. 主页所停留的时间实现交互
  7. vsftp服务器mysql认证_基于mysql控制vsftp的用户认证机制
  8. 在图层上使用CATransform3D制做三维动画-b
  9. 2019年考研篇(2020毕业)
  10. 将iTunes音乐传输到USB驱动器以在汽车中收听
  11. 蓝桥杯单片机电路图讲解-74HC138-74HC02和74HC573的联合使用讲解
  12. 大公司都在用的招聘分析模型,会EXCEL就行,白嫖党不要错过
  13. Square, Inc.公布收购Afterpay的计划,将加强并促进卖家与Cash App生态系统之间的进一步融合
  14. golang errors
  15. java结束if_java中如何结束if循环
  16. ROS新手教程(talker/listener)
  17. 错误连接数据库 [xxx] : org.pentaho.di.core.exception.KettleDatabaseException: Error occurred while try
  18. Mysql报错Table ‘blog.user‘ doesn‘t exist
  19. 计算机科学期刊几个外审,期刊投稿服务发表论文外审一般几个专家审稿_优发表...
  20. 宠物经济:一门千亿级市场的孤独生意

热门文章

  1. 【数据结构】二叉树(下)
  2. 数据结构 - JS实现二叉树
  3. win7 传奇无法游戏全屏解决办法
  4. 360是怎样盈利的(整理)
  5. 电感和磁珠的区别及应用
  6. 视频怎么批量打码?Python实现视频自动打码分享
  7. 《我的学习经历》——杨振宁
  8. SEO带给你网站的五大优势
  9. 【C生万物】 分支循环语句篇
  10. 手把手教你闪图怎样在线制作?