首页 > 其他分享 >Clickhouse优缺点及性能情况

Clickhouse优缺点及性能情况

时间:2023-01-05 19:45:45浏览次数:52  
标签:优缺点 性能 写入 查询 导入 Clickhouse IO 数据 ClickHouse

优点:

  • 1,为了高效的使用CPU,数据不仅仅按列存储,同时还按向量进行处理;
  • 2,数据压缩空间大,减少IO;处理单查询高吞吐量每台服务器每秒最多数十亿行;
  • 3,索引非B树结构,不需要满足最左原则;只要过滤条件在索引列中包含即可;即使在使用的数据不在索引中,由于各种并行处理机制ClickHouse全表扫描的速度也很快;
  • 4,写入速度非常快,50-200M/s,对于大量的数据更新非常适用。

缺点:

  • 1,不支持事务,不支持真正的删除/更新;
  • 2,不支持高并发,官方建议qps为100,可以通过修改配置文件增加连接数,但是在服务器足够好的情况下;
  • 3,SQL满足日常使用80%以上的语法,join写法比较特殊;最新版已支持类似SQL的join,但性能不好;
  • 4,尽量做1000条以上批量的写入,避免逐行insert或小批量的insert,update,delete操作,因为ClickHouse底层会不断的做异步的数据合并,会影响查询性能,这个在做实时数据写入的时候要尽量避开;
  • 5,Clickhouse快是因为采用了并行处理机制,即使一个查询,也会用服务器一半的CPU去执行,所以ClickHouse不能支持高并发的使用场景,默认单查询使用CPU核数为服务器核数的一半,安装时会自动识别服务器核数,可以通过配置文件修改该参数。

全量数据导入:数据导入临时表 -> 导入完成后,将原表改名为tmp1 -> 将临时表改名为正式表 -> 删除原表
增量数据导入: 增量数据导入临时表 -> 将原数据除增量外的也导入临时表 -> 导入完成后,将原表改名为tmp1-> 将临时表改成正式表-> 删除原数据表
相关优化:

  • 1,关闭虚拟内存,物理内存和虚拟内存的数据交换,会导致查询变慢。
  • 2,为每一个账户添加join_use_nulls配置,左表中的一条记录在右表中不存在,右表的相应字段会返回该字段相应数据类型的默认值,而不是标准SQL中的Null值。
  • 3,JOIN操作时一定要把数据量小的表放在右边,ClickHouse中无论是Left Join 、Right Join还是Inner Join永远都是拿着右表中的每一条记录到左表中查找该记录是否存在,所以右表必须是小表。
  • 4,批量写入数据时,必须控制每个批次的数据中涉及到的分区的数量,在写入之前最好对需要导入的数据进行排序。无序的数据或者涉及的分区太多,会导致ClickHouse无法及时对新导入的数据进行合并,从而影响查询性能。
  • 5,尽量减少JOIN时的左右表的数据量,必要时可以提前对某张表进行聚合操作,减少数据条数。有些时候,先GROUP BY再JOIN比先JOIN再GROUP BY查询时间更短。
  • 6,ClickHouse的分布式表性能性价比不如物理表高,建表分区字段值不宜过多,防止数据导入过程磁盘可能会被打满。
  • 7,CPU一般在50%左右会出现查询波动,达到70%会出现大范围的查询超时,CPU是最关键的指标,要非常关注。

性能情况

  • 1,单个查询吞吐量:如果数据被放置在page cache中,则一个不太复杂的查询在单个服务器上大约能够以2-10GB/s(未压缩)的速度进行处理(对于简单的查询,速度可以达到30GB/s)。如果数据没有在page cache中的话,那么速度将取决于你的磁盘系统和数据的压缩率。例如,如果一个磁盘允许以400MB/s的速度读取数据,并且数据压缩率是3,则数据的处理速度为1.2GB/s。这意味着,如果你是在提取一个10字节的列,那么它的处理速度大约是1-2亿行每秒。对于分布式处理,处理速度几乎是线性扩展的,但这受限于聚合或排序的结果不是那么大的情况下。
  • 2,处理短查询的延时时间:数据被page cache缓存的情况下,它的延迟应该小于50毫秒(最佳情况下应该小于10毫秒)。 否则,延迟取决于数据的查找次数。延迟可以通过以下公式计算得知: 查找时间(10 ms) * 查询的列的数量 * 查询的数据块的数量。
  • 3,处理大量短查询:ClickHouse可以在单个服务器上每秒处理数百个查询(在最佳的情况下最多可以处理数千个)。但是由于这不适用于分析型场景。建议每秒最多查询100次。
  • 4,数据写入性能:建议每次写入不少于1000行的批量写入,或每秒不超过一个写入请求。当使用tab-separated格式将一份数据写入到MergeTree表中时,写入速度大约为50到200MB/s。如果您写入的数据每行为1Kb,那么写入的速度为50,000到200,000行每秒。如果您的行更小,那么写入速度将更高。为了提高写入性能,您可以使用多个INSERT进行并行写入,这将带来线性的性能提升。

