Kudu系列: Kudu主键选择策略

每个Kudu 表必须设置Pimary Key(unique), 另外Kudu表不能设置secondary index, 经过实际性能测试, 本文给出了选择Kudu主键的几个策略, 测试结果纠正了我之前的习惯认知.

简单介绍测试场景: 表中有一个unqiue字段Id, 另外还有一个日期维度字段histdate, 有三种设置kudu PK的方法, 分别是:
表设计方案1 (histdate, id)作为联合主键, 日期字段放在前.
表设计方案2 (id,histdate)作为联合主键, 日期字段放在后.
表设计方案3 (id)作为单字段主键.

先给出测试数据:

 

结论:
1. 选择性强的字段(比如 id 字段) 应该放在PK清单最前面, 这个规则对查询性能影响最大.
2. PK清单中只加必要的字段, 越少越好.
3. 如果查询针对PK中所有字段都加了条件, 其性能是最优的. 但只要有一个PK字段未加上条件, 就完全用不上PK索引,性能就很差.
4. where条件中各个字段条件的先后顺序并不关键.
5. Kudu表使用Java API Insert的速度还是很好的, 单线程达到了1万笔/秒多. Kudu Update 效率也很高, 实测对一个窄表做全字段update, 其速度达到了Insert速度的88%, 而vertica的update效率比insert差很多. 

在测试之前的误区:
误区1. (histdate,id)组合PK应该是最优的, 因为在数仓中经常按照日期做查询, 把日期放在PK清单最前面, 应该有助于提升查询性能, 结果发现无论是日期+id组合查询,还是id单独查询, 该方案性能都最差, 甚至不如完全不在PK清单中的 duplicated_id 的定位查询.
误区2. 即使给部分PK字段加上过滤条件, 查询也会利用上PK index, 结果证明是完全利用不上index.

 

具体表结构:

-- 下面三个表的 id 取值为: java.util.UUID.randomUUID().toString(), duplicated_id和id取值相同. CREATE TABLE kudu_testdb.perf_test_t1
( 
histdate    timestamp ENCODING BIT_SHUFFLE COMPRESSION LZ4,
id    string ENCODING PLAIN_ENCODING COMPRESSION SNAPPY,
value int,
duplicated_id    string ENCODING PLAIN_ENCODING COMPRESSION SNAPPY,
PRIMARY KEY (histdate,id)  
) 
PARTITION BY HASH (histdate,id) PARTITIONS 2 
STORED AS KUDU
TBLPROPERTIES ('kudu.table_name' = 'testdb.perf_test_t1','kudu.master_addresses' = '10.205.6.1:7051,10.205.6.2:7051,10.205.7.3:7051'
);CREATE TABLE kudu_testdb.perf_test_t2
( 
histdate    timestamp ENCODING BIT_SHUFFLE COMPRESSION LZ4,
id    string ENCODING PLAIN_ENCODING COMPRESSION SNAPPY,
value int,
duplicated_id    string ENCODING PLAIN_ENCODING COMPRESSION SNAPPY,
PRIMARY KEY (id,histdate)  
) 
PARTITION BY HASH (id,histdate) PARTITIONS 2 
STORED AS KUDU
TBLPROPERTIES ('kudu.table_name' = 'testdb.perf_test_t2','kudu.master_addresses' = '10.205.6.1:7051,10.205.6.2:7051,10.205.7.3:7051'
);CREATE TABLE kudu_testdb.perf_test_t3
( 
id    string ENCODING PLAIN_ENCODING COMPRESSION SNAPPY,
histdate    timestamp ENCODING BIT_SHUFFLE COMPRESSION LZ4,
value int,
duplicated_id    string ENCODING PLAIN_ENCODING COMPRESSION SNAPPY,
PRIMARY KEY (id)  
) 
PARTITION BY HASH (id) PARTITIONS 2
STORED AS KUDU
TBLPROPERTIES ('kudu.table_name' = 'testdb.perf_test_t3','kudu.master_addresses' = '10.205.6.1:7051,10.205.6.2:7051,10.205.7.3:7051'
);

 

转载于:https://www.cnblogs.com/harrychinese/p/kdu_pk.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367283.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OSS网页上传和断点续传(OSS配置篇)

OSS网页上传和断点续传主要根据BrowserJS-SDK和相关文档整理而得,快速构建OSS上传应用 一、Bucket设置 浏览器中直接访问OSS需要开通Bucket的CORS设置 将allowed origins设置成 *将allowed methods设置成 PUT, GET, POST, DELETE, HEAD将allowed headers设置成 *将e…

小程序各种姿势实现登录

喜闻乐见的背景时间--由于最近接触小程序比较多,又刚好经历过小程序的自动登录时代以及现在的点击登录时代。结合自己的实践以及观察到其他小程序的做法,就有了这篇小分享~ 本文可能涉及的内容-- 更新 首先感谢shaonialife同学的精彩评论~ 可能由于用词…

BBS-登录

from django.db import models# Create your models here. from django.contrib.auth.models import AbstractUser#用户 class UserInfo(AbstractUser):nidmodels.AutoField(primary_keyTrue)telephonemodels.CharField(max_length32)avatarmodels.FileField(upload_toavatar/,…

使用Mockito和BeanPostProcessors在Spring注入测试双打

我非常确定,如果您曾经使用过Spring并且熟悉单元测试,那么您会遇到与您不想修改的Spring应用程序上下文中注入模拟/间谍(测试双打)有关的问题。 本文介绍了一种使用Spring组件解决此问题的方法。 项目结构 让我们从项目结构开始&…

