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

开源列式分布式数据库clickhouse

这里写自定义目录标题

  • 开源列式OLAP数据库clickhouse
    • clickhouse
      • 使用 ClickHouse 的场景
    • 如何理解行式存储和列式存储
    • clickhouse-go

开源列式OLAP数据库clickhouse

  • OLAP (分析型):专为快速扫描、聚合、分析海量数据设计。
  • OLTP (事务型):专为处理大量短事务(插入、更新、删除、点查)设计。

clickhouse

官网:https://clickhouse.com/
ClickHouse 是一个开源列式数据库管理系统,专为在线分析处理(OLAP)而设计。它能够快速执行高并发、高效的数据查询,适合用于处理大量数据。

ClickHouse 是由俄罗斯Yandex公司开源的,他是俄罗斯的一家互联网巨头公司,虽然在国际上没什么名气,但在俄罗斯,他就是老大,是俄罗斯排名第一的搜索引擎公司。是和谷歌、百度一样的存在。ClickHouse 诞生于 2016 年,就是来自于 Yandex 公司。

主要用于在线分析处理 (OLAP) 业务。它采用列式存储结构,可使用 SQL 语句实时生成数据分析报告,另外它还支持索引,分布式查询以及近似计算等特性,凭借其优异的表现,ClickHouse 在各大互联网公司均有广泛地应用。

它专为需要超快查询速度和海量数据(PB级)扫描的实时分析场景而设计,尤其擅长大规模数据集的聚合查询。

ClickHouse 的主要特性包括:

  • 高性能:支持实时数据查询和分析,通过列式存储结构优化查询速度。查询速度快,支持并发分析场景。插入写入高吞吐,但更新和删除操作代价高
    ClickHouse 写入吞吐量大
    单服务器日志写入量在 50MB 到 200MB/s,每秒写入超过 60w 记录数,是 Elasticsearch 的 5 倍以上。
  • 高度可扩展:能处理 PB 级的数据,适合大规模应用。
  • SQL 支持:兼容 SQL 查询语言,方便以 SQL 为基础的数据操作。
  • 容错性:内置的数据冗余和快照支持,可保证数据的安全性。

不适合的场景包括:

  • 核心业务系统主库
  • 高频 update/delete 的场景
  • 强一致性需求业务

使用 ClickHouse 的场景

  1. 实时数据分析:可以用于流量分析、用户行为跟踪等需要实时响应的场景。
  2. 大数据仓库:处理海量数据,比如日志数据、传感器数据等,进行长期存储和分析。
  3. 业务智能:通过 OLAP 查询,为企业提供决策支持的数据分析和报表。
  4. 数据集成:与 ETL(抽取、转换、加载)流程结合,作为分析的数据存储后端。

如何理解行式存储和列式存储

数据库存储方式主要分为两种:行式存储(Row-based Storage)和列式存储(Column-based Storage)。
行式存储 (Row-based Storage)
存储方式:
数据按行存储,一行的所有字段连续存放在一起
例如:
[ID1, Name1, Age1, City1]
[ID2, Name2, Age2, City2]
[ID3, Name3, Age3, City3]

传统的 MySQL 数据库的每一行数据都是物理的存储在一起的。如果我要取 id 等于 10000 这一条数据的 name 列,那我就必须要把这一行数据读取出来,然后取 name 列。
在众多的数据中,我只取一列,但我需要把每条数据都读取出来。

列式存储 (Column-based Storage)
存储方式:
数据按列存储,同一列的所有值连续存放
例如:
[ID1, ID2, ID3]
[Name1, Name2, Name3]
[Age1, Age2, Age3]
[City1, City2, City3]

由于 name 列的数据都存储在一起,因此效率大大的超过了传统的数据库。

clickhouse-go

github:https://github.com/ClickHouse/clickhouse-go

clickhouse-go 是 Go 语言的 ClickHouse 驱动程序,允许开发者使用 Go 进行数据操作。
clickhouse-go 为 Go 开发者提供了便捷的方式来与 ClickHouse 进行交互。

http://www.xdnf.cn/news/16843.html

相关文章:

  • 深入 Go 底层原理(十三):interface 的内部表示与动态派发
  • Redisson高并发实战:Netty IO线程免遭阻塞的守护指南
  • 算法提升之数学(快速幂+逆元求法)
  • 【20min 急速入门】使用Demucs进行音轨分离
  • Redis7 String类型数据
  • 【iOS】KVO
  • MyBatisPlus之CRUD接口(IService与BaseMapper)
  • 28Rsync免密传输与定时备份
  • 关于Web前端安全防御XSS攻防的几点考虑
  • Spring Boot 全 YAML 配置 Liquibase 教程
  • C++之vector类的代码及其逻辑详解 (中)
  • DockerFile文件执行docker bulid自动构建镜像
  • CMake指令:mark_as_advanced
  • Python序列去重高级指南:保持顺序的高效去重技术
  • 错误: 找不到或无法加载主类 原因: java.lang.ClassNotFoundException
  • 云原生三剑客:Kubernetes + Docker + Spring Cloud 实战指南与深度整合
  • 分类任务当中常见指标 F1分数、recall、准确率分别是什么含义
  • 类似 Pixso 但更侧重「网页 / 软件界面设计」「前后端可视化开发」的工具
  • 【贪心】P11112 [ROI 2024] 机器人物流 (Day 1)|普及+
  • 基于python多光谱遥感数据处理、图像分类、定量评估及机器学习方法应用
  • Java函数式编程之【Stream终止操作】【下】【二】【收集器toMap()】【叁参数收集操作collect()】
  • Maven项目和Spring项目的异同
  • 企业资产|企业资产管理系统|基于springboot企业资产管理系统设计与实现(源码+数据库+文档)
  • Docker容器中文PDF生成解决方案
  • 计算机网络:为什么IPv6没有选择使用点分十进制
  • Pytorch-02数据集和数据加载器的基本原理和基本操作
  • Matplotlib - Python图表可视化利器
  • 面试小总结
  • vue引入阿里巴巴矢量图库的方式
  • 内网穿透系列十:高性能内网穿透工具 rathole,支持Docker一键部署