ClickHouse迎战十亿行数据的挑战

clickhouse 数据导入导出操作 在ClickHouse中处理CSV和TSV数据 ClickHouse支持从CSV导入和导出数据。由于 CSV 文件可以具有不同的格式细节,包括标题行、自定义分隔符和转义符号,因此 ClickHouse 提供了格式和设置来有效地解决每种情况。从 CSV 文件导入数据 在导入数据之前,让我们创建一个具有相关结构的表:CREATE TABLE sometable ( `path` String, `month` Date, `hits` UInt32 ) ENGINE = MergeTre 阅读详情

图片

本文字数:6782;估计阅读时间:17 分钟

作者:Dale McDiarmid

审校:庄晓东(魏庄)

本文在公众号【ClickHouseInc】首发

图片

本月初,Decodable 公司的 Gunnar Morling 提出了一项为期一月挑战,引起了广泛关注 - 编写一个 Java 程序,从一个包含十亿行信息的文本文件中检索温度测量值,并计算每个气象站的最低、平均和最高温度。虽然我们并非 Java 专家,但作为一家热衷于大数据和速度基准测试的公司,我们决定正式组织一个 ClickHouse 的团队来加入这一挑战!

尽管最初的挑战是使用 Java,Gunnar 开设了一个名为 "Show & Tell" 的 Github 讨论,以允许更广泛的技术贡献。我们也要感谢我们的社区成员,他们也响应了这一挑战。

遵循规则

在回应这一挑战时,我们尽量保持对最初挑战的认同。因此,我们在最终提交中包括了所有处理时间或数据加载时间。例如,仅提供表加载完成后的查询响应时间,而不考虑插入时间,感觉有点像……嗯,作弊 :)

Gunnar 在 Hetzner AX161 上执行测试,限制执行核心数为 8。尽管我很想为这项互联网挑战,专门购置一台专用的裸金属服务器,但我们感觉这可能有点过了。为了尽可能保持可比性,我们的示例使用 Hetzer 虚拟实例(专用 CPU),具有 8 个核心和 32GB 的内存。虽然是虚拟实例,但这些实例使用了 AMD EPYC-Milan 处理器,采用了 Zen3 架构 - 晚于 Hetzner AX161 提供的 AMD EPYC-Rome 7502P 处理器。

生成数据「下载」

用户可以按照原始说明生成 10 亿行的数据集。这需要 Java 21 并且需要运行一些命令。

在编写这篇博客时,我发现了 sdkman(https://sdkman.io/jdks),它简化了 Java 的安装过程,适用于那些没有预安装Java的人。

然而,生成 13GB 的 measurements.txt 文件相当慢,如下所示:

# clone and build generation tool. Output omitted.
git clone git@github.com:gunnarmorling/1brc.git
./mvnw clean verify
./create_measurements.sh 1000000000

Created file with 1,000,000,000 measurements in 395955 ms

出于 ClickHouse Local 在生成此文件方面速度的好奇,我们查看了源代码。站点及其平均温度的列表编译进了代码中,通过从均值和方差为 10 的高斯分布中采样来产生随机点。将原始站点数据提取到 CSV 文件中,并将其托管在 s3 上,使我们能够使用 INSERT INTO FUNCTION FILE 复制此逻辑。请注意使用 s3 函数将我们的站点读入 CTE,然后使用随机函数对这些结果进行采样。

INSERT INTO FUNCTION file('measurements.csv', CustomSeparated)
WITH (
  SELECT groupArray((station, avg)) FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/1brc/stations.csv')
) AS averages
SELECT
      averages[floor(randUniform(1, length(averages)))::Int64].1 as city,
      round(averages[floor(randUniform(1, length(averages)))::Int64].2 + (10 * SQRT(-2 * LOG(randCanonical(1))) * COS(2 * PI() * randCanonical(2))), 2) as temperature
FROM numbers(1_000_000_000) 
SETTINGS format_custom_field_delimiter=';', format_custom_escaping_rule='Raw'

0 rows in set. Elapsed: 57.856 sec. Processed 1.00 billion rows, 8.00 GB (17.28 million rows/s., 138.27 MB/s.)
Peak memory usage: 36.73 MiB.

以6.8倍的速度,这似乎值得分享!

一个经验丰富的 ClickHouse 用户可能会在这里使用 randNormal 函数。不幸的是,目前这需要均值和方差是常数。因此,我们使用 randCanonical 函数,并使用它来通过 Muller 变换对 Guassian 分布进行采样。

或者,用户可以直接从这里下载我们生成的文件的 gzip 压缩版本 :)「https://datasets-documentation.s3.eu-west-3.amazonaws.com/1brc/measurements.txt.gz」