二叉搜索时与双向链表python_JZ26-二叉搜索树与双向链表

1、中序遍历,当前结点,以及左侧排好序的双向链表,再调整当前结点的指针指向最前结点/* struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {} };*/ class Solution …

html右缩进怎么设置,WPS中怎么设置右缩进两个字符?

回答:打开我们的Word文档,调整好我们的文字内容,然后全选我们的文字内容,注意要分段时按下键盘上的回车键另起一行。请点击输入图片描述接着,我们点击顶部菜单栏的“开始”菜单,在开始菜单下面的子菜单中找…

VS2013专业版+QT5.6.3+qt-vs-addin-1.2.5环境搭建

一、工具资料: 1.vs2013专业版地址:http://download.csdn.net/download/u010368556/10238145 2.qt各版本地址:http://download.qt.io/archive/qt/ 3.qt-vs插件地址:http://download.qt.io/archive/vsaddin/ 二、环境搭建过程&…

使用ActiveMQ和HornetQ通过WebSocket通过STOMP轻松进行消息传递

消息传递是用于构建不同级别的分布式软件系统的极其强大的工具。 通常,至少在Java生态系统中,客户端(前端)从不直接与消息代理(或交换)进行交互,而是通过调用服务器端(后端&#xff…

【laravel】【转发】laravel 导入导出excel文档

1、简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel ,从而方便我们以优雅的、富有表现力的代码实现Excel/CSV文件的导入和 导出 。 该项目的GitHub地址是: https://github.com/Maatwebsite/Laravel-Excel 。 本文我们将在Laravel中…

你真的了解css像素嘛?

在日常开发中,px一定是大家接触过最多的css单位,但是你真的了解px嘛?1px在屏幕中到底是多大呢?另外不知道大家有没有过下面这些疑惑: 为什么一个元素在pc上和移动端的物理尺寸不一样,但是两者的视觉效果上却差不多呢&…

mysql for mac中文_mysql for Mac 下创建数据表中文显示为?的解决方法

在我的绝版Mac mini下安装了mysql 5.7版本,实例中,在通过load data 导入数据时发现表中的中文显示为 ?通过百度,发现多个版本的解决方法,将其中一个成功解决的方法贴上来:大多方法都是这样:需要…

计算机科学计算方面分为,计算机方面的专业分为哪些类?【资讯与计算科学】和【电脑科学与技术专业】有什么不同?...

计算机方面的专业分为哪些类?【资讯与计算科学】和【电脑科学与技术专业】有什么不同?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!计算机方面的专业分为哪些类&am…

Java异常处理教程(包含示例和最佳实践)

异常是可能在程序执行期间发生的错误事件,它会破坏其正常流程。 Java提供了一种健壮且面向对象的方式来处理异常情况,称为Java异常处理 。 我们将在本教程中研究以下主题。 Java异常处理概述 异常处理关键字 异常层次 有用的异常方法 Java 7自动资源…

GMTC 大前端时代前端监控的最佳实践

本文来自阿里云前端监控团队,转载请注明出处本文为2018年6月21日,在北京举办的GMTC(全球大前端技术大会),下午性能与监控专场,由阿里云前端监控团队前端技术专家彭伟春带来的演讲稿,现场反馈效果非常好,地上…

Alpha阶段敏捷冲刺②

1.提供当天站立式会议照片一张 每个人的工作 (有work item 的ID),并将其记录在码云项目管理中: 昨天已完成的工作。 购买云服务器 注册账号 界面布局初步规划 今天计划完成的工作。 界面雏形设计 数据库初步设计 完成后端框架初步…

透明地持久保存并从数据库中检索加密的数据

自从我在这里发表上一个帖子以来已经有两个多月了,但是今年六月和七月非常忙碌而密集。 首先, Confitura的组织(欧洲最大的Java开发人员免费会议)参加了我所有的免费晚会,然后在相当紧张的住院期间,我们的第…

[译] 2017 年比较 Angular、React、Vue 三剑客

原文地址:Angular vs. React vs. Vue: A 2017 comparison原文作者:Jens Neuhaus译文出自:掘金翻译计划本文永久链接:https://github.com/xitu/gold-miner/blob/master/TODO/angular-vs-react-vs-vue-a-2017-comparison.md译者&…

centos 离线安装mysql_CentOS6离线安装mysql-5.7.25

1.mysql-5.7.25-1.el6.x86_64.rpm-bundle.tar下载百度云资源提取码:ej1y2.把下载的mysql安装包上传到Centos上解压mysql,我这是在Windows上解压的上传到Centos上,我在Centos上解压mysql不知道为什么少了rpm -ivh mysql-community-common-5.7.…

Linux自动化之Cobbler补鞋匠安装

cobbler介绍: 快速网络安装linux操作系统的服务,支持众多的Linux发行版:Red Hat、 Fedora、CentOS、Debian、Ubuntu和SuSE,也可以支持网络安装windows PXE的二次封装,将多种安装参数封装到一个菜单 Python编…

如何以10倍速加速Apache Xalan的XPath处理器

一段时间以来, Apache Xalan中存在一个令人尴尬的错误,该错误是XALANJ-2540 。 此错误的后果是Xalan每次XPath表达式求值将内部SPI配置文件加载数千次 ,可以很容易地进行如下测量: 这个: Element e (Element)documen…