zoukankan      html  css  js  c++  java
  • Clickhouse学习

    简介

    • 列式存储数据库
    • 用于在线分析处理查询(OLAP)
    • 能够使用SQL查询实时数据

    • OLAP场景特征
      1. 大多数是读请求
      2. 数据总是以相当大的批(> 1000 rows)进行写入
      3. 不修改已添加的数据
      4. 每次查询都从数据库中读取大量的行,但是同时又仅需要少量的列
      5. 宽表,即每个表包含着大量的列
        较少的查询(通常每台服务器每秒数百个查询或更少)
      6. 对于简单查询,允许延迟大约50毫秒
      7. 列中的数据相对较小: 数字和短字符串(例如,每个URL 60个字节)
      8. 处理单个查询时需要高吞吐量(每个服务器每秒高达数十亿行)
      9. 事务不是必须的
      10. 对数据一致性要求低
      11. 每一个查询除了一个大表外都很小
      12. 查询结果明显小于源数据,换句话说,数据被过滤或聚合后能够被盛放在单台服务器的内存中

    Clickhouse特点

    列式存储

    优点:

    1. 对于列的聚合,计数,求和等统计操作原因优于行式存储。
    2. 由于某一列的数据类型都是相同的,针对于数据存储更容易进行数据压缩,每一列选择更优的数据压缩算法,大大提高了数据的压缩比重。
    3. 由于数据压缩比更好,一方面节省了磁盘空间,另一方面对于cache也有了更大的发挥空间。

    DBMS功能

    • 支持基于SQL的声明式查询语言,大部分情况下是与SQL标准兼容的。

    • 支持的查询包括 GROUP BY,ORDER BY,IN,JOIN以及非相关子查询。

    • 不支持窗口函数和相关子查询。

    多样化引擎

    • clickhouse和mysql类似,把表级的存储引擎插件化,根据表的不同需求可以设定不同的存储引擎,包括了合并树、日志、接口和其他四大类几十种引擎.

    高吞吐写入能力

    • 采用了LSM Tree结构(合并树),数据会在后台不定期进行Compaction.
    • 通过类LSM tree的结构,ClickHouse在数据导入时全部是顺序append写,写入后数据段不可更改,在后台compaction时也是多个段merge sort后顺序写回磁盘。
    • 又由于顺序写的缘故,充分利用了磁盘的吞吐能力,所以其有着非常好的写入性能.

    数据分区和线程并行

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

    缺陷

    • 没有完整的事务支持。
    • 缺少高频率,低延迟的修改或删除已存在数据的能力。仅能用于批量删除或修改数据,但这符合 GDPR。
    • 稀疏索引使得ClickHouse不适合通过其键检索单行的点查询。

    数据类型

    整数类型

    Int Ranges

    Int8 - [-128 : 127]
    Int16 - [-32768 : 32767]
    Int32 - [-2147483648 : 2147483647]
    Int64 - [-9223372036854775808 : 9223372036854775807]
    

    Uint Ranges

    UInt8 - [0 : 255]
    UInt16 - [0 : 65535]
    UInt32 - [0 : 4294967295]
    UInt64 - [0 : 18446744073709551615]
    

    浮点类型

    Float32 - float
    Float64 - double
    

    值得注意的是,其继承了所有编程语言的关于浮点数精度问题,所以需要尽量避免使用

    Decimal类型

    Decimal32(s),相当于Decimal(9-s,s)
    Decimal64(s),相当于Decimal(18-s,s)
    Decimal128(s),相当于Decimal(38-s,s)
    

    Boolean类型

    没有单独的类型来存储布尔值。可以使用 UInt8 类型,取值限制为 0 或 1

    字符串

    1. String (varchar) 可以是任意长度的任意字符
    2. Fixedstring(N) (char(n)) 固定长度N的字符(N>0)

    枚举类型

    • 包括 Enum8 和 Enum16 类型。Enum 保存 'string'= integer 的对应关系。
    • Enum8 用 'String'= Int8 对描述。
    • Enum16 用 'String'= Int16 对描述

    使用场景

    • 对一些状态、类型的字段算是一种空间优化,也算是一种数据约束。但是实际使用中往往因为一些数据内容的变化增加一定的维护成本,甚至是数据丢失问题。所以谨慎使用。

    时间类型

    目前clickhouse只有三种时间类型

    1. Date 接受 年--****日 的字符串比如 ‘2019-12-16’
    2. Datetime 接受 年--日 时:***秒 的字符串比如 ‘2019-12-16 20:50:10’
    3. Datetime64 接受 年--日 时::.****亚秒 的字符串比如 ‘2019-12-16 20:50:10.66’

    数组

    Array(T):由 T 类型元素组成的数组, T 可以是任意类型,包含数组类型。

    创建方式

    1. 使用Array函数
    2. 使用[ ]语法
      • 使用此法时,每个数据都有两个索引,正序的和逆序的(-1)

    其他数据类型

    官网地址

    表引擎

    作用

    1. 数据的存储方式和位置,写到哪里以及从哪里读取数据
    2. 支持哪些查询以及如何支持。
    3. 并发数据访问。
    4. 索引的使用(如果存在)
    5. 是否可以执行多线程请求
    6. 数据复制参数。

    使用

    在建表时定义(必须)和设置参数,其对大小写敏感.

    常用引擎

    1. TinyLog
    2. Memory
    3. MergeTree
    4. ReplacingMergeTree
    5. SummingMergeTree

    关于引擎的补充说明

    作者:Ya
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    windows下大数据开发环境搭建(3)——Scala环境搭建
    windows下大数据开发环境搭建(1)——Java环境搭建
    windows下大数据开发环境搭建(2)——Hadoop环境搭建
    I/O复用
    SuRF : Practical Range Query Filtering with Fast Succinct Tries
    信号处理
    进程间通信
    简易内存分配器的实现
    socket编程(C++)
    C++—程序的内存分区
  • 原文地址:https://www.cnblogs.com/1463490Ya/p/15750707.html
Copyright © 2011-2022 走看看