当前位置: 首页 > news >正文

ClickHouse(16)ClickHouse日志引擎Log详细解析

日志引擎系列

这些引擎是为了需要写入许多小数据量(少于一百万行)的表的场景而开发的。

这系列的引擎有:

  • StripeLog
  • Log
  • TinyLog

共同属性

引擎:

  • 数据存储在磁盘上。

  • 写入时将数据追加在文件末尾。

  • 不支持突变操作,也就是更新。

  • 不支持索引。

    这意味着 `SELECT` 在范围查询时效率不高。
    
  • 非原子地写入数据。

    如果某些事情破坏了写操作,例如服务器的异常关闭,你将会得到一张包含了损坏数据的表。
    

差异

LogStripeLog 引擎支持:

  • 并发访问数据的锁。

    `INSERT` 请求执行过程中表会被锁定,并且其他的读写数据的请求都会等待直到锁定被解除。如果没有写数据的请求,任意数量的读请求都可以并发执行。
    
  • 并行读取数据。

    在读取数据时,ClickHouse 使用多线程。 每个线程处理不同的数据块。
    

Log 引擎为表中的每一列使用不同的文件。StripeLog 将所有的数据存储在一个文件中。因此 StripeLog 引擎在操作系统中使用更少的描述符,但是 Log 引擎提供更高的读性能。

TinyLog 引擎是该系列中最简单的引擎并且提供了最少的功能和最低的性能。TinyLog 引擎不支持并行读取和并发数据访问,并将每一列存储在不同的文件中。它比其余两种支持并行读取的引擎的读取速度更慢,并且使用了和 Log 引擎同样多的描述符。你可以在简单的低负载的情景下使用它。

LogTinyLog 的不同之处在于,«标记» 的小文件与列文件存在一起。这些标记写在每个数据块上,并且包含偏移量,这些偏移量指示从哪里开始读取文件以便跳过指定的行数。这使得可以在多个线程中读取表数据。对于并发数据访问,可以同时执行读取操作,而写入操作则阻塞读取和其它写入。Log引擎不支持索引。同样,如果写入表失败,则该表将被破坏,并且从该表读取将返回错误。Log引擎适用于临时数据,write-once 表以及测试或演示目的。

TinyLog

最简单的表引擎,用于将数据存储在磁盘上。每列都存储在单独的压缩文件中。写入时,数据将附加到文件末尾。

并发数据访问不受任何限制:

如果同时从表中读取并在不同的查询中写入,则读取操作将抛出异常
如果同时写入多个查询中的表,则数据将被破坏。
这种表引擎的典型用法是 write-once:首先只写入一次数据,然后根据需要多次读取。查询在单个流中执行。换句话说,此引擎适用于相对较小的表(建议最多1,000,000行)。如果您有许多小表,则使用此表引擎是适合的,因为它比Log引擎更简单(需要打开的文件更少)。当您拥有大量小表时,可能会导致性能低下,但在可能已经在其它 DBMS 时使用过,则您可能会发现切换使用 TinyLog 类型的表更容易。不支持索引。

在 Yandex.Metrica 中,TinyLog 表用于小批量处理的中间数据。

stripelog

在你需要写入许多小数据量(小于一百万行)的表的场景下使用这个引擎。

建表

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(column1_name [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],column2_name [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],...
) ENGINE = StripeLog

