假如我们有这样一个场景:某个歌曲表(10亿条记录)的主键为id+ts,其中id代表歌曲ID是INT类型,ts是一个时间戳类型。用户查询有以下几种情况,
1. 查询某个id的详细信息(WHERE id=”)
2. 查询某个id在某个时间范围的详细信息(WHERE id=” and ts between and )
3. 统计天级别的id个数(WHERE ts between and )

在不创建额外索引的情况下,我们一般的思路可能是使用以下建表语句,

create table song(
id int not null,
ts timestamp not null
)
primary key (id,ts)
salt using 10 partitions on ...

以上建表语句会使数据按照在id,ts的组合上进行hash分区,分布在10个partition上面。这样的建表语句对于上述3种场景是否适合呢?
对于1 —适合,因为id在前面,可以通过key扫描很快定位到具体某个key的数据
对于2 —适合,因为id在前面ts在后面,通过id就能过滤到大批数据,再结合ts过滤条件可以更快缩小数据范围
对于3 —不适合,因为ts在主键的第二个字段,而且id的UEC很高,这样在查询ts的时候性能会很差

如何在不影响1和2的性能的情况下还能提升3的性能呢?有两种方法:
1. 在ts上创建索引
2. 使用DIVISION BY多温度特性

对于上述第一种方式,由于Trafodion中的索引是以一个独立的HBase表来维护的,创建索引无疑会导致表数据加载性能下降。因此这里我们使用第二种方式,即”DIVISION BY”。”DIVISION BY”一般适用于这样的场景:
1. 表的数据与时间相关,表中有timetamp字段且timestamp字段在主键列中
2. timestamp字段由于UEC很高,一般不作为Leading Key(Key的第一位)
3. 主键除了timestamp还有其他字段如ID,尤其ID的UEC也很高,查询在只有timestamp条件时性能较差

为解决上述问题,使用”DIVISION BY”会在主键列的”SALT“后面添加一个隐藏列”DIVISION_1“,这个值可以是timestamp的一部分,如精确到天级别(date_trunc(‘DAY’,ts))。添加”DIVISION BY”子句后的建表语句基本如下,

create table song(
id int not null,
ts timestamp not null
)
primary key (id,ts)
salt using 10 partitions on ...
division by date_trunc('DAY',ts)

上述语句生成表的主键组成为”SALT“,”DIVISION_1“,ID,TS。拿上述建表语句为例,date_trunc(‘DAY’,ts)的结果是天,这意味着假如表中总共有一年的数据,那么”DIVISION_1“的UEC为365,因此对于上述场景3,按照MDAM查询原理,查询会变成WHERE “DIVISION_1” between and ,而”DIVISION_1“前面的字段为 “SALT“(UEC取决于分区数,所以不会很高),因此会很快定位到此范围的数据。

