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

clickhouse轻量级更新 - 若

轻量级更新(Lightweight Updates)是ClickHouse中的一个重要特性,让我详细解释一下:

什么是轻量级更新

轻量级更新是ClickHouse提供的一种高效的UPDATE机制,它允许在不重写整个数据块的情况下更新数据。

传统更新 vs 轻量级更新

传统更新(Heavy Updates)

UPDATE table SET column = 'new_value' WHERE condition;

特点:

  • 需要重写包含目标行的整个数据块
  • 性能开销大,特别是在大表上
  • 可能导致大量I/O操作
  • 影响其他数据的存储位置

轻量级更新(Lightweight Updates)

UPDATE table SET column = 'new_value' WHERE condition;

特点:

  • 只重写实际发生变化的数据行
  • 性能开销小,速度更快
  • 减少I/O操作
  • 保持数据块的其他部分不变

工作原理

1. 数据块结构

原始数据块: [Row1, Row2, Row3, Row4, Row5]↓ (更新Row3)
更新后:     [Row1, Row2, Row3', Row4, Row5]

2. 版本控制机制

  • 使用内部的_block_number来跟踪数据变化
  • 每个数据块都有唯一的版本标识
  • 更新时只标记变化的数据行

3. 查询处理

  • 查询时自动合并原始数据和更新数据
  • 对用户透明,查询结果包含最新数据
  • 后台异步处理数据合并

启用轻量级更新的条件

1. 表设置要求

-- 方法1:创建表时设置
CREATE TABLE example (id UInt64,name String
) ENGINE = MergeTree()
ORDER BY id
SETTINGS enable_block_number_column = 1, enable_block_offset_column = 1;-- 方法2:修改现有表设置
ALTER TABLE example MODIFY SETTING enable_lightweight_updates = 1;

2. 物化列支持

-- 添加必要的物化列
ALTER TABLE example ADD COLUMN _block_number UInt64 MATERIALIZED _part_offset;

轻量级更新的优势

1. 性能优势

  • 更新速度快:只处理变化的数据
  • 减少I/O:避免重写整个数据块
  • 降低CPU使用:减少数据处理量

2. 存储优势

  • 空间效率:不重复存储未变化的数据
  • 索引友好:保持索引结构稳定
  • 压缩优化:不影响数据压缩效果

3. 并发优势

  • 减少锁竞争:只锁定变化的数据行
  • 提高并发性:多个更新操作可以并行执行
  • 降低冲突:减少数据块级别的冲突

适用场景

1. 状态更新

-- 更新任务状态
UPDATE block_tasks SET status = 'finished' WHERE start_block = 12345;

2. 实时数据修正

-- 修正错误数据
UPDATE transactions SET value = 100.5 WHERE tx_hash = '0x123...';

3. 批量状态变更

-- 批量更新状态
UPDATE accounts SET balance = balance + 100 WHERE address IN ('0x1', '0x2');

限制和注意事项

1. 版本要求

  • 需要ClickHouse 24.x或更高版本
  • 某些版本可能不支持此功能

2. 表结构要求

  • 需要特定的表设置
  • 可能需要物化列支持

3. 性能考虑

  • 复杂WHERE条件可能影响性能
  • 大量并发更新可能产生冲突

实际应用示例

1. 区块链数据更新

-- 更新区块任务状态
UPDATE block_tasks SET status = 'finished',completed_at = now()
WHERE start_block = 12345 AND end_block = 12355;

2. 账户余额更新

-- 更新账户余额
UPDATE accounts SET balance = balance + 100.5,updated_at = now()
WHERE address = '0x1234567890abcdef';

总结

轻量级更新是ClickHouse提供的一种高效的UPDATE机制,它通过只更新变化的数据行来提升性能。对于Web3数据收集项目来说,轻量级更新特别适用于:

  1. 任务状态管理:频繁更新block_tasks的状态
  2. 数据修正:实时修正错误或过时的数据
  3. 状态同步:保持数据状态的一致性

通过合理使用轻量级更新,可以显著提升数据更新的性能和效率。

http://www.hskmm.com/?act=detail&tid=15627

相关文章:

  • 西电PCB设计指南第3章学习笔记
  • Vitrualbox、kali、metaspolitable2下载安装
  • LazyLLM端到端实战:用RAG+Agent实现自动出题与学习计划的个性化学习助手智能体
  • 补充图
  • 【阿里云事件总线】域名+邮件推送+事件总线=实现每天定时邮件!
  • llm入门环境
  • FLASH空间划分/存储数据至指定CODEFLASH位置
  • SOOMAL 降噪数据表
  • 案例分享|借助IronPDF IronOCR,打造医疗等行业的智能化解决方案
  • ClickHouse UPDATE 操作问题解决方案 - 若
  • 利用 Milvus + RustFS,快速打造一个 RAG!
  • Docker 私有镜像仓库 Harbor 安装部署带签名认证
  • ARC180 做题记
  • 借助Aspose.HTML控件,使用 Python 编辑 HTML
  • 微前端 micro-app 在vue 中的路由跳转问题
  • 1. 设计模式--工厂办法模式
  • 汽车视频总线采集过程中,如何兼顾响应速度和可靠性?
  • P8865 [NOIP2022] 种花
  • traefik 反向代理 + IdentityServer4
  • 麦角硫因制备关键技术和设备
  • 2025年十大好用网盘推荐:功能、口碑与性价比大对比
  • 卡特兰数
  • Word-通过宏格式化文档中的表格和图片
  • 反向代理 traefik - 健康检查
  • 一些想法 - CelestialZ
  • 使用 Ansible 批量安装 Docker
  • 编程规范---日志规范
  • 深入解析:find_code 插件 react_vite
  • 二十一、DevOps:从零建设基于K8s的DevOps平台(二)
  • 中电金信:从“通用”到“专用”:加速实现金融行业生成式AI应用的必由之路