写数据 {#table_engines-stripelog-writing-the-data}

StripeLog 引擎将所有列存储在一个文件中。对每一次 Insert 请求,ClickHouse 将数据块追加在表文件的末尾,逐列写入。

ClickHouse 为每张表写入以下文件:

  • data.bin — 数据文件。
  • index.mrk — 带标记的文件。标记包含了已插入的每个数据块中每列的偏移量。

StripeLog 引擎不支持 ALTER UPDATEALTER DELETE 操作。

读数据 {#table_engines-stripelog-reading-the-data}

带标记的文件使得 ClickHouse 可以并行的读取数据。这意味着 SELECT 请求返回行的顺序是不可预测的。使用 ORDER BY 子句对行进行排序。

使用示例 {#table_engines-stripelog-example-of-use}

建表:

CREATE TABLE stripe_log_table
(timestamp DateTime,message_type String,message String
)
ENGINE = StripeLog

插入数据:

INSERT INTO stripe_log_table VALUES (now(),'REGULAR','The first regular message')
INSERT INTO stripe_log_table VALUES (now(),'REGULAR','The second regular message'),(now(),'WARNING','The first warning message')

我们使用两次 INSERT 请求从而在 data.bin 文件中创建两个数据块。

ClickHouse 在查询数据时使用多线程。每个线程读取单独的数据块并在完成后独立的返回结果行。这样的结果是,大多数情况下,输出中块的顺序和输入时相应块的顺序是不同的。例如:

SELECT * FROM stripe_log_table
┌───────────timestamp─┬─message_type─┬─message────────────────────┐
│ 2019-01-18 14:27:32 │ REGULAR      │ The second regular message │
│ 2019-01-18 14:34:53 │ WARNING      │ The first warning message  │
└─────────────────────┴──────────────┴────────────────────────────┘
┌───────────timestamp─┬─message_type─┬─message───────────────────┐
│ 2019-01-18 14:23:43 │ REGULAR      │ The first regular message │
└─────────────────────┴──────────────┴───────────────────────────┘

对结果排序(默认增序):

SELECT * FROM stripe_log_table ORDER BY timestamp
┌───────────timestamp─┬─message_type─┬─message────────────────────┐
│ 2019-01-18 14:23:43 │ REGULAR      │ The first regular message  │
│ 2019-01-18 14:27:32 │ REGULAR      │ The second regular message │
│ 2019-01-18 14:34:53 │ WARNING      │ The first warning message  │
└─────────────────────┴──────────────┴────────────────────────────┘

资料分享

ClickHouse经典中文文档分享

参考文章

  • ClickHouse(01)什么是ClickHouse,ClickHouse适用于什么场景
  • ClickHouse(02)ClickHouse架构设计介绍概述与ClickHouse数据分片设计
  • ClickHouse(03)ClickHouse怎么安装和部署
  • ClickHouse(04)如何搭建ClickHouse集群
  • ClickHouse(05)ClickHouse数据类型详解
  • ClickHouse(06)ClickHouse建表语句DDL详细解析
  • ClickHouse(07)ClickHouse数据库引擎解析
  • ClickHouse(08)ClickHouse表引擎概况
  • ClickHouse(09)ClickHouse合并树MergeTree家族表引擎之MergeTree详细解析
  • ClickHouse(10)ClickHouse合并树MergeTree家族表引擎之ReplacingMergeTree详细解析
  • ClickHouse(11)ClickHouse合并树MergeTree家族表引擎之SummingMergeTree详细解析
  • ClickHouse(12)ClickHouse合并树MergeTree家族表引擎之AggregatingMergeTree详细解析
  • ClickHouse(13)ClickHouse合并树MergeTree家族表引擎之CollapsingMergeTree详细解析
  • ClickHouse(14)ClickHouse合并树MergeTree家族表引擎之VersionedCollapsingMergeTree详细解析
  • ClickHouse(15)ClickHouse合并树MergeTree家族表引擎之GraphiteMergeTree详细解析
http://www.lryc.cn/news/252269.html

相关文章:

  • opencv项目开发实战--填补字母的空白
  • Wnmp本地搭建结合内网穿透实现远程访问本地Wnmp服务
  • C++ 红黑树的封装
  • MongoDB快速入门及其SpringBoot实战
  • Python网络爬虫练习
  • 《opencv实用探索·九》中值滤波简单理解
  • PC行内编辑
  • 鸿蒙开发:Stage模型开发-应用/组件级配置以及UIAbility组件初步使用【鸿蒙专栏-20】
  • Django回顾【五】
  • Python容器——字典
  • 基于Java SSM框架实现实现四六级英语报名系统项目【项目源码+论文说明】
  • 翻硬币(第四届蓝桥杯省赛C++B组)(java版)
  • 原生GPT本地及云端部署方式保姆级教程
  • Docker容器(一)概述
  • Facebook引流怎么做?写个脚本就好!
  • 自动化集成有哪些典型应用场景?
  • 探讨几种在CentOS 7上实现文件上传的方法
  • AWS EC2使用 instance profile 访问S3
  • python中函数式编程
  • Java_JDK8到JDK21各版本发行时间及重要特性
  • 03 数仓平台 Kafka
  • 2023年全国硕士研究生入学统一考试管理类专业学位联考逻辑试题——解析版
  • Matlab论文插图绘制模板第129期—函数网格曲面图
  • 无限移动的风景 css3 动画 鼠标移入暂停
  • Java基本数据类型、包装类及拆装箱详解
  • SIT2596,可替代LM2596,40V 输入 150KHz 3A 降压型电源转换器
  • python + mongodb使用入门
  • 焊接专业个人简历(通用25篇)
  • c++学习第四讲---函数提高
  • 如何使用cpolar+Plex在Windows系统上搭建私人媒体影音站点公网可访问