二、ClickHouse简介

ClickHouse简介

  • 前言
  • 一、行式存储
  • 二、DBMS功能
  • 三、多样化引擎
  • 四、高吞吐写入能力
  • 五、数据分区与线程级并行
  • 六、场景
  • 七、特定版本


前言

ClickHouse 是俄罗斯的 Yandex 于 2016 年开源的列式存储数据库(DBMS),使用 C++
语言编写,主要用于在线分析处理查询(OLAP)(对数据删除和更新不友好),能够使用 SQL 查询实时生成分析数据报
告。
官网地址


一、行式存储

在这里插入图片描述

行式存储列式存储
写入每一行的所有字段都存在一起,优点:对数据进行插入和修改操作很方便当一条新数据到来,每一列单独存储,缺点:插入和修改操作麻烦
查询查询时即使只涉及某几列,所有数据也都会被读取;优点:适合随机查询;在整行的读取上,要优于列式存储;缺点:行式存储不适合扫描,这意味着要查询一个范围的数据查询时只有涉及到的列会被读取;缺点:查询完成时,被查询的列要重新进行组装
寻道范围读取数据的时候硬盘寻址范围很大由于仅对需要的列进行查找,因此硬盘寻道范围小
索引缺点:要加速查询的话需要建立索引,建立索引需要花费很多时间。优点:任何列都能作为索引(每一列单独存储,查询个别列的时候,可以仅读取需要的那几个列,相当于为每一列都建立了索引)
压缩缺点:不利于压缩把一列数据保存在一起,而一列的数据类型相同 ;优点:利于压缩
空间按行存储,不利于压缩,压缩比较差,占空间大列式存储的时候可以为每一列创建一个字典,存储的时候就仅存储数字编码即可,降低了存储空间需求
聚合不利于聚合操作按列存储,利于数据聚合操作
应用MySQL中的iInnoDB和MyISAM存储引擎是行式存储MySQL中的infobright存储引擎是列式存储
适用场景OLTP(存储关系型数据,用于使用数据的时候需要经常用到数据之间的依赖关系的场景,即读取的时候需要整行数据或者整行中大部分列的数据,需要经常用到插入、修改操作)OLAP(分布式数据库和数据仓库,适合于对大量数据进行统计分析,列与列之间关联性不强,仅进行插入和读取操作的场景)
  • 列式存储好处:
    • 对于列的聚合,计数,求和等统计操作原因优于行式存储。
    • 由于某一列的数据类型都是相同的,针对于数据存储更容易进行数据压缩,每一列选择更优的数据压缩算法,大大提高了数据的压缩比重。
    • 由于数据压缩比更好,一方面节省了磁盘空间,另一方面对于 cache 也有了更大的发挥空间。

二、DBMS功能

  • 几乎覆盖了标准 SQL 的大部分语法,包括 DDL 和 DML,以及配套的各种函数,用户管理及权限管理,数据的备份与恢复。

三、多样化引擎

  • ClickHouse 和 MySQL 类似,把表级的存储引擎插件化,根据表的不同需求可以设定不同的存储引擎。目前包括合并树、日志、接口和其他四大类 20 多种引擎。

四、高吞吐写入能力

  • ClickHouse 采用类 LSM Tree的结构,数据写入后定期在后台 Compaction。通过类 LSM tree的结构,ClickHouse 在数据导入时全部是顺序 append 写,写入后数据段不可更改,在后台compaction 时也是多个段 merge sort 后顺序写回磁盘。顺序写的特性,充分利用了磁盘的吞吐能力,即便在 HDD 上也有着优异的写入性能。
  • 官方公开 benchmark 测试显示能够达到 50MB-200MB/s 的写入吞吐能力,按照每行100Byte 估算,大约相当于 50W-200W 条/s 的写入速度。