仅限 ClickHouse Local

虽然许多用户熟悉 ClickHouse 作为部署在服务器上的实时数据仓库,但它也可以作为本地二进制文件 "Clickhouse Local" 用于对文件进行按需的数据分析查询。自从我们在一年多前的博客中描述了这个用例以来,这已经成为 ClickHouse 越来越受欢迎的应用。

ClickHouse Local 有控制台模式(通过运行 clickhouse local 可以访问),从中可以创建表并提供交互式查询反馈,还有一个专为与脚本和外部工具集成而设计的命令行界面。我们使用后者来对我们的 measurements.txt 进行采样。设置 `format_csv_delimiter=';'` 允许指定 CSV 文件的分隔符。

clickhouse local --query "SELECT city, temperature FROM file('measurements.txt', CSV, 'city String, temperature DECIMAL(8,1)') LIMIT 5 SETTINGS format_csv_delimiter=';'"
Mexicali    44.8
Hat Yai    29.4
Villahermosa    27.1
Fresno    31.7
Ouahigouya    29.3

计算每个城市的温度的最低值、最高值和平均值需要一个简单的 GROUP BY 查询。我们使用 -t 来确保包含时间信息。挑战要求以特定格式输出:

{Abha=-23.0/18.0/59.2, Abidjan=-16.2/26.0/67.3, Abéché=-10.0/29.4/69.0, Accra=-10.1/26.4/66.4, Addis Ababa=-23.7/16.0/67.0, Adelaide=-27.8/17.3/58.5, ...}

为了实现这一点,我们可以使用 CustomSeparated 输出格式和 format 函数。这避免了使用任何函数,比如 groupArray,它将行折叠成一行。下面,我们使用 ClickHouse Local 的控制台模式。

SELECT format('{}={}/{}/{}', city, min(temperature), round(avg(temperature), 2), max(temperature))
FROM file('measurements.txt', CSV, 'city String, temperature DECIMAL(8,1)')
GROUP BY city
ORDER BY city ASC
FORMAT CustomSeparated
SETTINGS 
  format_custom_result_before_delimiter = '{', 
  format_custom_result_after_delimiter = '}', 
  format_custom_row_between_delimiter = ', ', 
  format_custom_row_after_delimiter = '', 
  format_csv_delimiter = ';'

{Abha=-34.6/18/70.3, Abidjan=-22.8/25.99/73.5, Abéché=-25.3/29.4/80.1, Accra=-25.6/26.4/76.8, Addis Ababa=-38.3/16/67, Adelaide=-33.4/17.31/65.5, …}

413 rows in set. Elapsed: 27.671 sec. Processed 1.00 billion rows, 13.79 GB (36.14 million rows/s., 498.46 MB/s.)
Peak memory usage: 47.46 MiB.

27.6秒代表我们的基准测试。与 Java 基准相比,在相同的硬件上完成几乎需要 3 分钟。

./calculate_average_baseline.sh

real    2m59.364s
user    2m57.511s
sys    0m3.372s

提高性能

我们可以通过观察到我们的 CSV 文件不使用值转义来提高上述性能。因此,CSV 读取器是不必要的 - 我们可以简单地将每一行作为字符串读取,并使用分隔符 ; 访问相关的子字符串。

SELECT format('{}={}/{}/{}', city, min(temperature), round(avg(temperature), 2), max(temperature))
FROM
(
  SELECT
      substringIndex(line, ';', 1) AS city,
     substringIndex(line, ';', -1)::Decimal(8, 1) AS temperature
  FROM file('measurements.txt', LineAsString)
)
GROUP BY city
ORDER BY city ASC FORMAT CustomSeparated
SETTINGS 
  format_custom_result_before_delimiter = '{', 
  format_custom_result_after_delimiter = '}', 
  format_custom_row_between_delimiter = ', ', 
  format_custom_row_after_delimiter = '', 
  format_csv_delimiter = ';'

413 rows in set. Elapsed: 19.907 sec. Processed 1.00 billion rows, 13.79 GB (50.23 million rows/s., 692.86 MB/s.)
Peak memory usage: 132.20 MiB.

这将我们的执行时间减少到不到 20 秒!

测试其他方法

