Clickhouse学习笔记(11)—— 数据一致性

使用合并树引擎时,无论是ReplacingMergeTree还是SummingMergeTree,都只能保证数据的最终一致性,因为数据的去重、聚合等操作会在数据合并的期间进行,而合并会在后台以一个不确定的时间进行,因此无法预先计划;

数据准备

建表:

CREATE TABLE test_consistence(
 user_id UInt64,
 score String,
 deleted UInt8 DEFAULT 0,
 create_time DateTime DEFAULT toDateTime(0)
)ENGINE= ReplacingMergeTree(create_time)
ORDER BY user_id;

其中deleted作为是否删除的标识;create_time 是版本号字段,每组数据中 create_time 最大的一行表示最新的数据

导入数据:

INSERT INTO TABLE test_consistence(user_id,score)
WITH(
 SELECT ['A','B','C','D','E','F','G']
)AS dict
SELECT number AS user_id, dict[number%7+1] FROM numbers(10000000);

数据结构如下:

通过修改create_time的值,可以更新数据:

INSERT INTO TABLE test_consistence(user_id,score,create_time)
WITH(
 SELECT ['AA','BB','CC','DD','EE','FF','GG']
)AS dict
SELECT number AS user_id, dict[number%7+1], now() AS create_time FROM 
numbers(500000);

now()函数可以获取当前时间

查询发现,此时表中共有10500000条数据,说明还未进行去重;

去重方案

手动 OPTIMIZE

在写入数据后,立刻执行 OPTIMIZE 强制触发新写入分区的合并动作

optimize table test_consistence;

耗费时间:

可以看到,optimize是一个相对比较耗时的操作(与select、insert相比),因为需要进行大量的数据读写

通过 Group by 去重

执行去重的查询

SELECT
 user_id ,
 argMax(score, create_time) AS score, 
 argMax(deleted, create_time) AS deleted,
 max(create_time) AS ctime 
FROM test_consistence 
GROUP BY user_id
HAVING deleted = 0;

函数argMaxargMax(field1,field2):按照 field2 的最大值取 field1 的值

因此argMax(score, create_time)的含义就是,按照create_time的最大值取score的值,因为create_time代表当前数据的更新时间,因此总能取到最新的数据;

同理argMax(deleted, create_time)是取最新的deleted标识,来判断数据是否被删除

创建视图

通过上面的操作我们可以实现数据的去重等操作,从而保证一致性,因此创建视图来保存数据查询的逻辑

CREATE VIEW view_test_consistence AS
SELECT
 user_id ,
 argMax(score, create_time) AS score, 
 argMax(deleted, create_time) AS deleted,
 max(create_time) AS ctime 
FROM test_consistence 
GROUP BY user_id
HAVING deleted = 0;

视图创建的格式:create view view_name as select......

注意:这里创建的视图仅仅保存了数据查询的逻辑,并不保存具体的数据;

测试去重效果

插入数据:

insert into test_consistence(user_id, score, create_time) values(0, 'AAAA', now());

然后查询数据:

select * from test_consistence where user_id = '0';

发现并未去重;

而从视图中查询:

select * from view_test_consistence where user_id = '0';

则仅有最新的数据:

通过 FINAL 查询

在查询语句后增加 FINAL 修饰符,这样在查询的过程中将会执行 Merge 的特殊逻辑(例如数据去重,预聚合等)

测试

① 不使用final查询:

select * from visits_v1 WHERE StartDate = '2014-03-17' limit 100;

②使用final查询:

select * from visits_v1 final WHERE StartDate = '2014-03-17' limit 100;

可以看到,查询速度并没有普通的查询快,因此使用final确保数据一致性也是以效率为代价的;

版本说明

早期版本增加 FINAL 之后,查询会变成单线程;但从v20.5.2.7-stable版本之后转为多线程执行,并可以通过max_final_threads 参数控制单个查询的线程数:

explain pipeline select * from visits_v1 final WHERE StartDate = '2014-03-17' limit 100;

可以看到从 CollapsingSortedTransform 这一步开始已经是多线程执行,但是读取 part 部分的动作还是串行

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于SSM的停车场管理系统设计与实现

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。你想解决的问题,今天给大家介绍…

Spring基础学习——web

Spring基础学习——web 一、Spring整合Web环境1.1 JavaWeb三大组件作用及其特点1.2 Spring整合Web环境的思路及实现1.3 Spring开发Web环境组件spring-web1.4 web层MVC框架思想与设计思路 一、Spring整合Web环境 1.1 JavaWeb三大组件作用及其特点 在Java语言当中,w…

creo6.0教程之旋转,扫描

目录 一、旋转:二、扫描: 一、旋转: 案例1:旋转一个球: 任意一个平面绘制草图: 确定草图后,然后退出草图,点击旋转: 案例2:旋转一个杯子雏形: …

在以TAB为首地址的字存储区中存放有N个无符号数,试统计低3位全为1的数的个数(个数设为≤9),并显示。

;默认认采用ML6.11汇编程序 DATAS SEGMENT;此处输入数据段代码TAB DW -7,7,15,20,21N($-TAB)/2;G DW 0 DATAS ENDS STACKS SEGMENT;此处处输入堆栈段代码; DB 200 DUP(0) STACKS ENDS CODES SEGMENTASSUME CS:CODES,DS: DATAS, SS:STACKS START:MOV AX, DATASMOV DS,AX;此处输入…

swift和OC混编报错问题

