ClickHouse Engineering

36 篇内容

工程实践ClickHouse Engineering

Can your Postgres survive a bad query?

文章讨论 Postgres 在坏查询和内存压力下的可靠性,先解释 work_mem 按查询节点和后台进程分别生效、hash_mem_multiplier 与并行 worker 会成倍放大内存占用,并说明递归 CTE 的 UNION 去重哈希表无法落盘、会持续增长到查询结束。随后用一个约 1260 万节点的递归 UNION 查询,在 ClickHouse Managed Postgres、Cloud SQL、PlanetScale Postgres 和 Amazon RDS 上做并发压测,比较查询失败、会话失败和集群崩溃三种失败模式。结论是 ClickHouse 通过禁用内存 overcommit 并设置上限,让单个查询以 SQL ERROR 失败而集群保持存活;RDS 等则可能触发 OOM killer 并进入数分钟崩溃恢复。边界在于这是厂商自测,各服务的配置、内存上限和缓存策略不同,结论可能有利于自身策略。

推荐收录,因为文章既讲清了 Postgres work_mem、并行 worker 和递归 CTE 内存不可控的具体机制,又给出跨四家托管服务的可复现压测方法与失败模式分类。适合 DBA、SRE 和后端工程师在数据库选型、坏查询防护、内存上限与故障隔离设计时参考,但需警惕厂商自测和配置差异带来的公平性风险。

工程实践ClickHouse Engineering

chDB Durable Layer for agent memory

本文介绍 ClickHouse 团队为 agent memory 设计的 chDB Durable Layer。作者先复现问题:基于嵌入式 OLAP 引擎 chDB 构建的 agent memory 状态只能停留在单机磁盘,无法在 CI、短生命周期沙箱和第二台机器上复用,而已有方案(SQLite checkpointers、SQLite+Litestream、Postgres/pgvector/服务端 ClickHouse、Cloudflare Durable Objects、本地 DuckDB/chDB)在可移植性与本地热路径之间各有取舍。核心方案是“本地工作副本 + 对象存储权威副本”两层结构:查询仍在进程内 chDB 上执行,以显式 flush() 作为持久化边界,checkpoint() 折叠 WAL,head.json 配合条件写实现单写者租约与 fencing。文章给出 append-only 表建模、冷热分层、ZSTD 压缩(1.45GB 转录压至 521MiB)、本地查询比远程快 58 倍等实践数据,并以 ClickMem、Maple Local、ReplayHouse、vcfclick 为例。边界包括单写者、V1 WAL 要求确定性语句、不适合 OLTP 与多写者共享场景。

推荐收录,因为它从真实工程问题出发,给出可复用的架构取舍:本地工作副本与对象存储权威副本分工、显式 flush()/checkpoint() 持久化边界、基于 head.json 条件写的单写者租约,并附方案对比表、压缩与延迟实测以及建模最佳实践。适合为 agent/LLM 应用设计记忆与持久化层的工程师,以及需要嵌入式 OLAP 可恢复状态的读者;主要限制是仅适用单写者、单用户/单项目场景,多写者共享仍需服务端数据库。

工程实践ClickHouse Engineering

Postgres on NVMe: performance and the convergence of transactions and analytics

文章以 Postgres 在本地 NVMe 上的性能表现为切入点,在 482 GiB 数据集上对比 NVMe 与 gp3 EBS,测得 NVMe 吞吐约 9.2 倍、UPDATE 延迟 4.0 ms 对 36.9 ms。作者用 pg_stat_activity 和 CPU profile 解释:EBS 下大量后端阻塞在 DataFileRead,NVMe 将缓存未命中从毫秒级降到微秒级,并改善 VACUUM 与逻辑解码。针对本地 NVMe 的临时性,文章提出跨 AZ quorum 同步复制加 WAL-G 持续归档来保证持久性与可恢复性。随后论证存储加速只能提高行存上限,无法替代列存做大规模扫描,需用 CDC 将数据同步到 ClickHouse。适用时需注意 NVMe 容量受实例限制、复制与归档增加运维复杂度,且查询下推覆盖度需验证。

推荐收录:文章给出可复现的 benchmark 设计(pgbench 33,000、482 GiB、NVMe 对 EBS)和从 pg_stat_activity、CPU profile 到 VACUUM、逻辑解码的分层证据,并讨论本地 NVMe 临时性下的 quorum 复制与 WAL 归档方案。适合负责 PostgreSQL 性能、存储选型或 HTAP/CDC 架构的工程师,其中“存储解决 OLTP、列存解决 OLAP”的拆分逻辑可迁移。需注意文章来自 ClickHouse 厂商,benchmark 与产品推荐带有一定立场,pushdown 和运维复杂度仍需结合场景验证。

工具笔记ClickHouse Engineering

Loading Parquet data into MySQL with ClickHouse

文章介绍如何借助 clickhouse-local 与 ClickHouse 的 mysql 表函数,把 S3 上的 StackOverflow 投票 Parquet 数据直接写入并在 MySQL 中查询,因为 MySQL 本身没有原生导入 Parquet 的方式。作者用 Docker 启动 MySQL 8.4,下载 ClickHouse 二进制,并通过 ch-config.yaml 定义命名集合 mysql_demo 保存连接凭据。核心步骤包括用 DESCRIBE url() 探查 Parquet schema、在 MySQL 建表,再执行 INSERT INTO FUNCTION mysql(...) SELECT ... FROM url() 导入约 230 万行数据。文章重点区分两种查询方式:在 FROM 中写 ClickHouse 子查询时,ClickHouse 会解析并改写成 MySQL 合法 SQL;而通过 query() 传入字符串则原样下发,因此含 tuple 等 ClickHouse 特有函数会直接报错。作者也说明示例为本地演示环境,凭据以明文参数传入,生产系统应改用环境变量。

推荐收录,因为它给出可复现的完整方法,解决 MySQL 无法原生导入 Parquet 的真实数据搬运问题,并明确划出 mysql 表函数的两条边界:ClickHouse 子查询会被改写为 MySQL SQL,而 query() 字符串原样下发,这一区别容易踩坑。适合做 ETL、跨库迁移或用 clickhouse-local 做临时数据处理的工程师参考,命名集合与批量 INSERT 写法可直接迁移;不足是偏操作步骤,性能与生产安全约束讨论有限。

技术文章ClickHouse Engineering

AI Functions in ClickHouse: Upgrade your SQL to the AI age

