ClickHouse开发系列

news2024/11/25 12:00:24

一、 ClickHouse详解、安装教程_clickhouse源码安装

二、ClickHouse 语法详解_clickhouse讲解        

三、ClickHouse SQL 操作语句详解

四、ClickHouse 高级教程—官方原版

五、ClickHouse主键索引最佳实践

六、MySQL与ClickHouse集成 

七、ClickHouse 集成MongoDB、Redis

八、Java ClickHouse整合—官方教程 

 

一、什么是ClickHouse?

ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。

在传统的行式数据库系统中,数据按如下顺序存储:

RowWatchIDJavaEnableTitleGoodEventEventTime
#0893543506621Investor Relations12016-05-18 05:19:20
#1903295099580Contact us12016-05-18 08:10:20
#2899537060541Mission12016-05-18 07:38:00
#N

处于同一行中的数据总是被物理的存储在一起。

常见的行式数据库系统有:MySQLPostgresMS SQL Server

在列式数据库系统中,数据按如下的顺序存储:

Row:#0#1#2#N
WatchID:893543506629032950995889953706054
JavaEnable:101
Title:Investor RelationsContact usMission
GoodEvent:111
EventTime:2016-05-18 05:19:202016-05-18 08:10:202016-05-18 07:38:00

这些示例只显示了数据的排列顺序。来自不同列的值被单独存储,来自同一列的数据被存储在一起。

常见的列式数据库有: Vertica、 Paraccel (Actian Matrix,Amazon Redshift)、 Sybase IQ、 Exasol、 Infobright、 InfiniDB、 MonetDB (VectorWise, Actian Vector)、 LucidDB、 SAP HANA、 Google Dremel、 Google PowerDrill、 Druid、 kdb+。

不同的数据存储方式适用不同的业务场景,数据访问的场景包括:进行了何种查询、多久查询一次以及各类查询的比例;每种类型的查询(行、列和字节)读取多少数据;读取数据和更新之间的关系;使用的数据集大小以及如何使用本地的数据集;是否使用事务,以及它们是如何进行隔离的;数据的复制机制与数据的完整性要求;每种类型的查询要求的延迟与吞吐量等等。

系统负载越高,依据使用场景进行定制化就越重要,并且定制将会变的越精细。没有一个系统能够同时适用所有不同的业务场景。如果系统适用于广泛的场景,在负载高的情况下,要兼顾所有的场景,那么将不得不做出选择。是要平衡还是要效率?

二、OLAP场景的关键特征​

  • 绝大多数是读请求
  • 数据以相当大的批次(> 1000行)更新,而不是单行更新;或者根本没有更新。
  • 已添加到数据库的数据不能修改。
  • 对于读取,从数据库中提取相当多的行,但只提取列的一小部分。
  • 宽表,即每个表包含着大量的列
  • 查询相对较少(通常每台服务器每秒查询数百次或更少)
  • 对于简单查询,允许延迟大约50毫秒
  • 列中的数据相对较小:数字和短字符串(例如,每个URL 60个字节)
  • 处理单个查询时需要高吞吐量(每台服务器每秒可达数十亿行)
  • 事务不是必须的
  • 对数据一致性要求低
  • 每个查询有一个大表。除了他以外,其他的都很小。
  • 查询结果明显小于源数据。换句话说,数据经过过滤或聚合,因此结果适合于单个服务器的RAM中

很容易可以看出,OLAP场景与其他通常业务场景(例如,OLTP或K/V)有很大的不同, 因此想要使用OLTP或Key-Value数据库去高效的处理分析查询场景,并不是非常完美的适用方案。例如,使用OLAP数据库去处理分析请求通常要优于使用MongoDB或Redis去处理分析请求。

三、列式数据库更适合OLAP场景的原因​

列式数据库更适合于OLAP场景(对于大多数查询而言,处理速度至少提高了100倍),下面详细解释了原因(通过图片更有利于直观理解):

行式

Row oriented

列式

Column oriented

看到差别了么?下面将详细介绍为什么会发生这种情况。

1、输入/输出​

  1. 针对分析类查询,通常只需要读取表的一小部分列。在列式数据库中你可以只读取你需要的数据。例如,如果只需要读取100列中的5列,这将帮助你最少减少20倍的I/O消耗。
  2. 由于数据总是打包成批量读取的,所以压缩是非常容易的。同时数据按列分别存储这也更容易压缩。这进一步降低了I/O的体积。
  3. 由于I/O的降低,这将帮助更多的数据被系统缓存。