我们的 ClickHouse Local 方法对文件执行完整的线性扫描。在这里的另一种替代方法可能是在运行文件上的查询之前,先将文件加载到表中。也许并不奇怪,这并没有真正提高性能,因为查询实际上对数据进行了第二次扫描。因此,总加载和查询时间超过了 19 秒。

CREATE TABLE weather
(
  `city` String,
  `temperature` Decimal(8, 1)
)
ENGINE = Memory

INSERT INTO weather SELECT
  city,
  temperature
FROM
(
  SELECT
      splitByChar(';', line) AS vals,
      vals[1] AS city,
      CAST(vals[2], 'Decimal(8, 1)') AS temperature
  FROM file('measurements.txt', LineAsString)
)

0 rows in set. Elapsed: 21.219 sec. Processed 1.00 billion rows, 13.79 GB (47.13 million rows/s., 650.03 MB/s.)
Peak memory usage: 26.16 GiB.

SELECT
  city,
  min(temperature),
  avg(temperature),
  max(temperature)
FROM weather
GROUP BY city
ORDER BY city ASC
SETTINGS max_threads = 8
413 rows in set. Elapsed: 2.997 sec. Processed 970.54 million rows, 20.34 GB (323.82 million rows/s., 6.79 GB/s.)
Peak memory usage: 484.27 KiB.

请注意,我们在这里使用的是 Memory 表而不是经典的 MergeTree。鉴于数据集适应内存,查询不包含筛选条件(因此无法从 MergeTree 的稀疏索引中受益),我们可以使用这种引擎类型避免 I/O。

以上的明显好处是一旦数据加载到表中,用户就可以对数据发出任意查询。

最后,如果我们的目标查询计算最低值、最高值和平均值不够高效,我们可以将这项工作移到插入时使用 Materialized View。在这种情况下,一个名为 weather_mv 的 Materialized View 在数据插入时计算我们的统计信息。更具体地说,我们先前的聚合查询在数据块被插入时执行,结果(实际上是聚合状态)被发送到目标表 "weather_results",使用 AggregatingMergeTree 表引擎。对该表的查询将利用结果已经预先计算,从而实现了显着的更快的执行时间。

作为一种优化,接收我们数据的 weather 表可以使用 Null 引擎。这将导致行被丢弃,节省内存。

CREATE TABLE weather
(
    `city` String,
    `temperature` Decimal(8, 1)
)
ENGINE = Null

CREATE TABLE weather_results(
  city String,
  max AggregateFunction(max, Decimal(8, 1)),
  min AggregateFunction(min, Decimal(8, 1)),
  avg AggregateFunction(avg, Decimal(8, 1))
) ENGINE = AggregatingMergeTree ORDER BY tuple()

CREATE MATERIALIZED VIEW weather_mv TO weather_results
AS SELECT city, maxState(temperature) as max, minState(temperature) as min, avgState(temperature) as avg
FROM weather
GROUP BY city

INSERT INTO weather SELECT
  city,
  temperature
FROM
(
  SELECT
      splitByChar(';', line) AS vals,
      vals[1] AS city,
      CAST(vals[2], 'Decimal(8, 1)') AS temperature
  FROM file('measurements.txt', LineAsString)
)

0 rows in set. Elapsed: 26.569 sec. Processed 2.00 billion rows, 34.75 GB (75.27 million rows/s., 1.31 GB/s.)

我们对 weather_results 的后续查询需要使用 merge- 函数来组合我们的聚合状态。

SELECT format('{}={}/{}/{}', city, minMerge(min), round(avgMerge(avg), 2), maxMerge(max))
FROM weather_results
GROUP BY city
ORDER BY city ASC
FORMAT CustomSeparated
SETTINGS format_custom_result_before_delimiter = '{', format_custom_result_after_delimiter = '}', format_custom_row_between_delimiter = ', ', format_custom_row_after_delimiter = '', format_csv_delimiter = ';'

413 rows in set. Elapsed: 0.014 sec.

这给我们提供了一个正常的执行时间,这已经被其他实验报告过。然而,当结合我们的 26 秒加载时间时,我们仍然无法超过简单的用 ClickHouse Local 查询。

结论

我们已经官方回应了这个十亿行挑战。我们已经证明了:在与挑战规则相当的硬件上,ClickHouse Local 可以在约 19 秒内解决问题。虽然它并不能与专业解决方案相比,但这只需要你写几行 SQL。我们要借此机会感谢 Gunnar 在这个挑战中投入的努力和时间。

图片

​​联系我们

手机号:13910395701

邮箱:Tracy.Wang@clickhouse.com

满足您所有的在线分析列式数据库管理需求