本文介绍 ClickHouse 内置的 AI Functions 家族,让 SQL 引擎可直接调用 LLM 或 embedding 提供方,把模型调用变成类似 sum() 的普通函数,核心思路是"把模型搬到数据旁"而非把数据搬到模型。文本函数涵盖 aiClassify、aiExtract、aiGenerate、aiTranslate、aiFilter、aiRedact,向量函数涵盖 aiEmbed 与 aiSimilarity,通过 named collection 配置 OpenAI 兼容端点即可使用。作者用 Hacker News 数据集演示分类、过滤、摘要、翻译以及完整 RAG 循环(写入时嵌入、向量索引、cosineDistance 检索、生成答案)。文中还详述会话级配额设置(输入/输出 token、API 调用数、超限报错或软停),并说明 token 计数依赖 provider 上报 usage、重试计入调用配额、分布式查询在各分片独立计数。最后提醒 prompt injection、非确定性、成本随行数放大及 remote_url_allow_hosts 等上线注意事项。

推荐收录。文章并非纯功能公告,而是给出了 SQL 原生调用 LLM 的完整用法与边界:named collection 配置、库内 RAG 循环步骤、配额设置的精确语义(token 依赖 provider 上报、重试计入配额、软停产生默认值行),以及 prompt injection、非确定性和成本随行数放大的生产风险。适合在数仓内构建 AI 应用或做推理成本治理的工程师参考。

工程实践ClickHouse Engineering

ClickHouse Cloud vs. Snowflake: What drives the real-time performance-per-dollar gap

文章是 ClickHouse 团队 CostBench 的第二部分,对比 ClickHouse Cloud 与 Snowflake 在持续实时写入下的性能/成本差异。测试向两套系统灌入相同的 1132 亿行行情数据,速率约 100 万行/秒,并执行相同聚合与下钻查询,读侧资源尽量匹配到约 16 CPU。核心机制差异是 ClickHouse 在写入路径内完成排序和增量物化视图更新,Snowflake 的 Snowpipe Streaming 与异步 MV 刷新分离,MV 平均滞后约 1.4 分钟,聚合查询需在编译阶段补偿未刷新数据。结论称 ClickHouse 端到端实时性价比高 412 倍、聚合查询快 669 倍;但基准由厂商主导,Snowflake 资源估算和 fallback 成本归因需谨慎看待。

推荐收录,因为它给出了可核验的 CostBench 测试方法、相同负载和资源匹配信息,并具体解释了写入内增量 MV 与异步 MV 刷新导致查询时补偿的机制差异,而不仅是性能口号。适合实时数仓、OLAP 选型、性能成本评估方向的工程读者参考;但结论来自 ClickHouse 主导的对比,Snowflake 侧 CPU、fallback 和成本归因为估算,外推时需保留厂商立场风险。

工程实践ClickHouse Engineering

Measuring real-time performance per dollar under continuous load: CostBench’s first end-to-end results

本文介绍 CostBench 首轮端到端评测,聚焦持续负载下每美元实时性能。作者先界定查询就绪数据的三项准备(列式存储、排序与分块裁剪、预聚合),再提出新数据路径概念:在持续摄入数据的同时维护事件级物理布局与预聚合,让查询引擎读得更少、算得更少。评测用同一客户端按每秒约百万行的目标速率推送 1132 亿行 NBBO 股票行情,对比 ClickHouse Cloud、Snowflake、BigQuery 与 Redshift Serverless,统一 schema、排序键、查询集与调度,并把新数据路径成本、归一化查询服务成本和累计查询运行时合成一个越低越优的评分。结论是 ClickHouse Cloud 三项均最低,端到端性能每美元领先 412 至 1996 倍,仅查询侧差距为 32 至 101 倍。边界在于这是厂商自测,排除了存储成本,只覆盖推送式摄入,也未测试 Databricks。

推荐收录:文章公开了共享压测客户端、资源对齐策略、计费归一化公式与开源复现仓库,并给出查询就绪与新数据路径两个可迁移的分析框架,适合做实时分析系统设计和数据仓库选型的工程师参考。主要风险是厂商自测、结论明显偏向自家产品,且排除存储成本与拉取式摄入,建议结合后续逐家分析或独立评测交叉验证。

工程实践ClickHouse Engineering

Introducing WalShadow: Sub-second Postgres replication to ClickHouse from physical WAL

ClickHouse 发布开源引擎 WalShadow,直接消费 Postgres 物理 WAL 将数据复制到 ClickHouse,绕开逻辑复制槽与逻辑解码插件。其架构分四阶段:在影子 Postgres 实例中回放 catalog WAL 以维护实时 schema,并行解码堆记录,按表批量组装成 ClickHouse 原生 block,再由独立插入池并发写入。为在并行乱序下保持正确性,每行携带源 WAL 位置 _lsn,schema 变更与 truncate 等操作设置屏障等待前序数据落盘。官方基准(同区域 c8i.2xlarge)给出提交到可见延迟约 200ms、吞吐 28.9 万行/秒,对比 PeerDB 的约 10 秒与 12 万行/秒,并支持加列、改列名、删列、建表等 schema 演进。文章属产品发布稿,性能数据来自单表受限场景,未深入讨论失败模式与运维成本。

收录理由在于它给出了可迁移的 CDC 设计证据:物理 WAL 替代逻辑解码的四阶段流水线、用 _lsn 加屏障解决并行乱序正确性,以及带方法说明的延迟/吞吐基准(约 200ms、28.9 万行/秒 vs PeerDB 约 10s、12 万行/秒)。适合正在设计 Postgres→OLAP 实时同步链路的数据与平台工程师参考。需注意其厂商产品发布属性、单表基准的局限,以及托管版仍处私有预览,落地前应自行验证 schema 变更与故障恢复路径。

科研议题ClickHouse Engineering

The Agentic Analytics Benchmark: Measuring model accuracy and efficiency in analytical agents

文章发布 ClickHouse 开源的 agentic analytics 基准 harness data-agent-mnist,用 201 条来自内部分析代理 DWAINE 的真实问题,在合成数据仓库上评测 29 个模型。它指出代理式分析不同于 text-to-SQL:模型需自主发现 schema、多轮查询,并以结果集而非单条 gold SQL 评判。方法上通过筛选、匿名化、真值委员会、LLM-as-jury 和污染检测构建可复现评测,报告准确率、turn 预算、token/成本、延迟和失败模式。结果显示 Claude Fable 5.1 以 76.6% 居首,前沿模型仍占优,但成本可差 52 倍,规划错误是主要失败原因。该基准强调需在自己的数据仓库上运行,局限是真值依赖模型委员会而非人工审计,合成环境可能偏离生产。

推荐收录:文章给出可复用的开源 benchmark harness 和完整方法论,包括真实问题筛选、匿名化合成数据仓库、真值委员会、LLM-as-jury 与污染检测,并公开 29 个模型在准确率、成本、延迟和失败模式上的可比较结果。对构建分析代理、选型 LLM 或设计 AI 评测体系的读者,可直接迁移其评测框架和“规划错误优先”的结论。局限是真值依赖模型委员会而非人工审计,合成环境可能偏离真实生产。