例如,查询«统计每个广告平台的记录数量»需要读取«广告平台ID»这一列,它在未压缩的情况下需要1个字节进行存储。如果大部分流量不是来自广告平台,那么这一列至少可以以十倍的压缩率被压缩。当采用快速压缩算法,它的解压速度最少在十亿字节(未压缩数据)每秒。换句话说,这个查询可以在单个服务器上以每秒大约几十亿行的速度进行处理。这实际上是当前实现的速度。

2、CPU​

由于执行一个查询需要处理大量的行,因此在整个向量上执行所有操作将比在每一行上执行所有操作更加高效。同时这将有助于实现一个几乎没有调用成本的查询引擎。如果你不这样做,使用任何一个机械硬盘,查询引擎都不可避免的停止CPU进行等待。所以,在数据按列存储并且按列执行是很有意义的。

有两种方法可以做到这一点:

  1. 向量引擎:所有的操作都是为向量而不是为单个值编写的。这意味着多个操作之间的不再需要频繁的调用,并且调用的成本基本可以忽略不计。操作代码包含一个优化的内部循环。

  2. 代码生成:生成一段代码,包含查询中的所有操作。

这是不应该在一个通用数据库中实现的,因为这在运行简单查询时是没有意义的。但是也有例外,例如,MemSQL使用代码生成来减少处理SQL查询的延迟(只是为了比较,分析型数据库通常需要优化的是吞吐而不是延迟)。

请注意,为了提高CPU效率,查询语言必须是声明型的(SQL或MDX), 或者至少一个向量(J,K)。 查询应该只包含隐式循环,允许进行优化。

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

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

相关文章

如何通过一条数字人三维动画宣传片,打造出数字文旅

越来越多虚拟人,以文化挖掘者的身份通过数字人三维动画宣传片,打通次元壁,助力文化传播形式创造性转化、创新性表达,赋予文化发展新动能。 如南方都市报民间博物馆文化探寻者“岭梅香”,由一艘在南宋时期失事的沉船“南…

基于原子轨道搜索算法的无人机航迹规划-附代码

基于原子轨道搜索算法的无人机航迹规划 文章目录 基于原子轨道搜索算法的无人机航迹规划1.原子轨道搜索搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用原子轨道搜索算法来优化无…

干货满满,mac屏幕录制实用教程!

在当今科技飞速发展的时代,屏幕录制已经成为了人们日常生活中经常使用的功能,无论是工作还是生活,我们都需要使用到屏幕录制软件来捕捉屏幕上的内容。mac作为苹果公司开发的操作系统,拥有许多内置的屏幕录制工具。本文将详细介绍两…

录屏有声音吗?解答你的疑惑

录屏是我们在工作和生活中经常遇到的需求,有时候我们需要记录下屏幕的操作或展示给别人看。然而,很多人在录屏的时候都会遇到一个问题:录制的视频没有声音。那么,录屏有声音吗?答案是肯定的。在本文中,我们…

关于还看视频对讲没有效果而且不会报错 的解决方法

1. 海康初步引入 这里我用的是海康h5player 介入海康视频参考 https://www.maxssl.com/article/22480/ 这里如果需要需要对讲功能 这里不仅需要引入h5player.js 还需要将talk和talkW文件夹一并引入 2.项目需求 在我的项目中需求是 在地图中展示点位,点击点位开启视频 并有对…

Linux操作系统中软件安装来了

在系统中,应用软件是必不可少的,比如一些社交软件,影音娱乐软件,那么我们Windows中安装软件方法主要有两种:第一种是从网站上下载安装包,双击打开安装包后按照提示一步步操作完成安装;第二种是从…

【SpringBoot篇】SpringBoot整合Mybatis实战

🎊专栏【SpringBoot】 🍔喜欢的诗句:天行健,君子以自强不息。 🎆音乐分享【如愿】 🎄欢迎并且感谢大家指出小吉的问题🥰 文章目录 🌺Spring Boot和MyBatis的好处🌺创建工…

芯片制造中如何测薄膜厚度?

在半导体制造业中,薄膜的厚度对器件的性能和质量有重要影响。薄膜的厚度决定了许多重要的物理和化学性质,对其折射、反射和透射的光学性质有直接影响,可以导致显著的量子尺寸效应,从而改变材料的电子、光学和磁性等。准确测量和控…