代码挑战赛火爆外网,十亿行文本处理,冠军只用了1.5s 那么有没有办法可以移除stringAt调用呢?分析代码可以看到将站名生成String对象,是为了在HashMap中存储不同气象站的统计结果数据(作为key)。而HashMap的key的作用是计算hash值判断两个key是否相等如果要避免使用stringAt调用,那么就不得不抛弃HashMap,来实现自定义的哈希表结构。实际上,构造一个指定大小的采用开放地址法指定大小:不需要考虑容量扩张,因为比赛的气象站大小已经确定。 阅读详情

相关推荐

【open judge】【程设】魔兽世界三开战!

#程设 魔兽世界三---开战!--------原以为会很容易ac,没想到写了好久,看来自己的水平还是亟待提高啊!有几个比较有趣的点:1. typeid(#include<typeinfo>)还是比较好用的,特别是本题当战士为wolf,iceman, dragon, ninja时有特殊技能,那么用typeid判断一下就很方便了。2. 对于这种输出很复杂的问题,往往通过使用文件的输入输出再...

weixin_40841416的博客 6071

10亿数据秒级查询,ClickHouse太快了!

点击上方蓝色“终端研发部”,选择“设为星标”学最好的别人,做最好的我们“ClickHouse 在数据分析技术领域早已声名远扬,最近由于项目需求使用到了 ClickHouse 做分析数据库,...

这个时代,作为程序员可能要学习小程序 4511

嵌入式学习之QT学习---14 QT跨平台运行之把QT程序交叉编译到ARM开发板

想要把qt工程放到开发板上运行,就需要用到交叉编译。由于qt是跨平台的,所以只需要换个编译器编译一下就可以。 以“定时器”的例子为例,在移植之前还需要进行一个准备工作,在windows下运行的时候,电脑屏幕很大,但是运行的窗口只有一点点大,开发板也有外接屏幕,如何让运行窗口自动适配开发板的外接屏幕呢?令其占满屏幕显示,而不是一小块。 第一步:需要设置一下,先给ui布局,如果不布局,控件就不会随着屏幕的大小的变化而变化。 第二步:利用代码来获取屏幕的大小,给widget.cpp文件下添加如下代码 #inclu

qq_42822743的博客 5456

10 分钟内排序 10 亿行数据!开发者:用 ClickHouse 挑战成功

该文章讨论了如何在面对巨大数据量时,有效地使用 ClickHouse 来处理和存储数据。它详细介绍了 ClickHouse 的几个关键特性,包括对大规模数据加载的优化、通过使用字典来加速查询、以及如何利用 ClickHouse 处理超过一亿的唯一用户请求。文章通过具体实例,如 Admixer 的使用案例,展示了 ClickHouse 在实际应用中的性能和灵活性。原文链接:https://click...

优快云资讯 3018

基于wxWidgets框架,使用DialogBlocks建立OpenGL界面

前言 之前公司要求使用wxWidgets做GUI,基于OpenGL图形内核,开发三维可视化工具。目前初步开发工作基本已经完成,剩下都是完善了。这里记录一下最开始的框架搭建过程(当然是简化版啦)。wxWidgets结合OpenGL开发可以实现跨平台应用,再结合CMake和VS Code,整体开发工具用习惯了会感觉非常顺手。 界面编辑 首先,使用DialogBlocks新建一个工程,这里工程目录...

cyberobot的博客 2748

华为交换机实战:如何用ACL+流分类精准限制特定IP的网速(附完整命令)

本文详细介绍了华为交换机如何通过ACL+流分类技术实现精准IP限速,包括ACL规则配置、流分类关联、流行为定义及流策略应用等完整步骤。文章提供了实战命令和配置验证方法,帮助网络管理员有效管理带宽资源,解决特定IP占用过多带宽的问题。

weixin_29229055的博客 100

【大数据】clickhouse系列二创建表及导入数据

创建本地表 create table if not exists t_profile_local(user_id String,content String) ENGINE = MergeTree() ORDER BY tuple()SETTINGS index_granularity = 8192; 以上语句只在客户端本地节点创建表t_profile_local,所以称之为本地表, 创建复制表 create table if not exists t_profile_replica ON CLUSTER

北风之神的博客 3201

SAP GUI 字段遮罩功能详解及实现