工程实践ClickHouse Engineering

How MCP Toolbox turns agent text into ClickHouse vectors

文章介绍 Google 开源的 MCP Toolbox for Databases 如何与 ClickHouse 集成,把智能体输入的自然语言在服务端转换为向量并做语义检索。核心机制是在 YAML 中声明 Gemini 嵌入模型,并用 embeddedBy / valueFromParam 让工具参数自动嵌入文本,再以 []float32 绑定 SQL 占位符,配合 Array(Float32)、cosineDistance 和 HNSW 索引返回排序结果。作者以 57 篇跨五个主题的文档实测,验证效果并量化嵌入列压缩率低、小数据量下 HNSW 索引收益有限等开销。生产注意事项包括离线批量嵌入、为搜索设置距离阈值、参数由驱动转义而非服务端绑定,以及仅支持 Gemini、taskType 硬编码为 SEMANTIC_SIMILARITY、REST 接口需显式开启等限制。

推荐收录,因为它提供了可复现的端到端配置、57 篇文档实测、查询日志与压缩/索引开销分析,而不只是产品介绍。适合 AI 工程、数据库和 Agent 开发者理解 MCP 工具层如何把 ClickHouse 文本表变成语义搜索工具。主要风险是内容绑定 Toolbox 1.9.0、Gemini 唯一嵌入供应商且检索任务类型不可调。

工程实践ClickHouse Engineering

Build a real-time market data app with ClickHouse and Massive

文章以构建实时行情 tick 应用为主线,展示如何用 Massive(原 Polygon.io)WebSocket 订阅股票 trades 与 quotes,并用 ClickHouse 存储、Node.js/React 后端与可视化。作者给出 quotes/trades 表结构,以 sym 和一分钟时间桶设计 MergeTree 排序键,比较同步与异步插入后采用客户端批量同步写入。查询端用 argMax/argMin 结合时间戳与序列号生成实时行情表,并按两分钟窗口聚合 OHLCV;还演示 AggregatingMergeTree 物化视图预计算 1 分钟 OHLCV、摄入延迟监控与扩展建议。不足是示例缺少持久缓冲、重放、去重和鉴权,也不处理取消/更正或官方 OHLCV 重建,生产化需补齐可靠性设计。

推荐收录。文章提供了可运行的完整示例和关键设计细节:从 WebSocket 订阅、表结构与排序键、同步/异步插入取舍,到实时行情与 K 线查询、物化视图和延迟监控,均有代码与边界说明,适合构建实时分析、行情数据或 OLAP 摄取管道的工程师参考。其模式可迁移到其他高频事件流场景,但需注意示例本身不是生产级方案,缺少鉴权、持久缓冲和重放去重等能力。

技术文章ClickHouse Engineering

ClickHouse as a streaming HTTP API

文章以英国房价数据集为例,演示如何用 ClickHouse 26.8 新增能力把它本身做成一个流式 HTTP API。核心手段包括 CREATE HANDLER 定义命名端点、在查询串与 URL 路径中传类型化参数({name:Type}、正则路径捕获),以及用 filter、select、sort、order、page、output_format 等设置在改 SQL 的前提下修改结果。作者还介绍了把表直接暴露为路径端点,以及用 framing_output_format(JSONEachPacketString 与 EventStream/SSE)在同一响应中流式传输数据包与进度包,并说明进度包需调小 interactive_delay 才可见。安全部分讲解了处理器按调用者权限执行、用 SQL SECURITY DEFINER 视图只暴露聚合结果而不泄露底表,以及通过 query_log、user_query_log 观测请求。结论是:仅当 API 只暴露受控查询时可省去中间层,若含业务逻辑、编排或应用校验仍需保留应用层,且建表建处理器时只做语法检查、不做语义分析。

推荐收录:文章给出了从建表、建处理器、参数化、结果修改到流式响应、权限控制与日志观测的完整可复现流程,并明确点出何时可以去掉中间 API 层、何时仍需要应用层,边界清晰。适合构建数据库直连数据服务、流式接口或轻量 API 的工程师参考,其中的分帧输出格式、DEFINER 视图授权与结果修改设置可迁移到其他数据服务设计。

技术文章ClickHouse Engineering

Pipelined SQL in ClickHouse 26.8

文章介绍 ClickHouse 26.8 引入的管道式 SQL:用 `|>` 操作符把查询写成一系列显式变换。作者以英国房价数据集为例,对比传统 SELECT 开头、FROM 开头和管道式三种写法,并借助 EXPLAIN SYNTAX 展示管道查询会被翻译成嵌套的标准 SQL,但中间结果不会被物化,整体仍会被优化后执行。文中还说明 EXTEND 可追加计算列、聚合别名能在下一阶段复用从而免写 CTE 或嵌套子查询,并强调阶段顺序会改变语义(如在第二级聚合前插入 LIMIT 会使平均值只基于非确定性的中间子集)。管道语法可用于子查询、视图和 INSERT…SELECT。文章偏教程性质,未提供性能对比或与其他 SQL 方言的深入比较。

推荐收录,文章给出了管道式 SQL 的翻译机制(EXPLAIN SYNTAX 显示为嵌套 SELECT 且不物化中间结果)、EXTEND 与聚合别名复用等可直接套用的写法,并明确指出阶段顺序和非确定性 LIMIT 的陷阱,适合 ClickHouse 使用者与数据工程师快速评估该语法。局限是缺少性能数据与更细的语法边界分析。

技术文章ClickHouse Engineering

New system views in PostgreSQL 19

文章系统介绍 PostgreSQL 19 新增的四个系统视图,并结合作者亲自演示给出查询示例与语义边界。pg_stat_lock 提供按锁类型聚合的集群级锁等待统计,但 waits 与 wait_time 仅统计等待超过 deadlock_timeout 且最终成功的锁,fastpath_exceeded 可提示分区密集负载需调高 max_locks_per_transaction。pg_stat_recovery 以单次原子快照返回备库恢复状态,解决了多次函数调用间数值不一致的问题;pg_stat_autovacuum_scores 暴露新的 autovacuum 优先级评分与各分量权重;pg_dsm_registry_allocations 让运行时动态共享内存分配可见。作者提醒 PG19 仍处 beta、列名可能变更,且评分视图基于当前统计,只是 autovacuum 行为的提示而非保证。

推荐收录。文章不止罗列新视图,还用可复现的会话示例讲清语义细节与陷阱,例如 pg_stat_lock 只在等待超过 deadlock_timeout 时计数、fastpath_exceeded 与 max_locks_per_transaction 的关联,以及评分视图的近似性。适合 DBA、SRE 和构建 Postgres 监控与 HA 工具的读者,作为升级 PG19 时观测能力的参考。

工程实践ClickHouse Engineering

So, is ClickHouse winning the observability wars?