谈京东电商API接口的应用场景及返回值说明(获取商品详情,SKU,desc)

1 背景 京东作为电商平台,近几年用户、业务持续增长,访问量持续上升,随着这些业务的发展,京东API接口应运而生。 API接口,就是为了解放客户端与服务端而存在的。对于客户端,使开放给客户端的接口标准统一…

SI24R1兼容NORDIC通信开发资料

一、友商的nRF24L01不要求芯片底部的金属焊盘接地,Si24R1规格书上也没要求接地,这是因为发射功率较低只有0dbm的情况,当芯片发射功率大于0dbm以后,芯片底部的金属焊盘会有很多白噪声耦合到地,而nRF24L01的参考设计金属…

02-详解SpringAOP 面向切面编程

面向切面编程 AOP思想 Spring的IoC容器可以使软件组件松耦合,Spring的AOP则可以让你能够捕捉系统中经常使用的功能并把它转化成组件 Spring的AOP的实现底层可以在JDK动态代理 CGLIB动态代理两种动态代理中灵活切换,当前也可以通过Spring的配置强制使用CGLIB动态代理 如果代…

微信小程序案例3-1 比较数字

文章目录 一、运行效果二、知识储备(一)Page()函数(二)数据绑定(三)事件绑定(四)事件对象(五)this关键字(六)setData()方法&#xff0…

GitHub黑市曝光,高档刷星6元一颗,最奇葩开源项目97%都是刷的

​梦晨 克雷西 发自 凹非寺 量子位 | 公众号 QbitAI 在黑市买GitHub星星多少钱? 最贵的高达6元一颗。 有创业者Yassin Eldeeeb自掏腰包测试了一把。他足足花20欧元(约156人民币),只买到25颗“高级星星”。 没错,在黑…

最近非常火的电子木鱼流量主小程序源码系统 带完整搭建教程

在当今数字化时代,人们对于休闲娱乐的需求越来越高。近年来,一种结合了传统文化和现代科技的新型休闲娱乐方式——电子木鱼,迅速在年轻人群中流行开来。电子木鱼流量主小程序源码系统的出现,为这种新型娱乐方式提供了更加便捷的途…

在直播系统中使用RTSP协议传递视频

目录 概述 1、环境准备 2、拉流URL地址 3、导播软件取流 (1)OBS中拉取RTSP流 (2)芯象中拉取RTSP流 (3)vMix中拉取RTSP流 写在最后 概述 提到RTSP协议,很容易想到RTMP协议,它…

【Linux】进程状态详解

Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法…感兴趣就关注我吧!你定不会失望。 本篇导航 0. 五状态进程模型1. 运行 >> R (running)2. 浅度睡眠 >> S (sleeping)3. 深度睡眠 >> D (disk sleep)4. 暂…

skynet学习笔记01— skynet开发环境搭建(超详细)与第一个skynet程序

00、参考资料 https://blog.csdn.net/qq769651718/category_7480207.html 01、前置准备 开发所在目录 mhzzjmhzzj-virtual-machine:~/work/skynetStudy$ pwd /home/mhzzj/work/skynetStudy前置准备 mhzzjmhzzj-virtual-machine:~/work/skynetStudy$ sudo apt install lua5…

注册电气工程师证书挂靠有风险吗?考试难度很高是吗?前景怎么样

一.先说证书挂靠问题,毫无疑问,有风险,远的不说咱说说近的, 比如下面这张图 从上面这张图可以看出来,哪怕是2023,还有陆陆续续的人因为挂靠的问题被处罚,所以我的建议是能不挂就不挂&#xff0c…

qt opengl 绘制点、线、三角形、多边形(二)

文章目录 一、相关宏定义参数二、代码及示例图1. 点 LG_POINTS 0x00002. 线 GL_LINES 0x00013. 线 GL_LINE_LOOP 0x00024. GL_LINE_STRIP 0x00035. GL_TRIANGLES 0x00046. GL_TRIANGLE_STRIP 0x00057. GL_TRIANGLE_FAN 0x00068. GL_QUADS 0x00079. GL_QUAD_STRIP 0x000810. GL_…

第八章 Python类(面向对象编程)

系列文章目录 第一章 Python 基础知识 第二章 python 字符串处理 第三章 python 数据类型 第四章 python 运算符与流程控制 第五章 python 文件操作 第六章 python 函数 第七章 python 常用内建函数 第八章 python 类(面向对象编程) 第九章 python 异常处理 第十章 python 自定…