默认情况下,系统使用作为掩码模式,遮罩整个字段内容长度;对于货币金额类型,掩码后会保留小数位并在整数位部分全部显示为,如****.**若需自定义掩码模式,可利用以下方式:维护“Maintain Masking Pattern”节点,在其中定义新的掩码方式(如:只露出后四位,其他位以X替代等);实现 BAdI(或类似命名,具体以系统版本为准)的方法,通过 ABAP 代码读取原始值,并依据业务逻辑生成掩码字符串返回,动态替换界面输出值;

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 707

现代数据栈,谁主沉浮?

2022年已经没有人谈大数据这个概念,不是它失败了,恰恰是因为它成功了。成功技术的吊诡之处在于,它最终会被认为是理所当然,消失在背景音中。随着SaaS的普及和深入,数据驱动成为共识,云计算以及云端数据仓库的发展,逐渐有了现代数据技术栈这个新的数据生态体系。现代数据栈(MDS)主要是在欧美,确切的来讲是美国近几年出现的一个称呼,我们可以把它理解为一套新的数据生态体系。现代数据技术栈通常是指构成云原生数据平台的一组技术,对比传统的数据平台,使用它们可以大大的降低复杂度,这个技术栈的构成组件

大数据,大模型,服务器,技术、架构,方案 2108

VSS shielding线可以floating吗?

shielding vss不打孔,就相当于dummy metal,如果周围有其他干扰线,他们影响了这段dummy metal,这段dummy metal仍然会对目标线产生干扰,bug的是,工具知道这段dummy是vss,那么计算寄生的时候仍然把它当vss,就有可能噪声没有完全消除,而用户又看不见。而真正接地的线,相当于一直是0,就不会对目标线产生干扰,一般加shield是在route之前,这时候shield能尽量覆盖目标线,等到绕线后再加就会出现shield只覆盖到一部分目标线的情况。

m0_61544122的博客 6633

LVS 负载均衡面试题及参考答案

什么是 LVS 负载均衡?它的主要作用是什么? LVS(Linux Virtual Server)是一个基于 Linux 内核的开源负载均衡项目。它通过将请求流量按照一定的算法分发到后端的多个真实服务器(Real Server)上,从而实现负载均衡的功能。 从原理上来说,LVS 工作在网络层和传输层之间。当客户端发起请求时,请求首先到达 LVS 服务器,LVS 会根据预先设定的规则和算法,比如轮询(Round - Robin)、加权轮询(Weighted Round - Robin)、最少连

大模型大数据攻城狮的专栏 1468

技术博客选题指南:从编程实战到AI大模型应用

在技术内容创作中,选题决定了博客的价值与传播力。从编程语言基础、框架实践到人工智能与大数据架构,每一个技术方向都需要结合工程落地场景。开发者常关注Python、Java、Go等语言的高效用法,也热衷于Spring Boot、MyBatis-Plus等框架的实战经验。与此同时,大模型与Agent工具正在重塑应用开发范式,基于RAG的问答系统成为热点。数据库与中间件是系统稳定的基石,ClickHouse等分布式引擎在数据分析中扮演关键角色。云计算与DevOps体系则保障了应用的高可用与持续交付。本文从这些通用技

weixin_33866037的博客 339

FOC 转子初始位置检测(图文详解)

什么是转子的初始位置? 其实转子的初始位置是不确定的,但是在电机启动的时候,我们需要得到电角度,这样才可以进行矢量控制;所以,这里将转子与A轴重合作为初始位置,此时电角度也恰好为零,具体如下图所示; ) 至于原理下面会详细分析,这样在转子到初始位置后,也可以得到准确的电角度,就可以实现磁场和转子的同步转动。 如何让转子运行到初始位置? 其实这是一个很简单的问题,在这里我将它放大了,简单地分析了一...

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 2万+

这波操作看麻了!十亿行数据,从71s到1.7s的优化之路。

首先,要优化 stringAt 方法,我们得知道它是干啥的。在经历了上一波优化之后,stringAt 目前在代码中的唯一作用就是为了获取气象站的名称。而获取到这个名称的唯一目的是看看当前的 HashMap 中有没有这个气象站的数据,如果没有就新建一个 StationStats 对象,如果有就把之前的 StationStats 对象拿出来进行数据维护。

dsgdauigfs的博客 1054

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java 如何应对十亿行数据?优化技巧大揭秘!

引言大约一年前,我偶然发现了“十亿行挑战”——一项友好却极具挑战性的任务,旨在测试读取并聚合十亿行数据集的速度。该数据集通常包含一个简单的键(例如属性 ID)和一个数值(例如价格),目标是为每个唯一键计算最小值、平均值和最大值。在性能调优领域,Java 长期以来一直是重量级选手。作为一种在企业环境中经过实战检验的语言,它在大规模工作负载和高效并发处理方面表现卓越。然而,我很好奇:我们能否优化简单的...