本文是 ClickHouse 团队对 Mat Duggan、Charity Majors 提出的“ClickHouse 正在赢得可观测性战争”观点的回应与剖析,明确“胜利”仅限定在存储与查询层。文章解释列式架构为何契合可观测性数据:按列存储与排序键利于压缩编码,稀疏主索引与跳数索引减少 I/O,向量化执行、SIMD 与跨分片并行加速聚合,并缓解高基数问题。还讨论了全文检索倒排索引、单库承载日志/追踪/部分指标、SQL 表达力与 Apache 2.0 许可带来的采纳优势。作者也坦承边界:Prometheus 式指标的 PromQL 兼容仍是最大缺口,TimeSeries 引擎与 API 尚不稳定,数据库本身不等于好的可观测性产品,小团队或自建引擎的厂商未必适用,并指出 Agent 工作负载带来低延迟、高并发与全保真留存的新要求。

推荐收录。文章虽出自厂商博客,但系统梳理了列式存储契合可观测性数据的机制——压缩、索引裁剪、向量化、并行聚合与高基数处理,并较诚实地指出 PromQL 兼容、ordering key 与 schema 设计等边界,适合负责可观测性平台或日志/追踪存储选型的工程师参考。其架构权衡与“何时不适用”的判断有可迁移价值,但读者需注意其自证立场与客户证言带来的偏向。

技术文章ClickHouse Engineering

What's new in the ClickHouse .NET Driver: the road from 1.0 to 1.3

文章梳理 ClickHouse .NET 驱动从 1.0 到 1.3 的演进,核心是类型安全与可扩展性。它用 POCO 注册取代 object[] 手写列映射,实现强类型插入和读取;并新增 IParameterTypeResolver、IParameterFormatter、IReadValueConverter 三个扩展点,分别控制参数类型推断、序列化和读取值转换。类型支持上加入多维数组、ValueTuple 和 Identifier 参数;正确性上修复 DateTime 时区被服务端 session_timezone 平移的破坏性变更及 Variant NULL 等问题。性能上允许跳过插入 schema 探测,并将默认 ReadBufferSize 从 512 KiB 降至 8 KiB,显著降低 LOH 分配与 GC 压力。文章还介绍 EF Core、Serilog 等集成和路线图,适合 .NET 数据开发与客户端 API 设计参考;作为版本发布说明,部分 API 细节会随版本更新而过时。

推荐收录,因为文章用大量代码示例和基准数据说明 .NET 驱动的具体工程决策:POCO 映射与三个可插拔扩展点的 API 设计、ReadBufferSize 从 512 KiB 降至 8 KiB 带来的 LOH 与 GC 优化,以及 DateTime 时区语义的破坏性修正。这些内容对使用 ClickHouse 的 .NET 开发者和设计数据库客户端、序列化管道的工程师有直接的可迁移价值;但它是版本发布说明,具体 API 细节会随驱动版本演进而过时,建议结合最新文档使用。

工程实践ClickHouse Engineering

Ensuring reliable OpenTelemetry ingestion at scale

ClickHouse 团队复盘内部可观测性平台 LogHouse 的 OpenTelemetry 摄取管道三次演进。第一版 agent+gateway 架构在 5000 万 events/s 规模下无法承受 ClickHouse 反压而频繁 OOM;第二版启用 collector 本地 WAL,需改造成 StatefulSet,1TiB 积压约需 4 小时排空,且 FIFO 顺序阻塞最新数据,只能截断 WAL 丢数据。团队放弃引入 Kafka,改用基于 S3 的优先级故障转移:仅在 ClickHouse 反压时由 failover connector 溢出到对象存储,再通过 SQS 事件通知由独立 catchup collector 回灌,规避常态 PUT 成本。文中给出完整 collector 配置与一小时停机 gameday 验证结果,也指出恢复期无法定位具体缺失数据、新区域需额外基础设施等局限。

推荐收录:文章完整呈现从默认两层采集架构到自研 S3 溢出方案的取舍链条,给出 5000 万 events/s、1TiB 积压需 4 小时排空、每年 10-50 万美元 PUT 成本等具体数字,并用一小时停机 gameday 验证无数据丢失。对负责可观测性采集、高吞吐数据管道或 ClickHouse/OTel 落地的工程师,其 failover connector 的队列开关顺序、优先级路由和 catchup 回灌设计可直接迁移。

技术文章ClickHouse Engineering

Read your writes: WAIT FOR in PostgreSQL 19

文章介绍 PostgreSQL 19 新增的 WAIT FOR 命令,用于在异步流复制下实现 read-your-writes 一致性。作者先描述陈旧读问题:主库提交后从库需重放 WAL 才能看到变更,并对比 synchronous_commit=remote_apply、应用侧轮询 pg_last_wal_replay_lsn()、直接读主库三种旧方案在延迟与扩展性上的代价。核心方法是在主库写入后用 pg_current_wal_insert_lsn() 取 LSN,把它传给从库会话执行 WAIT FOR,阻塞至 WAL 重放到该位置;命令支持 standby_replay/standby_write/standby_flush/primary_flush 四种模式及 TIMEOUT、NO_THROW 选项。文章还解释它必须是顶层工具命令的原因:会话持有快照会阻塞 WAL 重放,形成自死锁,因此不能放进函数、过程或高隔离级别事务。边界在于 PostgreSQL 19 仍处 beta、细节可能变化,且 LSN 比较不识别 timeline,主从切换后需谨慎对待。

该文以官方文档、SQL 示例和提交历史为依据,给出 WAIT FOR 的可用语法、四种等待模式与 LSN 传递方式,并深入解释“必须顶层运行、不能持有快照”的自死锁成因,属于可长期复用的数据库机制解析。适合使用 PostgreSQL 异步复制、希望在不付同步复制开销下获得读己之写一致性的后端与 DBA 读者,也可迁移到连接池或协议感知代理注入 WAIT FOR 的设计;需注意其基于 beta 版本且 LSN 不识别 timeline。

工程实践ClickHouse Engineering

ClickGap: Autonomous QA for ClickHouse

文章复盘 ClickHouse 自研自主 QA 智能体 ClickGap 的构建过程:它监听合并流,对每个已合并 PR 用真实构建设计并执行测试、二分定位引入回归的提交,并在无人工确认下向公开仓库提交 issue 与 PR,五个月内产出约 500 个 issue、200 余个覆盖类 PR,其中 200 多个 issue 以关联修复 PR 关闭。重点并非模型能力,而是如何让结论可信:任何发现须先通过十道门禁(可复现测试、有效引用、全文件阅读、调用方分析、多路检索既有测试、对抗式审查、历史误报比对等),其中八道以确定性代码实现,只有覆盖杀灭测试与对抗裁决依赖模型判断。作者还描述了影响版本矩阵与二分、三层记忆结构及 Loom 记忆服务、按召回率与维护者响应率节流的成本模型,以及私仓实例冷启动与命名空间单向隔离。主要边界是方法高度依赖单一代码库的领域知识,记忆能否跨代码库迁移仍未有定论。

