首页 > 其他分享 >clickhouse 为什么快?

clickhouse 为什么快?

时间:2023-06-12 16:32:19浏览次数:53  
标签:为什么 列式 行式 数据库 boot 查询 clickhouse


文章目录

  • @[TOC](文章目录)
  • 前言
  • 一、什么是列式数据库?
  • 为什么要用列式数据库,优点是什么?
  • 二、clickhouse入门
  • 1. 个人猜想
  • 2. 使用clickhouse
  • 引入依赖
  • yml配置
  • 扫描mapper
  • 2.生成相应代码,执行测试用例
  • 查询结果
  • 总结

前言

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


一、什么是列式数据库?

什么事列式数据库,顾名思义它与平时的主流关系型数据库不太一致,例如mysql 它是行式数据库,什么意思呢?

clickhouse 为什么快?_spring

这就是普通的行式数据库的存储,一行是一条完整的数据;

接下来看看列式数据库

clickhouse 为什么快?_clickhouse_02

一列是一条完整的数据; 每一行则是同类型的数据;
这就意味着查询的时候, 和存入的时候与传统的行式数据库都不太一致

为什么要用列式数据库,优点是什么?

  1. 列式数据库的存储方式更节省空间

它的存储与传统行式数据库一样,也是以每一行为一个单元进行存储的,由于每一行作为一个存储单元,每一行的数据类型必定一致,这样对于数据存储的压缩更有利

  1. 列式数据库查询字段更少,性能更佳

例如行式数据库,我要查询所有人的年龄,那么我需要扫描全表,然后取每一条的一个属性age,相当于全表扫描,但是有用的属性只有一个,造成了查询效率低下; 列式数据库呢? 只需要取出age属性所在的某一行数据,取到的就都是属性age的值; 所以当有数据统计 如: 聚合 统计的时候,列式存储性能更佳

二、clickhouse入门

1. 个人猜想

既然是列式数据库,那么它的存储与查询肯定也与行式的不太一样

clickhouse 为什么快?_数据_03

  • 1 存储

当传入传统的一行数据后, 会对这条数据的字段进行拆分,拆分后,每个字段存入各自的列式数据库中的行,但是他们虽然拆分,但是在所有行中,列号相同

  • 2 查询

当想查询一条传统的一行数据, 会根据条件查询需要的字段
既列式数据库的要查询行的所有数据,然后按照条件过滤,得到相应的列式中的行数据,然后根据行所在的列号,找到其他行,然后拼接成一条条数据
这样就变为了传统数据上的一行行数据,返回结果

2. 使用clickhouse

  • 来吧,展示~~




引入依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>ru.yandex.clickhouse</groupId>
            <artifactId>clickhouse-jdbc</artifactId>
            <version>0.3.2</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.6.1</version>
            <scope>runtime</scope>
        </dependency>

yml配置

spring:
  datasource:
    dynamic:
      primary: master
      strict: false
      datasource:
        master:
          driver-class-name: com.clickhouse.jdbc.ClickHouseDriver
          username: default
          password:
          url: jdbc:clickhouse://ip:8123/数据库名

扫描mapper

启动类增加扫描

@MapperScan("com.example.clickhousedemo.dao")

2.生成相应代码,执行测试用例

测试用例代码:

@SpringBootTest
class ClickhouseDemoApplicationTests {

    @Autowired
    MoniterCpuService moniterCpuService;

    @Test
    void contextLoads() throws Exception{
        List<MoniterCpu> list = moniterCpuService.list();
        for (MoniterCpu moniterCpu : list) {
        	// 类内部重新了toString 方法
            System.out.println(moniterCpu.toString());
        }
    }
}

总结

clickhouse 在使用上,与mysql几乎没有差别,遵循sql92标准,某些函数会有不同,然后体验它优越的性能就好了~~
文章中涉及到的所有源码: 项目地址


标签:为什么,列式,行式,数据库,boot,查询,clickhouse
From: https://blog.51cto.com/u_16158506/6463464