1.‘objc’ instance method in extension of subclass of ‘xxx’ requires iOS 13.0.0 需要把实现从扩展移到主类实现。iOS13一下扩展不支持objc 2.using bridging headers with framework targets is unsupported 报错 这个错误通常指的是在一个框架目标中使用桥接头是不…

01:2440----点灯大师

目录 一:点亮一个LED 1:原理图 2:寄存器 3:2440的框架和启动过程 A:框架 B:启动过程 4:代码 5:ARM知识补充 6:c语言和汇编的应用 A:代码 B:分析汇编语言 C:内存空间 7:内部机制 二:点亮2个灯 三:流水灯 四:按键控制LED 1:原理图 2:寄存器配置 3:代码 一:点…

postgresql|数据库|提升查询性能的物化视图解析

前言: 我们一般认为数字的世界是一个虚拟的世界,OK,但我们其实有些需求是和现实世界一模一样的,比如,数据库尤其是关系型数据库,希望在使用的数据库能够更快(查询速度),…

亚马逊云AI应用科技创新下的Amazon SageMaker使用教程

目录 Amazon SageMaker简介 Amazon SageMaker在控制台的使用 模型的各项参数 pytorch训练绘图部分代码 Amazon SageMaker简介 亚马逊SageMaker是一种完全托管的机器学习服务。借助 SageMaker,数据科学家和开发人员可以快速、轻松地构建和训练机器学习模型&#…

765. 情侣牵手

765. 情侣牵手(leetcode,数学思维题)-------------------Java实现 题目表述 n 对情侣坐在连续排列的 2n 个座位上,想要牵到对方的手。 人和座位由一个整数数组 row 表示,其中 row[i] 是坐在第 i 个座位上的人的 ID。情侣们按顺…

头歌答案--爬虫实战

目录 urllib 爬虫 第1关:urllib基础 任务描述 第2关:urllib进阶 任务描述 requests 爬虫 第1关:requests 基础 任务描述 第2关:requests 进阶 任务描述 网页数据解析 第1关:XPath解析网页 任务描述 第…

汉明距离(Java)

两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。 给你两个整数 x 和 y,计算并返回它们之间的汉明距离。 方法1:使用内置函数 class Solution {public int hammingDistance(int x, int y) {return Integer.bitCount(x ^ y);} }方法2:移位实…

技能培训知识付费服务预约小程序的效果如何

技能、证书往往是很多人生活的基本,行业岗位竞争激烈,每个人都希望有多种技能或工作所需,而需求持续增加下,相关技能培训机构也很多,比如常见的考证、钢琴培训、针灸培训、花艺培训等。 很多行业都需要学习或考证&…

mac homebrew.mxcl.php@5.6.plist

今天启动php5.6时 遇到了一个问题 servers % brew services start php5.6 Bootstrap failed: 5: Input/output error Try re-running the command as root for richer errors. Error: Failure while executing; /bin/launchctl bootstrap gui/501 /Users/ssh/Library/LaunchAge…

Spring源码系列-Spring事务

目录 声明式事务 事务传播行为 源码解析 开启事务 调用顺序 EnableTransactionManagement注解的两个作用 引入AutoProxyRegistrar后置处理器 引入ProxyTransactionManagerConfiguration配置类 加载切面 事务的Advisor的注册 事务Advice 事务PointCut 创建动态代理…

编程知识\_C与汇编深入分析

1. 汇编怎么调用C函数 1.1 直接调用 bl main 1.2 想传参数怎么办? 在arm中有个ATPCS规则(ARM-THUMB procedure call standard(ARM-Thumb过程调用标准)。 约定r0-r15寄存器的用途: r0-r3 调用者和被调用者之间传参数 r4-r11 函…

理解王自如,希望成为王自如

我是卢松松,点点上面的头像,欢迎关注我哦! 昨天看了王自如的采访视频,这两天刷了很多屏。 王自如说:我没看过格力给的工资条。在顶级的企业家身边工作,哪怕每天只是听她讲什么做什么,我都觉得是…

“富婆”通讯录——让你少奋斗50年

文章目录 一、项目需求分析二、通讯录各功能实现思路及代码准备工作2.1、打印一个菜单,提供用户选择功能2.2、添加联系人信息2.3、删除联系人信息2.4、查询联系人信息2.5、修改联系人信息2.6、显示所有联系人信息2.7、对所有联系人信息进行排序整理2.8、删除所有联系…

python速成

list类型中所有的方法(除sort之外), 每一个方法附带一个实例:以及解释说明 append append(self, object, /) Append object to the end of the list. clear clear(self, /) Remove all items from list. 从列表中删除所有项目。 list_data [1,…

【开放视频+文档】Spinnaker多云持续部署实践

Hello, 首先,继续感谢大家持续的关注! 这次我们已经将《Spinnaker实践》课程 实践文档课程笔记实验源码视频回放 全部免费开放给所有的技术人员。文档库视频基于语雀,扫描图片二维码可以获取语雀文档链接“https://www.yuque.com/devopsgr…

宋浩高等数学笔记(一)函数与极限

b站宋浩老师的高等数学网课,全套笔记已记完,不定期复习并发布更新。 章节顺序与同济大学第七版教材所一致。 目录 1.1映射与函数 1.2数列的极限 1.3函数的极限 1.4无穷小和无穷大 1.5极限运算准则 1.6极限存在准则and两个重要极限 1.7无穷小 1…