count: 千万级别,500毫秒,1亿 800毫秒  2亿 900毫秒 3亿 1.1秒
group: 百万级别 200毫米,千万 1秒,1亿 10秒,2亿 20秒,3亿 30秒
join:千万-10万 600 毫秒, 千万 -百万:10秒,千万-千万 150秒
ClickHouse并非无所不能,查询语句需要不断的调优,可能与查询条件有关,不同的查询条件表是左join还是右join也是很有讲究的。
其他补充:

  • 1,MySQL单条SQL是单线程的,只能跑满一个core,ClickHouse相反,有多少CPU,吃多少资源,所以飞快;
  • 2,ClickHouse不支持事务,不存在隔离级别。ClickHouse的定位是分析性数据库,而不是严格的关系型数据库。
  • 3,IO方面,MySQL是行存储,ClickHouse是列存储,后者在count()这类操作天然有优势,同时,在IO方面,MySQL需要大量随机IO,ClickHouse基本是顺序IO。
  • 有人可能觉得上面的数据导入的时候,数据肯定缓存在内存里了,这个的确,但是ClickHouse基本上是顺序IO。对IO基本没有太高要求,当然,磁盘越快,上层处理越快,但是99%的情况是,CPU先跑满了(数据库里太少见了,大多数都是IO不够用)。

标签:优缺点,性能,写入,查询,导入,Clickhouse,IO,数据,ClickHouse
From: https://www.cnblogs.com/jelly12345/p/17028696.html

相关文章

  • EMQX+阿里云飞天洛神云网络 NLB:MQTT 消息亿级并发、千万级吞吐性能达成
    随着物联网技术的发展与各行业数字化进程的推进,全球物联网设备连接规模与日俱增。一个可靠高效的物联网系统需要具备高并发、大吞吐、低时延的数据处理能力,支撑海量物联网数......
  • 常用的Linux服务器各项性能指标查看方法
    转:https://www.linuxprobe.com/linux-server-skill.html硬盘查看命令df硬盘查看命令df最常用参数是-h,以容易阅读的方式显示磁盘分区使用情况。df-hdf-h/root/#以易......
  • Q420qC力学性能、Q420qC期货订轧、Q420qC钢板介绍
    1、Q420qC钢板用途:Q420qC桥梁板是制造桥梁结构件专用的厚钢板,使用专用钢种桥梁建筑用碳素钢和低合金钢制造。用于架造铁路、公路桥梁、建筑及桥梁、跨海大桥用钢板。 2、Q4......
  • 一款.NET下的性能超高的SQLite操作库
    SQLite 已经成为小型数据库的王者,成为构建桌面程序、小型 Web 应用等必不可少的工具。给广大 .NETer 推荐一款.NET下的 SQLite 包装库 SQLite-net,非常好用,性能也......
  • 大数据 - ClickHouse
    https://clickhouse.com/概念ClickHouse是俄罗斯的Yandex于2016年开源的列式存储数据库(DBMS),使用C++语言编写,主要用于在线分析处理查询(OLAP),能够使用SQL查询实时......
  • Android 性能调优笔记
    1、​​Android性能全面分析与优化方案研究—几乎是史上最全最实用的​​2、Android性能优化总结3、Android应用内存泄漏的定位、分析与解决策略4、Java垃圾回收器的GC......
  • 桌面客户端性能提升,优化使用资源消耗
    十二月末,​​MQTTX​​团队发布了1.9.1-beta.1版本,这也是MQTTX的首个公共测试版。我们希望能够通过测试版本,让更多用户参与到MQTTX的测试中来,和我们一起打造一个......
  • 贴吧低代码高性能规则引擎设计
    作者|贴吧UEG技术组导读本文首先介绍了规则引擎的使用场景,引出贴吧规则引擎。从组件、变量、规则、处置四个模块介绍了规则引擎的组成部分,同时对最终规则文件的编译过程做......
  • Spark+ClickHouse实战企业级数据仓库,进军大厂必备(最新升级版21章)
    ​​点击下载:Spark+ClickHouse实战企业级数据仓库,进军大厂必备(最新升级版21章)​​ 提取码:vg2t《Spark+ClickHouse实战企业级数据仓库,进军大厂必备》,2023年1月最新升级版2......
  • 极客时间《性能测试实战》——性能测试基础
    性能测试的概念1.性能测试概念的传统解释:压力测试压力测试是评估系统处于或超过预期负载时系统的运行情况。压力测试的关注点在于系统在峰值负载或超出最大载荷情况下......