相关文章

  • MySQL表结构转换为ClickHouse表结构
    MySQL表结构转换为ClickHouse表结构https://github.com/hcymysql/binlog_parse_sql/blob/main/mysql_to_clickhose_schema.pyhttps://github.com/hcymysql/binlog_parse_sql/blob/main/mysql_to_clickhose_schema_test.py(MySQL表结构转换为ClickHouse表结构,该工具仅为单表测试使用)C......
  • 为什么很多人自学Python都放弃了?
     有些人学Python并不是因为对编程有浓厚的兴趣,或者没有经验尝试认为入门容易。因此,当他们开始学习Python时,可能会遇到一些困难或感到挫败,导致他们放弃。总的来说,python并不是你想想的那样简单。以下是可能导致放弃的原因:缺乏计算机科学和编程基础:学习Python需要具备一定的计......
  • 为什么很多人自学Python都放弃了?
    有些人学Python并不是因为对编程有浓厚的兴趣,或者没有经验尝试认为入门容易。因此,当他们开始学习Python时,可能会遇到一些困难或感到挫败,导致他们放弃。总的来说,python并不是你想想的那样简单。以下是可能导致放弃的原因:缺乏计算机科学和编程基础:学习Python需要具备一定的计算机科......
  • 为什么需要堡垒机
    什么是堡垒机堡垒机,即在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的入侵和破坏,而运用各种技术手段监控和记录运维人员对网络内的服务器、网络设备、安全设备、数据库等设备的操作行为,以便集中报警、及时处理及审计定责。用一句话来说,堡垒机就是用来后控制哪些......
  • clickhouse 21.1.5 单机性能测试
    数据集1英国房地产支付价格https://clickhouse.com/docs/zh/getting-started/example-datasets/uk-price-paid问题由于公司电脑的Ubuntu子系统访问不了内网,下载不了数据,我是在电脑之间下载csv文件然后在子系统Ubuntu进行如下SQL导入的错误是因为在尝试解析CSV文件的过程中,C......
  • 男人为什么总想搞自己的初恋-带走了我一整个青春的女孩
    初恋,就是人生中爱情里面的第一个喜欢的人,那些曾经刻骨铭心地相爱、相知、难以忘怀地结束、回想起来还心存不甘的那段爱恋里的男女主角。对于大多数男人来说,体会到初恋的滋润,初恋都是在比较年轻的年龄,愿意为一个女孩子做很多事情,心甘情愿的。大多数男孩子幼稚、干净、满腔热情追求......
  • 美SEC主席公开演讲:我们为什么起诉币安和Coinbase?
       在SEC闪击币圈后,美SEC主席GaryGensler在PiperSandler全球交易所和金融科技大会发表演讲,他再次强调了监管的重要性,并指出监管已经明确,发行人、经纪交易商和交易所应该遵守。这不是指导方针不充分的问题,只是他们不想按照被监管机构告知的去做。   Gensler认为,美国资本市场......
  • 思考-为什么不想做事还特别累
    问题描述每天起来特别的累,以至于做事情的动力和欲望降到很多,直到最后不想做任何事情,这是为什么?原因分析1.心力、脑力、体力的耗尽,不是不想,而是特别累的不想做事2.想各种其他的东西,耗费所剩无几的脑力3.不知道做哪一件事情,产生矛盾的内耗......
  • 使用clickhouse和mysql查询时间对比
    业务场景,对于数据量过大的数据统计,跑脚本会很吃力先建立一个clickhouse的mysql引擎表关联本地mysql数据表,以下这个表会自动同步mysql主表数据CREATETABLEtest_table(idUInt32,messageString,contentString,remarkString,order_idString,user_idUInt......
  • 定积分上下限为什么有时候需要变有时候不需要不变?
    简单的说就是:能在式子中看到原来的积分变量就不需要重新计算积分上下限,否则就需要重新确定积分上下限,这里还有一个具体的例子和更加详细的说明可以帮助我们理解这个问题:定积分运算时的积分上下限:什么时候变?什么时候不变?——荒原之梦考研数学......