推荐收录:文章以真实运营数据(约 500 个 issue、200+ 关联修复、约 200 个覆盖 PR)和具体缺陷案例(gini 语义变更、skip index 失效、14.6–30.9% 性能回归)支撑,完整展示了把 LLM 代理接入高风险 CI 的工程取舍。适合构建 AI 代码审查/QA 系统、SRE 与数据库内核维护者,其中十道门禁、确定性优先、对抗式审查和基于结果的记忆反馈可直接迁移;需注意其精度主要来自单库领域知识,跨代码库复用仍待验证。

技术文章ClickHouse Engineering

ClickHouse Release 26.7

文章是 ClickHouse 26.7 版本发布说明,主体是对查询执行与向量检索内部优化的解析。它把按序聚合与新增的 limit 下推融合,使 GROUP BY…ORDER BY…LIMIT 成为可提前终止的流式流水线;JOIN 新增构建键驱动的探测端 granule 裁剪、哈希表行引用压缩与 dpsub 连接顺序算法;QBit 引入 Int8 量化、跨步存储、Hadamard 旋转与量化编解码器。文中用 TPC-H 与 HackerNews 数据集给出基准,称 Top-N 提速 313 倍、峰值内存降 592 倍,JOIN 提速 6.2 倍。还简述短语位置索引、EXPLAIN ANALYZE、Remote 引擎和 URL 统一等特性,并标注部分能力为实验性。

推荐收录:虽为版本发布说明,但每项优化都给出机制解释(如按序聚合与 LIMIT 下推融合、运行期过滤器驱动 granule 裁剪)和可复现的 TPC-H/HackerNews 基准,属于有边界、可验证的工程性能证据。适合数据库内核、OLAP 查询优化与向量检索方向读者;排序键前缀聚合、构建侧过滤下推等思路可迁移。主要风险是性能倍数依赖特定数据集与硬件,不宜直接外推。

工程实践ClickHouse Engineering

What else runs on your Postgres server, and how do we stop it from taking the database down?

文章讨论 ClickHouse Managed Postgres 如何在同一个 VM 上隔离 Postgres 与周边支撑进程(PgBouncer、WAL-G 备份代理、各类 exporter、本地 Prometheus、日志收集器和看门狗),避免它们反过来拖垮数据库。核心是三层内存防护:Go 运行时的 GOMEMLIMIT 先触发更积极的 GC,cgroup v2 的 memory.high 触发直接回收与限流,memory.max 作为硬上限并在该 cgroup 内触发 OOM,从而把 OOM 受害者限定在支撑服务而非 Postgres。CPU 用调度权重、备份缓冲区固定比例、日志内存限制和导出指标白名单分别设卡;磁盘打满时看门狗读取 pg_stat_activity 终止普通应用会话,但豁免复制与监控用户以保持 WAL 流和可观测性。局限是偏设计说明,缺少压测与故障复盘数据。

推荐收录:文章给出了可迁移的资源隔离模型——运行时预算加 cgroup 软硬上限、资源白名单、带豁免的应急终止路径,并逐条说明每种边界存在的理由。对自建或托管 Postgres、需要把监控备份等边车进程与主库共置的 SRE 和 DBA 读者有直接参考价值。主要不足是缺少压测与故障复盘数据,结论偏经验性。

工程实践ClickHouse Engineering

POSETTE Talk Recap - Postgres Isn't Slow. Your Storage Is

文章复盘 POSETTE 2026 演讲,围绕 PostgreSQL 规模化后的五类症状(写入变慢、P95 读延迟不稳、autovacuum 落后、checkpoint 争抢 I/O、逻辑复制积压),论证根因常被误判,实际多来自存储。作者用 8 个相同 m6id.4xlarge 集群、3.3 亿行 pgbench 随机 UPDATE 负载,对比本地 NVMe 与 3000 IOPS 的 baseline gp3 EBS,结果 NVMe 中位 16,030 TPS 对 EBS 1,734 TPS(约 9.24×),事务中位延迟从 36.9ms 降到 4.0ms。延迟拆解显示差距主要来自页读取、WAL fsync 与锁/调度等待,CPU 本身耗时接近;等待事件与 CPU profile 也印证 EBS 更多进程处于离 CPU 等待。作者随后给出本地 NVMe 生产架构:quorum 双 standby 同步复制、WAL-G 持续备份至独立对象存储,并明确结论仅适用于该负载与存储配置。

推荐收录:文章给出了可复现的对照实验设置、量化指标(TPS、延迟拆解、等待事件、CPU profile)以及面向生产的架构取舍,而非单纯观点宣导或产品广告。适合运行大规模 PostgreSQL、关注存储选型与高可用设计的数据库/SRE 读者,其“数据库与存储一起诊断”的思路及 NVMe+quorum 复制+对象存储备份的组合可迁移到类似系统;但需注意基准使用 3000 IOPS 基线 gp3,不同 EBS 配置结论会变化。

技术文章ClickHouse Engineering

What's New with Monitoring in PostgreSQL 19

文章梳理 PostgreSQL 19 的监控与可观测性改进:log_lock_waits 默认开启、log_min_messages 可按进程类型分级、autovacuum 与 autoanalyze 日志分离。pg_stat_wal 新增 wal_fpi_bytes 统计全页镜像字节数,并引入 CopyFromRead、CopyToWrite、WaitForWalWrite 等新等待事件。作者还解释 WAL 全页镜像为何主导 WAL 体积、multixact 膨胀如何判读,以及远程复制/FDW 消息统一格式化和回卷告警阈值提高到 1 亿的变化。文末给出面向日志解析、指标采集、等待事件字典与告警阈值的升级检查清单,但内容基于 beta 版,细节可能调整。

推荐收录,因为文章不仅罗列 PostgreSQL 19 的监控变更,还结合提交记录解释 WAL 全页镜像、multixact 膨胀等底层机制,并给出可执行的工具升级清单。适合数据库运维、SRE 与可观测性工具开发者在升级前排查兼容性风险;需注意内容基于 beta 版,最终以正式发行说明为准。

工程实践ClickHouse Engineering

Why strict memory overcommit matters for Postgres