Trafodion建表之使用多温度特性相关推荐

  1. mysql数据库表删了重建error_数据库内核月报 - 2015 / 09-MySQL · 捉虫动态 · 建表过程中crash造成重建表失败-阿里云开发者社区...

    问题描述 主库的create table语句传到备库,备库SQL线程执行过程中报错: Error 'Can't create table 'XXX.XX' (errno: -1)' on query. ...

  2. 【C/C++12】天气APP:不同数据建表入表,数据交换(exptables.cpp,ftpputfiles.cpp)

    文章目录 1.分区预警信号数据:strstr,UpdateStr 1.1 数据说明:.txt后缀可改为.csv后缀 1.2 建表入表:站点代码改为街道代码,站点名称改为街道名称 2.台风(热带气旋)数 ...

  3. mysql 分库分表 建表,mysql 分库分表 建表MySQL常用操作

    通过命令行启动.停止MySQL服务器: start: net start mysql stop: net stop mysql 连接MySQL服务器:\>mysql -h127.0.0.1 -u ...

  4. SQL语法精讲(包括建库、建表、建视图、查询、增加、删除、修改)

    SQL语法精讲(包括建库.建表.建视图.查询.增加.删除.修改) SQL分类: DDL-数据定义语言(CREATE,ALTER,DROP,DECLARE) DML-数据操纵语言(SELECT,DELE ...

  5. MySQL和InnoDB体系结构,内存数据对象,基本建表操作

    本节内容主要关于mysql体系结构和InnoDB存储引擎的体系架构(包括后台线程和内存结构).InnoDB关键特性.checkpoint机制,以及刷脏磁盘的不同时机和方式.最后是在mysql客户端通过 ...

  6. java代码内创建mysql索引_点评阿里JAVA手册之MySQL数据库 (建表规约、索引规约、SQL语句、ORM映射)...

    下载原版阿里JAVA开发手册  [阿里巴巴Java开发手册v1.2.0] 本文主要是对照阿里开发手册,注释自己在工作中运用情况. 本文内容:MySQL数据库 (建表规约.索引规约.SQL语句.ORM映 ...

  7. 数据库建表设计规范及原则

    建表规约 强制要求 表达是/否概念的字段,使用is_xxx的方式命名(代码中不建议以is开头命名),数据类型是bit(长度为1位,1表示是,0表示否)或unsigned tinyint(1字节). 说 ...

  8. hive:建库建表、表分区、内部表外部表、数据导入导出

    hive建库建表与数据导入 建库 hive中有一个默认的库: 库名: default 库目录:hdfs://hdp20-01:9000/user/hive/warehouse 新建库: create  ...

  9. 【持续更新】Leetcode SQL题目全解析(附建表sql)

    Leetcode SQL题目全解析 越前须知(雾) 题目Q & A 175 组合两个表 181 超过经理收入的员工 182 查找重复电子邮箱 183 从不订购的用户 197 上升的温度 511 ...

  10. ftt传感器_FTTTB温度传感器温度特性实验仪介绍及实验数据(新).doc

    FTTTB温度传感器温度特性实验仪介绍及实验数据(新).doc FD-TTT-B温度传感器温度特性实验仪 "溫度"是一种重耍的热学物理量,它不仅和我们的生活环境密切相尖,在科研及生 ...

最新文章

  1. oracle 按月累计求和,SQL Cumulative Sum累积求和
  2. ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— Arduino相关设置
  3. 虚拟机克隆改变IP地址,配置环境及免密设置
  4. mount: unknown filesystem type 'LVM2_member'解决方案
  5. 当强人工智能时代来临,哪些人不会失业?
  6. mac 下更新python
  7. c# char unsigned_C 中 char、signed char 和 unsigned char 的区别
  8. 计算机怎样用计算法绘制圆弧,计算机图形学圆弧生成算法具体程序实现
  9. 使用从mysql中取数据
  10. 使用 matlab 求解多元非线性方程组
  11. 资深开发者告诉你“页游转手游”应注意的五大点
  12. matlab字符串转换
  13. css背景颜色设置为半透明,关于css设置背景色透明,半透明
  14. win7 IE11下,无法通过Windows更新为其他微软产品获取更新
  15. HTTP和HTTPS、GET和POST
  16. html中if函数的使用方法,if函数的使用方法 if函数怎么使用
  17. java中直线距离的计算_java计算两点间的距离方法总结
  18. 计算机考研面试有英语听力吗,复试英语听力与口语应该这样准备
  19. 《金融科技(FinTech)发展规划(2019-2021年)》梳理
  20. 安装企业宽带的一些问题

热门文章

  1. Python模块化编程
  2. SegNet(持续更新)
  3. ArcGIS批量使用以表格显示分区统计工具
  4. 北京环球度假区宣布首批21家旅游渠道官方授权合作伙伴
  5. NGOD client 完成感想
  6. 左耳朵耗子:Serverless 究竟是什么?
  7. 激光打标程序 c语言,激光打标机 - 20160516labview - 源码下载|Windows编程|其他小程序|源代码 - 源码中国...
  8. python刷抖音浏览_Python 一键批量下载抖音无水印视频
  9. HTTP报文(这篇讲得比较详细)
  10. keil编程和c语言,C语言编程及keil软件使用.ppt