五、数据分区与线程级并行

  • 分区的作用:避免全表扫描
  • ClickHouse 将数据划分为多个 partition,每个 partition 再进一步划分为多个 index
    granularity(索引粒度),然后通过多个 CPU核心分别处理其中的一部分来实现并行数据处理。
    在这种设计下,单条 Query 就能利用整机所有 CPU。极致的并行处理能力,极大的降低了查
    询延时。
    • ClickHouse 即使对于大量数据的查询也能够化整为零平行处理。但是有一个弊端
      就是对于单条查询使用多 cpu,就不利于同时并发多条查询。所以对于高 qps 的查询业务, ClickHouse 并不是强项

六、场景

  • 适用场景:
    • 1.大宽表:ClickHouse不适合初始表的存储,适合处理过大量数据的宽表存储
    • 2.单表查询性能极优
  • 不适用场景:
    • 1.join的效率不高,需要优化语句达到最佳性能。
      • 因为A join B的时候,B表会被加载到内存,再一条条去匹配A表的数据。如果是分布式的,那么效率就更低了。
    • 2.高QPS的场景。

七、特定版本

  • 20.5的版本:final支持多线程
  • 20.6.3的版本:支持explain
  • 20.8的版本:增加了引擎,支持实时同步MySQL信息

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

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

相关文章

C++线程浅谈

本篇文章我们来介绍一下C 多进程 多线程的技术 1.为什要学习多线程 多进程 提高程序的性能:进程和线程可以使程序并发执行,从而充分利用计算机的多核处理器和资源,提高程序的执行效率和吞吐量。 实现复杂任务:通过将任务划分为多…

Acwing---842.排列数字

排列数字 1.题目2.基本思想3.代码实现 1.题目 给定一个整数 n,将数字 1∼n排成一排,将会有很多种排列方法。 现在,请你按照字典序将所有的排列方法输出。 输入格式 共一行,包含一个整数 n。 输出格式 按字典序输出所有排列方案…

Java安全 URLDNS链分析

Java安全 URLDNS链分析 什么是URLDNS链URLDNS链分析调用链路HashMap类分析URL类分析 exp编写思路整理初步expexp改进最终exp 什么是URLDNS链 URLDNS链是Java安全中比较简单的一条利用链,无需使用任何第三方库,全依靠Java内置的一些类实现,但…

读千脑智能笔记12_阻止人类灭绝

1. 阻止人类灭绝 1.1. 宇宙中唯一知道这些的物体,唯一知道宇宙存在的物体,是我们的大脑 1.2. 如果没有关于某个事物的知识,我们能说这个事物就一定存在吗? 1.2.1. 我们的大脑扮演着这样一个独特的角色,这很令人着迷…

使用matplotlib库在Python中绘制散点图

使用matplotlib库在Python中绘制散点图,展示了两个月份的气温变化。 # coding: utf-8 from matplotlib import pyplot as plt # 导入matplotlib库中的pyplot模块,并重命名为plt from matplotlib import font_manager # 导入font_manager模块&#xff…

代码随想录刷题笔记 DAY 23 | 修剪二叉搜索树 No.669 | 将有序数组转换为二叉搜索树 No.108 | 把二叉搜索树转换为累加树 No.538

文章目录 Day 2301. 修剪二叉搜索树(No. 669)1.1 题目1.2 笔记1.3 代码 02. 将有序数组转换为二叉搜索树(No. 108)2.1 题目2.2 笔记2.3 代码 03. 把二叉搜索树转换为累加树(No. 538)3.1 题目3.2 笔记3.3 代…

Linux_进程地址空间

我们用c语言写的程序,经过编译后形成可执行程序存放在硬盘。当运行该程序时,操作系统将该程序加载到内存中,创建进程控制块,变为进程,然后开始执行该程序。大家是否想过,操作系统是如何加载的呢&#xff1b…

有状态DHCPv6快速模式配置及EUI-64介绍

正文共:1024 字 15 图,预估阅读时间:3 分钟 我们现在已经熟悉了IPv6的地址架构(IPv6地址架构一本通),掌握了IPv6地址的手工配置方式(IPv6从入门到精通)和DHCPv6有状态地址配置&#…

01.数据结构篇-链表