文章解释 Linux 内存 overcommit 策略为何对 Postgres 格外关键:默认策略下 OOM killer 会 SIGKILL 某个 backend,而 Postgres 只能假设共享内存段可能已损坏,于是终止所有 backend 并走崩溃恢复,等于整个实例重启。严格 overcommit(vm.overcommit_memory=2)让内核在物理内存耗尽前就以 ENOMEM 拒绝分配,Postgres 将其视为普通错误,仅报错并回滚当前事务。作者在同一台 EC2(m7i.2xlarge)上用相同 pgbench 负载对比两种策略,并给出 commit limit 的推导:先扣除预留的 huge pages,再按剩余内存的 80% 加 2GB 作为 sidecar 头寸,约为总内存的 60% 加 2GB。实验显示默认策略下 20 个旁观连接全部被断开、新连接中断约 30 秒,严格策略下仅 1 个查询失败、0 个连接受影响,且两者吞吐差异落在噪声范围内。边界是结论基于单一硬件与特定 shared_buffers、huge pages 配置。

推荐收录:文章用同一台 EC2 上默认与严格 overcommit 的对照实验,给出 CommitLimit 推导依据、OOM 杀死 backend 后的崩溃恢复日志以及 pgbench 吞吐对比,证据完整而非泛泛而谈。适合负责 Postgres/Linux 生产部署的 DBA 与 SRE,可把内存耗尽的影响从实例级重启降为单查询失败;限额计算与验证方法也可迁移到其他数据库。风险是结论依赖单一硬件与 huge pages 配置,需按实际内存布局重新核算。

工程实践ClickHouse Engineering

Announcing support for ClickStack in the ClickHouse Terraform provider

本文是 ClickHouse 工程博客,宣布在官方 Terraform provider(ClickHouse/clickhouse,v3.25 起 beta)中新增 ClickStack 资源支持,可把仪表盘、告警、数据源、已保存搜索、连接与 Webhook 纳入版本控制和代码评审。核心工程取舍是:不新建独立 provider,而是作为独立服务模块并入现有 provider,以复用发布、测试、文档与鉴权路径;同时为支撑代码生成和校验,ClickStack API 改用命名类型、统一整数字段并输出结构化错误。鉴权区分 Cloud(组织 ID、Cloud API Key、服务 ID)与自托管(endpoint、个人 API Key、team)。文中给出创建仪表盘、plan 阶段调用校验 API、terraform import 及批量导入既有资源的示例,并说明风险边界:功能仍为 beta,UI 侧编辑不会被识别为漂移,可能被后续 apply 覆盖。

推荐收录,因为它不仅介绍功能,还交代了 provider 合并而非重发、API 契约调整(命名类型、结构化错误)和 plan 阶段校验等具体工程决策,并附可执行的 Terraform 配置、import 与批量导入流程。适合用 IaC 管理可观测性配置的平台/SRE 读者借鉴,可迁移价值是把仪表盘与告警当作代码治理;主要风险是内容偏厂商发布、功能处于 beta,读者需结合官方文档确认行为变化。

工程实践ClickHouse Engineering

What's new in pg_clickhouse v0.10.0: Subqueries, TPC-H Speedups, C Driver, and Aggregates

文章介绍 pg_clickhouse v0.10.0 的更新,重点是扩大 PostgreSQL 查询向 ClickHouse 下推的范围。作者以 TPC-H 为度量,将完全下推的查询从 22 条中的 12 条提升到 16 条;Q17 从 32.7 秒降至 37 毫秒,并快于原生 PostgreSQL 的 2.1 秒。技术核心是把相关子查询与 NOT IN 下推为半连接/反连接,同时用额外空值守卫弥合 PostgreSQL 三值逻辑与 ClickHouse 二值逻辑在 NULL 上的语义差异。工程侧还改用 clickhouse-c 重写 C 驱动,统一 HTTP 与二进制 Native 协议,修复并发扫描连接冲突,并扩展统计聚合、有序集聚合和分区聚合下推。文章明确仍剩 6 条 TPC-H 查询未下推,受限于 join tree 两侧遍历,且相关子查询要求 ClickHouse 25.8 以上,否则回退本地执行。

推荐收录:文章不仅列出 pg_clickhouse 新功能,还给出可验证的 TPC-H 性能改进(Q17 32.7s→37ms)、三值/二值逻辑差异导致的正确性陷阱及守卫实现,以及驱动层从 C++ 到 C 的架构权衡和并发修复。对使用 PostgreSQL FDW、构建异构数据库查询下推、OLAP 加速或数据库扩展开发的工程师具有直接参考价值,其语义兼容性验证思路可迁移到其他数据源集成场景。

工程实践ClickHouse Engineering

What is WAL backpressure, and why does ClickHouse Managed Postgres need it?

文章解释 ClickHouse Managed Postgres 为何以及如何对 Postgres 施加 WAL 写入背压。Postgres 先把所有变更写入 WAL,归档器再把完成的段上传到对象存储,未上传的段无法删除;一旦写入快于归档,WAL 会堆积直至撑满磁盘,而磁盘耗尽会触发 PANIC 导致实例宕机。系统用一个 systemd 定时器每 15 秒统计积压段数,通过 cgroup v2 I/O 控制器按 80%/50%/20% 三档限制客户端后端的写带宽,并把归档、检查点、日志等排空路径按进程名划入不受限的 immune 组。作者在单台 m7i.2xlarge、500MB/s gp3 上以限速 4MB/s 的 archive_command 做 35 分钟 pgbench 实验,验证分级限流按阈值触发、积压清零后自动解除、数据盘始终未超 33%。文中也指出一个边界:该负载写入几乎全是 WAL,限流对吞吐的削减远大于对 WAL 生成的抑制(仅约 10%),效果取决于写负载的数据密度。

推荐收录。文章把“WAL 归档跟不上会导致磁盘写满并 PANIC”这一真实运维风险,拆解为基于 cgroup v2 的分级写带宽限流方案,并给出可复现的 35 分钟压测时间线、cgroup 分类证据和限流对 WAL 生成抑制有限的明确边界。适合负责 Postgres/数据库托管、可靠性与容量控制的工程师,其中“不限制排空路径、只在数据面自我保护、按积压分级降速”的取舍可迁移到其他写入放大与异步归档场景。

工程实践ClickHouse Engineering

Fixed cadence to seconds: making ClickHouse Cloud autoscaling more reactive

文章复盘 ClickHouse Cloud 如何把自动扩缩容推荐服务从固定定时轮询改造成秒级反应式架构。原实现按固定节奏扫描全部服务,导致周期之间发生 OOM 或负载突增时必须等到下一次 tick 才能扩容,问题本质是延迟而非推荐逻辑错误。作者复用 Kubernetes 生态的 controller-runtime 作为通用事件处理引擎,把周期性扫描与反应式快路径都抽象为 source,统一投递到带键去重、指数退避和并发上限的工作队列,由同一个幂等 reconcile 函数产出推荐,因此无需自研触发协调机制。反应式信号以事件行写入 ClickHouse 专用小表,由物化视图在写入时过滤越阈指标,source 每几秒执行一次五分钟窗口查询,使关键事件在数秒内触发扩容;周期性全量扫描仍保留作为安全网与缩容兜底。文章也明确边界:工作队列仅存在于单进程内存,无持久化与重放,它是电平触发的 reconcile 引擎而非流处理器,不支持事件时间窗口、join 或跨事件聚合,轮询间隔构成反应速度下限;若未来需要保证投递、严格顺序或状态化窗口关联,应迁移到流式平台。

