「从ES到CK 04」Clickhouse表引擎选择和表结构设计

这篇具有很好参考价值的文章主要介绍了「从ES到CK 04」Clickhouse表引擎选择和表结构设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  导航

        在完成将公司日志数据从Elasticsearch(下称ES)转战到Clickhouse后,个人认为有必要将过程记录分享。限于篇幅及便于分类组织,我会以一个系列文章的形式记录:

  • 01 《Elasticsearch vs Clickhouse》
  • 02 《Clickhouse的基础知识扫盲》
  • 03 《​Clickhouse多分片多副本集群部署​》
  • 04 《​​Clickhouse表引擎选择和表结构设计​》
  • 05 《​clickhouse高效数据处理工具vector​》
  • 06 《​​​​​​​​​clickhouse的数据可视化工具clickvisual​》
  • 07 《kibana自定义插件跳转clickvisual》
  • 08 《妙用clickvisual api实现用户自动管理》(敬请期待)

「从ES到CK 04」Clickhouse表引擎选择和表结构设计,elasticsearch,clickhouse,大数据,elk

一、表引擎选择

        在系列文章《​​Clickhouse的基础知识扫盲​​》也有提到过,合并树(MergeTree)系列的表引擎被誉为Clickhouse 中最强大的表引擎,其中MergeTree引擎作为其系列内其他表引擎的基础,具有如下特性:

        √ 存储的数据按主键排序

        √ 支持分区

        √ 支持数据副本

        √ 支持数据采样

        在继承MergeTree引擎特性的基础上,衍生出如下各有特色的表引擎,满足不同场景的需求:

表引擎

说明

SummingMergeTree

该引擎继承自 MergeTree。区别在于,当合并SummingMergeTree表的数据片段时,ClickHouse会把所有具有相同主键的行合并为一行,该行包含了被合并的行中具有数值数据类型的列的汇总值。如果主键的组合方式使得单个键值对应于大量的行,则可以显著的减少存储空间并加快数据查询的速度。

ReplacingMergeTree

会删除排序键值相同的重复项以节省空间,但是它不保证没有重复的数据出现

AggregatingMergeTree

一般用来做增量数据的聚合统计,包括物化视图的数据聚合。

CollapsingMergeTree

引擎继承于 MergeTree,并在数据块合并算法中添加了折叠行的逻辑

VersionedCollapsingMergeTree

擎继承自 MergeTree 并将折叠行的逻辑添加到合并数据部分的算法中

GraphiteMergeTree

该引擎用来对 Graphite数据进行瘦身及汇总

Replicated*

数据副本,支持:

  • ReplicatedMergeTree
  • ReplicatedSummingMergeTree
  • ReplicatedReplacingMergeTree
  • ReplicatedAggregatingMergeTree
  • ReplicatedCollapsingMergeTree
  • ReplicatedVersionedCollapsingMergeTree
  • ReplicatedGraphiteMergeTree

在结合我司日志平台的实际场景后,选用了ReplicatedMergeTree引擎存储完整的日志数据~

二、表结构设计

        在系列文章《​​Clickhouse的基础知识扫盲​​》也有提到过表结构的相关概念,话不多说直接上DDL,以java日志的表结构为例:

CREATE TABLE elk.java_log_local
(
    `service_name` String CODEC(ZSTD(1)),
    `server_ip` String CODEC(ZSTD(1)),
    `sys_code` String CODEC(ZSTD(1)),
    `env_type` String CODEC(ZSTD(1)),
    `class_name` String CODEC(ZSTD(1)),
    `log_level` String CODEC(ZSTD(1)),
    `thread` String CODEC(ZSTD(1)),
    `_time_nanosecond_` DateTime64(3, 'Asia/Shanghai'),
    `msg` String CODEC(ZSTD(1)),
    `exception` String CODEC(ZSTD(1)),
    `traceId` String CODEC(ZSTD(1)),
    `spanId` String CODEC(ZSTD(1)),
    INDEX idx_msg msg TYPE tokenbf_v1(30720, 2, 0) GRANULARITY 1
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/java_log', '{replica}')
PARTITION BY toYYYYMMDD(_time_nanosecond_)
ORDER BY (_time_nanosecond_, sys_code, env_type, service_name)
-- TTL toDateTime(_time_nanosecond_) + toIntervalDay(14)
SETTINGS storage_policy = '51cto', index_granularity = 8192;

表结构设计说明:

属性

语句

说明

索引

INDEX idx_msg msg TYPE tokenbf_v1(30720, 2, 0) GRANULARITY 1

msg字段为日志详情,涉及长文本模糊匹配的场景,故针对该字段建立跳数索引

主键

-

排序(必填)

ORDER BY (time_nanosecond, sys_code, env_type, service_name)

结合业务场景,根据字段使用频率、优先级,由高至低组合

压缩方式

CODEC(ZSTD(1))

此处选用字符串字段常用的ZSTD压缩算法,压缩级别为1

分区

PARTITION BY toYYYYMMDD(time_nanosecond)

此处选用日期作为分区依据,注意避免过于精细的分区方案,以免影响整体性能

数据生命周期

TTL toDateTime(time_nanosecond) + toIntervalDay(14)

考虑到生命周期可能会根据实际情况而变动,在生产环境中我选用move/delete partition的方式来控制数据生命周期。因为ttl值设定后修改,会引发全表扫描,故设计表结构时需考虑清楚是否引入ttl设置

存储策略

storage_policy = '51cto'

此处采用多级存储,将数据按策略分别存在ssd、hdd和oss,具体可参考《​​Clickhouse多分片多副本集群部署​​》

三、参考资料

  • Clickhouse

        ​​https://clickhouse.com/docs/zh​​

下回预告

        由于logstash消耗的资源较高,在日志平台转战clickhouse后,引入了高效数据处理工具vector,欢迎关注后续更新的系列文章~文章来源地址https://www.toymoban.com/news/detail-774899.html

到了这里,关于「从ES到CK 04」Clickhouse表引擎选择和表结构设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构课程设计】简单搜索引擎系统

    该程序使用python语言实现利用爬虫代码爬取网站链接信息,将网站中文词语通过结巴分词进行分割,并存储爬取的数据信息,利用结巴分词库处理输入框用户输入的词语,进行搜索,通过链接评价函数,优先显示评分较高的链接;设计简单的html页面,实现可视化搜索功能。

    2024年01月23日
    浏览(60)
  • ClickHouse--04--数据库引擎、Log 系列表引擎、 Special 系列表引擎

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ClickHouse 中支持在创建数据库时指定引擎,目前比较常用的两种引擎为默认引擎 和 MySQL 数据库引擎。 Ordinary 就是 ClickHouse 中默认引擎,如果不指定数据库引擎创建的就是Ordinary 数据库引擎,在这种数据

    2024年02月20日
    浏览(57)
  • Python 程序设计入门(017)—— 选择结构程序设计

    程序中的选择结构也称为判断结构,按照条件选择执行不同的代码片段。Python 中的选择结构主要有三种形式:if 语句、if…else 语句和 if…elif…else 语句。 if 语句的语法格式如下: 说明: (1)表达式:可以是比较表达式或逻辑表达式。如果表达式的值为 True,则执行语句块

    2024年02月13日
    浏览(49)
  • SDUT-程序设计基础-实验2-选择结构

    在开始之前,我想要提醒一下大家,在看完答案和解析以后,一定要自己再写一遍,一味的复制粘贴没有任何效果,当然,在解析中有任何看不懂的内容都可以私信我!! 首先,if顾名思义,是如果的意思,即如果满足,即运行,不满足,则跳过。常用的结构,有if,if, e

    2024年02月05日
    浏览(44)
  • python连接clickhouse (CK)

    2024年02月06日
    浏览(34)
  • 【数据库学习】ClickHouse(ck)

    是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。 按列存储,列越多速度越慢; 按列存储,数据更容易压缩(类型相同、区分度);==》每次读取的数据就更多,更少的io。 聚合性能高; 类sql操作;仅支持数据的查询、批量写入、批量删除。 用于磁盘查询,同时也利用

    2024年02月02日
    浏览(56)
  • 4、MATLAB程序设计与应用刘卫国(第三版)课后实验四:选择结构程序设计

    目录  一、  二、  三、  四、  五、 求分段函数的值   用 if语句实现,分别输出X=-5.0,-3.0,1.0,2.0,2.5,3.0,5.0时的y值。 ------------- -------- ------------ ------ 示例代码 - -------------------------- ------------------ ------------- -------- ------------ ------ 运行结果 - -------------------------- --------

    2024年02月05日
    浏览(48)
  • 设计模式-04.01-结构型-代理&桥接&装饰器&适配器

    创建型模式比较好理解,后面的结构型和行为型设计模式不是那么好理解。如果遇到不好理解的设计模式,我一般会在开头举比较简单的Demo案例来帮助理解。 前面几节,我们讲了设计模式中的创建型模式。创建型模式主要解决对象的创建问题,封装复杂的创建过程,解耦对

    2024年02月09日
    浏览(59)
  • 《golang设计模式》第二部分·结构型模式-04-装饰器模式(Decorator)

    装饰器(Decorator)通过包装(不是继承)的方式向目标对象中动态地添加或删除功能。 Component(抽象组件):定义了原始对象的接口,装饰器也会实现这个接口。 Concrete Component(具体组件):原始对象,以后装饰器会装饰它。 Decorator(抽象装饰器):关联/聚合了抽象组件,

    2024年02月09日
    浏览(51)
  • 【ClickHouse】-01.万字带你快速入门使用CK

    本文学习目标 ● 了解什么是clickhouse ● 熟悉clickhouse的使用场景 ● 学会clickhouse安装与使用 ● 了解clickhouse引擎 ● 学会Clickhouse SQL的操作 ClickHouse是一个用于联机分析( OLAP )的 列式数据库 管理系统(DBMS)。 友情提示ClickHouse 并不是数据仓库,它也不是数据导入和调度工具,它需

    2024年02月02日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包