尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

ClickHouse的实践经验

ClickHouse的实践经验
📅 发布时间:2026/6/20 18:15:37

1. 主键索引

在 ClickHouse 中选择有效的主键对查询性能和存储效率至关重要。
  • 如果不指定primary key,primary key默认就是ordering key。
  • 在选择ordering key时,优先考虑在查询条件中常用的列,尤其是那些排除大量行的列。
  • 选择与表中其他数据高度相关的列也很有益,因为连续存储能够提高压缩比和在 group by 和 order by 操作中的内存效率。

2. 分区键

分区是ClickHouse管理数据的重要方式。
  • ClickHouse默认是没有分表的,不建议使用分表,分表需要业务上做复杂适配。
  • 选择低基数的字段作为分区键,ClickHouse 不会跨分区合并数据,因此过多的分区会导致过多未合并的部分(too many parts error)。
  • ClickHouse 会自动在分区列上构建 MinMax 索引,这可以显著加速对这些列进行过滤的查询。例如,当表按 toYYYYMMDD(date) 分区时,按天过滤可以让引擎完全跳过无关的分区及其部分。
  • 建议每个分区的数据条数在千万~几亿左右(具体受磁盘、内存、查询模式和CPU能力影响)。
  • 分区数量不要超过几千个较为合适,几十到几百是比较常见的数量。

3. 数据类型

  • 使用严格类型:始终为列选择正确的数据类型。数值和日期字段应使用适当的数值和日期类型,而不是通用的字符串类型。
  • 避免可空列:可空列通过维护单独的列来跟踪空值,从而引入额外的开销。仅在明确需要区分空状态和null状态时使用 Nullable。否则,默认值或零等效值通常足够。
  • 低基数LowCardinality字段:任何唯一值少于 10,000 的列都是低基数的选择。
  • 专用类型:IP支持IPv4和IPv6类型。

4. 数据写入

  • 批量插入(客户端处理):建议以至少 1,000 行为一个批次插入数据,理想情况下在 10,000 到 100,000 行之间。
  • 异步插入(服务端处理):
    • 异步插入通过将传入数据写入内存缓冲区,然后根据可配置的阈值刷新到存储中,将批处理责任从客户端转移到服务器。
    • 插入被缓冲,只有在满足其中一个刷新条件时才写入磁盘:
          (1) 缓冲区达到指定大小 (async_insert_max_data_size)
          (2) 已经过了时间阈值 (async_insert_busy_timeout_ms)
          (3) 累积的插入查询达到最大数量 (async_insert_max_query_number)
    • 在发生刷新之前,数据无法被查询。
  • 不推荐以同步模式发送许多小批次,这样会导致创建许多 parts。这将导致查询性能差和 “too many parts” 错误。

5. 查询优化

  • ordering key和partition key是查询性能的关键因素。
  • 避免使用select *,按需获取字段。
  • where和group by中的列顺序,要和建表语句中order by的列顺序统一,遵循最左原则。
  • join查询性能不是很好,应避免使用,替代方案:业务设计使用大宽表,如必须使用join,右表选小表(hash join 右表会全部加载到内存)。
  • 使用 EXPLAIN indexes=1 定位慢查询的原因。

6. 数据TTL

  • TTL机制:ALTER TABLE events MODIFY TTL event_time + INTERVAL 30 DAY;
  • 分区后,删除分区:ALTER TABLE <表名> DROP PARTITION <分区值>
  • 如果需要按磁盘大小来做大量数据删除,建议直接删除分区,因为删除数据行会导致后台merge影响性能。
  • 支持定义冷/热磁盘,通过TTL TO VOLUME实现数据冷热迁移。

7. 硬件资源

  • 通用用途:内存与CPU比率 4:1
  • 数据仓库用例:内存与 CPU 比率 8:1
  • 计算优化用例:内存与 CPU 比率 2:1
 
参考:
https://clickhouse.com/docs/zh/best-practices
 

相关新闻

  • 小白建站3天就被爬?10分钟部署免费WAF,护住我的Java学习笔记
  • 医疗器械注册公司哪家好?2025年权威机构推荐榜单
  • 超越像素:兰亭妙微揭示,卓越的APP界面设计始于“产品策略”

最新新闻

  • 2026年6月核心快讯:从南京欧米茄正规授权维保资质查询到上海认证技师服务 - 亨得利官方售后
  • 太原单位搬家|太原公司搬迁专业服务商,福康搬家高分优选 - 速递信息
  • 太原长途搬家哪家专业?太原福康搬家省内长短途货运靠谱 - 速递信息
  • 2026EMBA排名测评:高管科学择校选型指南 - 品牌2026推荐
  • 【机翻】关于 ETW 内部结构:架构、钩子、篡改和检测(About ETW Internals: Architecture, Hooking, Tampering, and Detection )
  • BlenderGIS三维地理数据可视化:5分钟快速上手指南

日新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号