推荐收录:文章给出完整的问题定义、架构改造路径和可复现的 Go 与 SQL 片段,把“用 controller-runtime 当通用事件引擎、用 ClickHouse 存反应式信号”这一非显然选择连同去重、退避、并发控制的收益讲清楚。对做自动扩缩容、Kubernetes 控制器或实时信号管道的工程师有直接迁移价值;同时明确标注内存队列无持久化、轮询间隔是延迟下限等约束,避免读者误用。

工程实践ClickHouse Engineering

I created a playground for 110 database systems

文章由 ClickHouse 作者复盘如何把 ClickBench 扩展成一个可交互的 Playground:用统一脚本接口重构上百个数据库的安装、加载与查询流程,并让约 110 个系统各自带着 1 亿行预载数据接受在线查询。核心难点在于低成本且安全地托管这些系统,作者逐项否决 EC2 常驻、Lambda、ECS/EKS 与 Docker 隔离方案,最终选择在 metal 机器上用 Firecracker/QEMU 做嵌套虚拟化,构建"云中之云"。资源层通过 CPU 超卖加看门狗、把 guest swap 映射到 host page cache 实现弹性内存、用稀疏文件与 XFS reflink、再迁移到 BtrFS+zstd 压缩,把上百个系统塞进 7.5TB 本地盘。网络层用 tap 设备加 iptables 做 NAT 网关,并基于 TLS SNI 字段实现带白名单的 HTTPS 代理,安装期放行外网、查询期断网以防逃逸和 IMDS 访问;快照冷启动控制在 5 秒内,查询出错即回滚。文章偏经验叙述,未给出完整压测数据与量化对比,隔离强度也依赖运营方自行评估。

收录理由在于它把"托管上百个异构数据库"这一非典型问题拆解到虚拟化选型、内存与磁盘超卖、网络出口过滤三条主线,每一步都给了被否决方案的原因和最终取舍,而非结论式陈述。做数据库评测平台、沙箱执行环境、多租户隔离或 Kubernetes 之外自建基础设施的工程师,可直接迁移其中的 Firecracker 嵌套虚拟化、reflink 快照与 SNI 白名单代理思路,并据此评估自身成本与安全边界。

工程实践ClickHouse Engineering

Choosing Between ClickStack and Grafana for ClickHouse Observability

文章比较 ClickStack 与 Grafana ClickHouse 插件在 ClickHouse 可观测性中的定位。Grafana 是“大帐篷”式监控优先路线,强在跨数据源仪表盘、告警和 Prometheus 生态;ClickStack 则围绕 ClickHouse 单一引擎优化,提供搜索式排查、原生日志/指标/链路/会话关联,以及 MCP 和 AI notebooks 支持自建 SRE Agent。文章给出选择规则:ClickHouse 是主要遥测库且需要调查式体验时选 ClickStack;已有异构监控体系、依赖 Prometheus 告警或跨系统仪表盘时选 Grafana,也可二者并用。作者提醒 PromQL 支持仍属实验,二者各有生态边界,应随团队工作方式调整。

推荐收录。文章把工具选择拆成监控优先与调查优先、多引擎与单引擎、预定义仪表盘与搜索式排查三组取舍,并明确给出 ClickStack/Grafana/二者并用的决策规则和 PromQL 实验性等边界。适合正在以 ClickHouse 构建可观测性平台的架构师、SRE 和平台工程团队参考;主要风险是内容来自 ClickStack 厂商,读者应结合自身数据源生态与成本验证。

工程实践ClickHouse Engineering

Benchmarking NVMe-backed Managed Postgres: PlanetScale and ClickHouse

文章基于开源可复现的 PostgresBench 基准,用 pgbench 的类 TPC-B 短事务高并发负载,在相同 AWS r8gd 实例(本地 NVMe、一主两同步备、quorum 复制)上对比 ClickHouse Managed Postgres 与 PlanetScale Metal。结果显示 ClickHouse 在 16vCPU/128GB 与 4vCPU/32GB 两种配置下均领先:100GB 数据集吞吐高约 34%–51%,500GB 数据集高约 54%,平均延迟与 P95/P99 也更低。作者把差异归因于系统级优化,如 2MB 大页、wal_compression=lz4、按实例规模调整 max_wal_size 等,并指出 PlanetScale 暴露的配置中巨大页与 WAL 压缩关闭、max_wal_size 仅 8GB。文章也承认仍存在未通过 pg_settings 暴露的实现差异,建议用户用自己的负载做概念验证。

推荐收录,因为它提供了可复现的开源基准 PostgresBench、明确的 pgbench 命令与硬件/复制配置,并对比了两项服务可见的 Postgres 配置差异(大页、WAL 压缩、max_wal_size),这些调优要点可迁移到自建或托管 Postgres 的运维中。适合评估托管 Postgres 或做 OLTP 性能调优的读者。主要风险是它由 ClickHouse 自测、属厂商对比,具体 TPS 数字会随产品迭代过时,应结合自身负载验证。

工程实践ClickHouse Engineering

Instrumenting my espresso machine with OpenTelemetry

文章以搭载 ESP32 开源控制器 GaggiMate 的 Gaggia 咖啡机为对象,把每次萃取当作分布式系统请求,用 OpenTelemetry 埋点并经 ClickStack 把遥测送入 ClickHouse 存储分析。关键工程点包括:裁剪上游 OTLP protobuf 为保留字段号的单文件子集以适配微控制器内存;把导出任务绑定第二个核心、用快照式加锁与队列满即丢弃,保证网络 I/O 不阻塞 50ms 萃取控制环;在设备端以恒定内存计算阻力变异系数等派生指标,并用 protobuf 拼接生成高分辨率曲线。文中还记录了跨线程 String 竞态与 TLS 栈溢出两个崩溃修复、基于 OCB 构建带 MQTT receiver 的定制 collector,以及只读 LLM Agent 经 MCP 查询闭环给出调整建议。结论强调 OTLP 是通用契约、埋点不得危及被观测系统、列式存储化解高基数问题;局限是整体仍属爱好级玩具问题,研磨度等关键上下文依赖人工录入。

推荐收录:文章把 OTLP protobuf 裁剪、ESP32 双核实时任务隔离、快照加锁与 drop-don't-block、设备端流式统计、protobuf 拼接、基于 OCB 的定制 MQTT collector 讲得具体且附字段号与代码,并用最坏情况测试验证编码器边界。适合可观测性、嵌入式/物联网遥测管道与列式存储方向的工程师,其中'埋点不得阻塞被观测系统''列式存储化解高基数'等经验可迁移到生产系统;局限是部分结论绑定 ClickStack/ClickHouse 生态。