郑龙飞 820

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

火爆外网的“十亿行挑战“, C++大神用时0.77秒是如何做到的

十亿行挑战 (1BRC) 是Gunnar Morling于2024年1月1日对JAVA社区发起的编程挑战,探讨现代 Java 在处理10 亿行数据的文本文件,能走多远。C++软件工程师西蒙·托特(ŠIMON TÓTH )发起挑战,给出了自己的方案,从66秒优化到0.77秒,并记录整理了性能优化过程,对于C++应用程序的性能优化的过程,极具参考价值。

IeSneaker的专栏 1392

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

buf数组写入html文件,ClickHouse输入输出格式

ClickHouse可以接受和返回各种格式的数据。输入支持的格式可以用来解析提供给INSERT的数据,可以从文件备份表(如File, URL或HDFS)执行SELECT,或者读取外部字典。输出支持的格式可用于获取SELECT的结果,并支持执行INSERT文件的表中。以下是支持的格式:格式输入输出[TabSeparated]✔✔[TabSeparatedRaw]✔✔[TabSeparatedWith...

weixin_29357243的博客 679

ClickHouse函数整理(详细)

无标题.md 1、日期类函数  1.1 时间或日期截取函数(to)—— 返回非日期函数用途举例结果toYear()取日期或时间日期的年份toYear(toDateTime('2018-12-11 11:12:13'))             &nbsp

思过留痕 11万+

Clickhouse--数据输入输出格式实战

ClickHouse 可以接受多种数据格式,可以在 (INSERT(输入)) 以及 (SELECT(输出)) 请求中使用。 下列表格列出了支持的数据格式以及在 (INSERT(输入)) 以及 (SELECT(输出)) 请求中使用它们的方式 Format Input Output TabSeparated ✔ ✔ TabSeparatedRaw ✔ ✔ TabSeparatedWithNames ✔ ✔ TabSeparatedWithNamesAndTypes ✔ ✔ T.

qq_41018861的博客 2444

clickhouse简单了解及使用

一、clickhouse:日处理记录数:十亿级 1.开源的列式存储的数据管理系统 2.支持线性扩展 3.简单方便 4.高可靠性 5.容错(支持多主机异步复制,可以跨多个数据中心部署, 单个节点或整个数据中心的停机时间不会影响系统的读写性能) 二、关键功能-应用场景 特性: 深度存储 广告网络和RTB 采用列式存储 向量化查询执行 电信 数据压缩 数据压缩 ...

我是60岁程序员 2万+

clickhouse-client 命令参数说明

clickhouse-client 命令参数说明

pang_2899的博客 7545

clickhouseSQL语法

CREATE #方式1 CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] ( name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1], name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2], ... ) ...

杜海的博客 3423

ClickHouse走向AI数据栈的技术路线与工程边界

ClickHouse获得3.5亿美元融资,资本认可了列式分析引擎的商业价值,但工程问题更具体:一个为扫描聚合设计的引擎能否同时承载BI报表、可观测性日志与AI特征工程三类负载。文章从列存与向量化执行机制拆起,讨论稀疏索引与分区裁剪的代价模型、MergeTree家族引擎选型、副本与分片拓扑权衡、写入攒批去重与背压、物化视图增量聚合、宽表特征建模、向量检索与标量过滤协同、存算分离成本核算,并复盘六个真实失败案例,给出迁移落地五步法与运维边界建设建议。

搞定过:百亿级数据、万级QPS、零宕机、AI工业化。 296

可观测性数据落进对象存储:Proscia 案例拆解与 ClickHouse 自托管配置

SaaS 可观测性平台按 TB 计费,多数团队的日志指标只敢留 15 天。AWS 存储博客的 Proscia 案例给出参照:自建后保留改无限期、月记录量涨 13 倍,存储成本从 500 美元/TB 降到 5 美元。本文拆出其中两个不绑定云的设计——ClickHouse S3 disk 冷分层与 clickhouse-backup 备份,落到自建 RustFS 对象存储,配置块逐键对官方文档与源码核实,并诚实列出个案数字的边界。

分布式存储与RustFS的博客 686
上一篇: 线性回归-使用ClickHouse机器学习函数
下一篇: ClickHouse 24.1 版本发布说明
ClickHouseDB
博客等级 码龄3年 1707粉丝 320原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值