1.找出两个链表的交点 160. Intersection of Two Linked Lists (Easy) Leetcode / 力扣 例如以下示例中 A 和 B 两个链表相交于 c1: A: a1 → a2↘c1 → c2 → c3↗ B: b1 → b2 → b3 但是不会出现以下相交的情况,因为每个节点只有一个…

Peter算法小课堂—区间模型(2)

上次咋们讲了前两个区间模型:1.最大不重叠区间数 2.不重叠区间最少分组数。今天我们就学习:最小区间覆盖问题、区间重叠最厚层数! 最小区间覆盖 先看三道题 那么,第1题,它是浮点数的题,也就要求首尾相同。…

通过增加缓存优化斐波那契递归的冗余计算

一、python 斐波那契数列的递归实现存在大量的冗余计算。例如,为了计算fib(n),我们需要计算fib(n-1)和fib(n-2),但是在计算fib(n-1)的过程中,我们又会重复计算fib(n-2)。当n的值很大时,这种冗余计算会消耗大量的计算资…

机器学习:ROC曲线笔记

ROC曲线(Receiver Operating Characteristic Curve)是一种用于评估二分类模型性能的图形化工具,主要用于展示在不同阈值(Threshold)下模型的真阳性率(True Positive Rate,TPR)和假阳…

最新在线看4K高清电影网站推荐

随着互联网技术的发展,观看高清电影已经不再是难事。这里我为大家分享几个最新的在线看4K高清电影网站,让您在家就能享受到极致观影体验。 通过下面这个即可 1. 【超清影视】 【超清影视】是国内新兴的4K高清电影网站,拥有海量的影片资源&a…

【送书福利-第三十一期】《区块链安全理论与实践(安全技术经典译丛)》

😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号:程序员洲洲。 🎈 本文专栏:本文…

幻兽帕鲁游戏官方更新了版本,联机时提示版本不适用,无法加入,怎么办?

如果你在登录游戏的时候提示:您正在尝试加入的比赛正在运行不兼容的游戏版本。请尝试升级游戏版本。此时就说明你需要更新部署在服务器内的幻兽帕鲁了。 1、如果你使用幻兽帕鲁应用模板部署游戏,那么可以选择使用游戏配置面板一键更新。 2、如果你使用一…

使用Xcode 真机无线调试

1.iPhone和Xcode连在同一WIFI下 2.打开Xcode 顶部菜单 选中Window -> Device and Simulators 3.选中Connect via network (注意:勾选前还要用数据线连接,测试机要设置密码,出弹窗的话要点击信任) 真机设备旁边出现小地球 就代表成功了

【ES】--ES集成热更新自定义词库(字典)

目录 一、问题描述二、具体实施1、Tomcat实现远程扩展字典2、验证生效3、ES配置远程扩展字典4、为何不重启ES能实现热更新 一、问题描述 问题现象: 前面完成了自定义分词器词库集成到ES中。在实际项目中词库是时刻在变更的,但又不希望重启ES,对此我们应…

书生·浦语大模型第四课作业

基础作业: 构建数据集,使用 XTuner 微调 InternLM-Chat-7B 模型, 让模型学习到它是你的智能小助手,效果如下图所示,本作业训练出来的模型的输出需要将不要葱姜蒜大佬替换成自己名字或昵称! 1.安装 # 如果你是在 Int…

备战蓝桥杯---组合数学基础1

让我们来几道高中的组合题吧: 1.我们一定有n个向下,为 2.我们挑最大的两个,条件是他们奇偶性相同,为2*A10,2; 3.用捆绑法即可。 4.我们用隔板法,为 5.问题等价于23个相同的球放到3个盒子里,每个盒子至少…

如何使用ProcessStomping在可执行程序的字段部分执行Shellcode

关于ProcessStomping ProcessStomping是一款功能强大的Shellcode代码执行工具,该工具允许广大研究人员在目标可执行程序的指定字段部分执行Shellcode代码。 ProcessStomping实际上是Process Overwriting项目的一个升级版本,并且能够向目标应用程序的指…
最新文章