工程实践ClickHouse Engineering

How we build and evaluate our MCP server for SRE agents

ClickHouse 工程博客详细介绍了为 SRE 智能体构建与评估 ClickStack MCP server 的方法,核心是开源基准框架 hdx-evals。该框架用种子 PRNG 确定性生成数千万级合成日志与 span,构造根因定位、延迟尖峰、噪声信号、健康检查、分段回归五类事件场景,并植入高音量干扰项,以防模型依赖训练记忆而非真正调查。每次运行都在隔离沙箱中以真实 Claude 进程无提示执行,保留完整工具调用轨迹;评分由加权正则检查、LLM 裁判(占 60%)与工具错误扣分合成为单一分数,答案经匿名化以避免裁判受工具品牌影响。结果显示 ClickStack MCP 在全部五个场景均胜过直连 SQL 的 ClickHouse MCP,领先 7-20 个百分点,并提炼出工具描述粒度、响应设计与查询延迟对调查质量的关键影响。其边界是当前仅覆盖 trace 与日志调查,CI 集成和更多场景仍待完善。

推荐收录:文章给出了完整的基准方法论与可复现证据,包括确定性数据生成、沙箱隔离、盲评评分公式和五场景对比结果,而非只展示营销数字。适合构建 MCP/Agent 工具、做 AI 工程评估或 SRE 可观测性的读者,其场景设计、干扰项构造和评分权重分配可直接迁移到其他 agent 工具链评测中;需注意结论基于合成数据和单一模型,落地前应补充自有数据验证。

工程实践ClickHouse Engineering

PostgresBench: Measuring the impact of High Availability on Managed Postgres performance

文章介绍 ClickHouse 团队开源的 PostgresBench 在加入高可用(HA)配置后的第二轮结果,对比 ClickHouse Managed Postgres、Crunchy Bridge、AWS RDS、Aurora 与 Neon 在匹配主库算力、相近持久化级别下的表现。作者把托管 Postgres 的 HA 实现分为共享无(本地存储 + PostgreSQL 流复制 + 热备节点)与共享存储(计算存储分离、提交路径写多份 WAL)两类,并以“主库故障后 2 分钟内恢复且零数据丢失”作为 HA 定义。在 16 vCPU/64 GB、500 GB 数据集、10 分钟压测下,同步复制代价明显:ClickHouse 双同步备库 TPS 降至单机 79%、p99 升至 254%,RDS Multi-AZ 集群 p99 升至 627%。结论是匹配持久化级别时 ClickHouse Managed Postgres 吞吐与延迟优于其他托管服务;但数据为厂商自测、存储后端冗余配置未公开,对 Neon 的评价带明显倾向,需谨慎解读。

推荐收录:文章给出可复现的开源基准、明确的 HA 定义(2 分钟 RTO + 零丢失)、各厂商实例配置,并用数据量化同步复制对 p99 尾延迟的放大(最高 6 倍以上),对做数据库选型与 HA 架构权衡的工程师有直接参考价值。风险在于这是厂商自测且对比自家产品的稿件,Aurora/Neon 存储冗余未公开、对 Neon 评价带倾向,建议以方法学与相对趋势为主,而非绝对排名。

工程实践ClickHouse Engineering

Replacing the HDB: ClickHouse for historical ticker data

文章以 Binance 公开行情归档为数据源,演示如何用 ClickHouse 承载历史 tick 数据:实时层之外的历史层是低风险试验场,适合引入新数据库。核心手段是列式存储配合针对性编码——LowCardinality 处理低基数 symbol,DoubleDelta 压缩单调递增的 ts 与 trade_id,ZSTD/LZ4 利用重复字节模式。作者给出完整建表、写入与查询示例,覆盖 VWAP、OHLC K 线、ASOF JOIN 计算滑点等交易台常用分析,并用量表统计验证:一个月 191 GiB 原始 CSV 压缩至约 10 GiB,十个月 162 亿行仅 76 GiB,Cloud 成本约每月 1.88 美元,且查询延迟不随数据量增长,因为主键 (symbol, ts) 稀疏索引将扫描裁剪到万分之一。边界在于不按 symbol 与时间过滤的查询仍需全表扫描。

收录理由:文中不仅有可直接复用的建表结构、编码选择与 VWAP/OHLC/ASOF JOIN 查询,还给出压缩比、成本与查询计划等可验证证据,属于有取舍、有量化的真实工程案例。适合从事时序/行情数据、OLAP 选型与压缩调优的读者迁移到类似高写入、按维度过滤的分析型负载。风险在于内容为厂商博客,读者需注意其面向 ClickHouse 的视角,未与其他方案横向对比。

工程实践ClickHouse Engineering

@clickhouse/rowbinary: when your library is also a parser compiler

文章介绍 ClickHouse 发布的 @clickhouse/rowbinary —— 一个读取/写入 RowBinary 格式的 Node.js 库,其独特之处在于同时以 Agent Skill 形式发布。库的第一层是按类型拆分的读取原语(覆盖 Nullable、Array、Map、Tuple、LowCardinality、DateTime64、Variant、Dynamic、JSON 等),每个原语被刻意写小、单一用途、避免 megamorphic 分派以便被 V8 单态化内联;第二层是 SKILL.md,教导编码 agent 依据查询的实际列类型把这些原语组装成专用解析器,而非在运行时逐格做类型分派。作者用基准证明:RowBinary 比正确的 JSON 路径快约 2.1–3.3 倍,agent 生成的解析器又比组合式通用读取器快 1.5–3.4 倍,每个解析器生成成本约 0.20 美元。文章还强调关键风险:从零手写解码器会静默损坏数据(UUID 字节序错误、UInt64 被舍入为 float64),而复用手写且经过测试的原语可做到“构造即正确”。适用边界明确:字符串密集型日志场景 RowBinary 反而慢于 JSONCompactEachRow,skill 自身也建议此时不要使用。

推荐收录。文章不是产品发布稿,而是用真实基准、生成成本与失败模式分析论证一个可迁移的工程范式:把传统代码生成编译器(protoc/flatc/Cap'n Proto 那种带 IR、后端和选项矩阵的形态)替换为“库作为参考实现 + agent 按查询特化”的技能,并强调生成代码是可审阅、可测试、由人提交的普通源码。对从事数据接入、数据库客户端、性能优化与 AI 工程化的读者尤其有价值;“防止 AI 生成代码静默损坏数据”以及“面向被阅读而非被调用的库该如何写注释与保持一致”的经验可直接迁移。风险在于结论依赖具体模型能力与基准环境,作者也承认小模型退化明显(Haiku 需聚焦子代理才从 52% 提升到 86%)。