[数据挖掘、数据分析] clickhouse在go语言里的实践

news2024/12/23 13:11:39

系列文章目录

[数据挖掘] clickhouse在go语言里的实践
[数据挖掘] 用户画像平台构建与业务实践


文章目录

  • 系列文章目录
  • 前言
  • 一、clickhouse的起源
  • 二、OLAP/OLTP
    • 2.1、主流的OLAP/OLTP数据库
  • 三、go语言开发实践
    • 3.1、安装配置go语言环境,配置IDE
      • 3.1.1、Go开发环境安装
      • 3.1.2、IDE开发环境安装
    • 3.2、goframe工具安装
    • 3.3、引入clickhouse组件
    • 3.4、goframe使用clickhouse的完整项目
  • 4、clickhouse的表引擎分析
    • 4.1、MergeTree
    • 4.2、ReplacingMergeTree
  • 5、clickhouse为何适合做大数据分析、数据挖掘,什么情况下用什么样的表引擎,以及clickhouse的缺陷
    • 5.1、clickhouse为何适合做大数据分析、数据挖掘
    • 5.2、ClickHouse查询缺陷
      • 5.2.1、单机时的查询处理缺陷
      • 5.2.2、集群成本高
      • 5.3.3、多表联查性能不佳
      • 5.3.4、修改、删除支持非常差
  • 6、架构设计
    • 6.1、Clickhouse
    • 6.2、MySQL
    • 6.3、Redis
  • 总结


前言

今天给大家介绍一款OLAP大数据处理软件 clickhouse ,在业界它有一个荣誉,那就是”快“,当然此快不是开车快的意思,是指clickhouse在大数据量级的查询方面,对比Spark 、MySQL 、Hive 、Hadoop,速度有很大的提升。
下面我们从clickhouse的起源、OLAP/OLTP、go语言开发实践、clickhouse的表存储引擎分析这几个方面,讲解clickhouse为何适合做大数据分析、数据挖掘,什么情况下用什么样的表引擎,以及clickhouse的缺陷等。


一、clickhouse的起源

ClickHouse起源于Yandex公司的Metrica产品团队。Metrica是一款Web流量分析工具,根据用户行为数据采集,进行数据OLAP分析。数据采集的Event由页面的点击(click)产生,然后进入数据仓库进行OLAP分析。ClickHouse的全称为Click Stream,Data WareHouse,简称ClickHouse。2021年9月20日,ClickHouse团队从Yandex独立,成立公司。

二、OLAP/OLTP

OLAP和OLTP是数据处理和交易过程中的两种不同类型的方法。

OLTP,也称为联机事务处理过程,主要侧重于前台接收的用户数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果。这种处理方式是对用户操作快速响应的方式之一,其基本特征是处理少量的事务性数据。

OLAP,全称联机分析处理,使分析人员能够迅速、一致、交互地从各个方面观察信息,以达到深入理解数据的目的。它帮助分析人员快速获得数据,并进行分析和预测。

2.1、主流的OLAP/OLTP数据库

以下是一些主流的OLAP和OLTP数据库:

数据库类型数据库名描述
OLTP数据库--
-MySQLOLTP的代表,擅长事务处理,支持数据频繁插入或修改,适用于业务开发人员。
-Oracle也是一个功能强大的OLTP数据库,广泛用于企业级应用。
OLAP数据库--
-Greenplum一个分布式数据库,擅长对大量数据进行多维复杂分析,追求极致性能,面向分析决策人员。
-HiveHadoop的数据仓库工具,可以处理大规模的结构化数据,提供类似于SQL的查询功能,适用于数据仓库和BI平台。
-ClickHouse一个开源的列式存储数据库,适合用于数据仓库和数据湖等场景,支持复杂的数据分析查询操作。
-AWS RedshiftAWS Redshift是AWS提供的一款云上数据仓库服务。只需通过简单的鼠标点击即可得到一款高性能、高可靠的数据仓库服务。它使用密集存储 (DS) 节点,能够以非常低的价格创建超大型数据仓库。在数据仓库、运营数据库和数据湖间分析结构化和半结构化数据,使用 AWS 设计的硬件和机器学习在任意规模提供最佳性价比。
-Doris一个实时数仓,可以解决 PB 级别的数据量(如果高于 PB 级别,不推荐使用 Doris 解决,可以考虑用 Hive 等工具),解决结构化数据,查询时间一般在秒级或毫秒级。Doris 是由百度大数据部研发的,之前叫百度 Palo,2018年贡献到 Apache 社区后,更名为 Doris。
-TiDB是腾讯云推出的一个开源的分布式数据库。TiDB 是一个具有高可用性、高性能的 NewSQL 数据库,同时具备了类似 NoSQL 的灵活数据模型。TiDB 目标是打造一个完全对等、共享访问能力、无单点故障、在线扩展、强一致性的分布式数据库。

三、go语言开发实践

这里推荐大家使用go语言的goframe框架,且已开发支持多种数据库,包括:mysql 、mariadb、tidb、pgsql、mssql、oracle、clickhose、dm、sqllite。源码开放,可以提交pr,支持扩展其他数据库组件。
亲测,轻松支持mysql、clickhose
在这里插入图片描述

3.1、安装配置go语言环境,配置IDE

3.1.1、Go开发环境安装

1、下载Go开发包
访问Go国内镜像站下载页面 https://golang.google.cn/dl/,并在页面最上方的版本中选择你当前的系统版本,会下载最新版本的Go开发包:
在这里插入图片描述
2、安装引导
访问官方安装介绍页面 https://golang.google.cn/doc/install,按照当前系统版本执行对应的安装流程即可。

Windows(msi)和MacOS(pkg)推荐使用安装包的方式来安装。作者当前MacOS安装包(pkg)安装过程如下图所示:
在这里插入图片描述
在这里插入图片描述

3.1.2、IDE开发环境安装

目前Go的IDE有两款比较流行,一款是VSCode+Plugins(免费),另一款是JetBrains公司的Goland(收费)。由于JetBrains也是GoFrame框架的赞助商,因此我们优先推荐使用Goland来作为开发IDE,下载及注册请参考网上教程(百度 或 Google)。

JetBrains的官方网站为:https://www.jetbrains.com

**备注: 熟悉Java开发工具Idea的同学可以很快上手Goland,操作上感觉都似曾相识 **

1、Goland的使用
我们来创建第一个Go程序吧,老规矩,上hello world。
在这里插入图片描述
2、创建项目
这里需要注意的是Go安装文件的路径(SDK),官方安装文档有详细说明,请仔细阅读。

其中的Location随意选择一个本地路径即可。
在这里插入图片描述
3、创建程序
新建一个go文件,叫做hello.go,并输入以下代码:
在这里插入图片描述
4、执行运行
在这里插入图片描述
在这里插入图片描述

3.2、goframe工具安装

帮助文档: https://goframe.org/pages/viewpage.action?pageId=1115782
建议安装最新版本
在这里插入图片描述

3.3、引入clickhouse组件

clickhouse帮助文档:
https://goframe.org/pages/viewpage.action?pageId=1114245#ORM%E4%BD%BF%E7%94%A8%E9%85%8D%E7%BD%AE-%E9%85%8D%E7%BD%AE%E6%96%B9%E6%B3%95

数据库配置文件:config.yaml
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.4、goframe使用clickhouse的完整项目

一个完整的Web3区块链项目,使用goframe + clickhouse + mysql + redis ,本人原创,完全拥有版权
地址:https://github.com/hd5723/chainApi
在这里插入图片描述


4、clickhouse的表引擎分析

官方文档(支持中、英、俄):https://clickhouse.com/docs/zh/engines/table-engines
在这里插入图片描述
简单介绍2种常用的表引擎:MergeTree、ReplacingMergeTree

4.1、MergeTree

Clickhouse 中最强大的表引擎当属 MergeTree (合并树)引擎及该系列(*MergeTree)中的其他引擎。

MergeTree 系列的引擎被设计用于插入极大量的数据到一张表当中。数据可以以数据片段的形式一个接着一个的快速写入,数据片段在后台按照一定的规则进行合并。相比在插入时不断修改(重写)已存储的数据,这种策略会高效很多。

主要特点:

  • 存储的数据按主键排序。
    这使得您能够创建一个小型的稀疏索引来加快数据检索。

  • 如果指定了 分区键 的话,可以使用分区。

  • 在相同数据集和相同结果集的情况下 ClickHouse 中某些带分区的操作会比普通操作更快。查询中指定了分区键时 ClickHouse 会自动截取分区数据。这也有效增加了查询性能。

4.2、ReplacingMergeTree

该引擎和 MergeTree 的不同之处在于它会删除排序键值相同的重复项。

数据的去重只会在数据合并期间进行。合并会在后台一个不确定的时间进行,因此你无法预先作出计划。有一些数据可能仍未被处理。尽管你可以调用 OPTIMIZE 语句发起计划外的合并,但请不要依靠它,因为 OPTIMIZE 语句会引发对数据的大量读写。

因此,ReplacingMergeTree 适用于在后台清除重复的数据以节省空间,但是它不保证没有重复的数据出现。


5、clickhouse为何适合做大数据分析、数据挖掘,什么情况下用什么样的表引擎,以及clickhouse的缺陷

5.1、clickhouse为何适合做大数据分析、数据挖掘

clickhouse 与MySQL性能对比

ClickHouse和MySQL是两种不同的数据库管理系统,它们在性能方面有一些区别。以下是ClickHouse和MySQL性能的对比:

  • 数据存储结构:ClickHouse是一种列式存储数据库,适合处理大量数据,特别是在分析查询方面表现出色。而MySQL是一种行式存储数据库,以行为单位存储数据,适合事务处理和常规查询。
  • 处理能力:ClickHouse在处理大规模数据集时表现出色,提供快速的聚合和分析能力。MySQL在小规模数据和事务处理方面表现较好。
  • 查询语言:ClickHouse使用自己的查询语言ClickHouse SQL(类似于标准SQL),支持复杂的分析查询和聚合操作。MySQL则使用标准SQL。
  • 数据一致性:MySQL是一种关系型数据库,支持事务和ACID特性,确保数据的一致性。ClickHouse主要用于分析型查询,对于数据的一致性要求较低。
  • 性能和扩展性:ClickHouse在处理大规模数据和高并发查询时具有优势,可以水平扩展,并提供在分布式环境中运行的能力。MySQL在小规模应用和事务处理方面表现较好。
    总的来说,MySQL适合事务处理和一般查询。ClickHouse适合处理大规模数据和分析查询,ClickHouse的适合大宽表(上百个字段、海量数据)统计分析查询。

5.2、ClickHouse查询缺陷

5.2.1、单机时的查询处理缺陷

ClickHouse在查询时,会调动尽可能多的服务器资源,一般CPU占用会高达80%以上,因此不合适高并发查询。

5.2.2、集群成本高

如果要处理高并发问题, 需要增加服务器,成本非常高

5.3.3、多表联查性能不佳

适合适合大宽表(上百个字段)查询,多表查询就算字段不多,性能也不佳

5.3.4、修改、删除支持非常差

ClickHouse支持实时统计查询,但是修改、删除性能非常差,一般使用表引擎ReplacingMergeTree来解决修改、删除问题。

对ClickHouse进行修改可能会引发以下问题:

  • 数据类型不一致:如果在对表结构进行修改时,改变了字段的数据类型,而后续插入的数据类型与修改后的表结构不匹配,可能会导致数据插入失败或数据不一致。例如,如果在ClickHouse中更改了字段类型从int变为float,但是后续插入的数据仍然是int类型,那么这些数据会被截断,导致数据不一致。
  • 高频删除数据:如果在短时间内删除大量数据,ClickHouse可能会出现“Cannot allocate memory”的错误。因为ClickHouse在处理删除操作时,会先在内存中构建删除树,如果删除操作过于频繁,可能会耗尽内存。
  • 重复数据处理:ClickHouse对重复数据的处理可能会出现问题。如果在同一个分片上插入的数据已经存在,ClickHouse会进行去重。然而,如果在不同分片间插入重复数据,ClickHouse不保证去重。这可能会导致数据重复的问题。

因此,在对ClickHouse进行修改时,一定要小心谨慎,并做好相应的测试,以避免可能的问题。如遇到修改后无法存入数据等问题,可以检查是否是上述情况导致,并按照相应的方法解决。如果是数据源数据进行了多次调整,数据字段进行过调整,要确保调整后的数据兼容旧的数据格式。


6、架构设计

在实际的项目中,数据操作方面我们采用了Clickhouse + MySQL + Redis,分工明确。

6.1、Clickhouse

功效:实时统计查询
数据来源:设置定时任务,汇总mysql多个表几十个上百个字段,通过go程序写入Clickhouse
策略:定时增量更新、很少根据主键修改/删除

6.2、MySQL

功效:定时任务,查询多表数据
数据来源:通过ETH rpc接口获取数据,并写入
策略:频繁的写入数据,定时查询(分钟级、小时级等),少量修改/删除

6.3、Redis

用于维护版本号,缓存业务的第一页数据等


总结

OLAP/OLTP数据库发展很多年了,也有很多争论,但总体来说,符合自己业务的才是好的。不同的业务、数据体量的增长、公司技术栈的储备等,都是影响因素。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1113714.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring框架漏洞学习之第二篇(CVE-2022-22965、CVE-2022-22947、CVE-2018-1273、CVE-2018-1270)

写在前边 如果在浏览本文时发现技术性错误时,欢迎指正;如果需要本框架探测的POC和EXP也可以私信,我看到后也会及时恢复大家。 总之,欢迎各路大佬叨扰! Spring Framework 远程代码执行漏洞(CVE-2022-22965&…

vue3中computed的用法

一、完整代码 <template><div class"about"><h1>Computed的用法</h1><h3>姓:{{ person.firstName }}</h3><input type"text" v-model"person.firstName"><h3>名:{{ person.lastName }}</h3…

2023年中国水稻收割机产量、销量及市场规模分析[图]

水稻收割机行业是指以收割水稻为主要功能的农业机械行业&#xff0c;随着农业现代化的推进&#xff0c;水稻收割机行业也在不断发展和创新&#xff0c;以满足不断提高的农业生产效率和降低劳动成本的需求。 水稻收割机分类 资料来源&#xff1a;共研产业咨询&#xff08;共研网…

地方文化的守护者:TikTok如何保护和传承传统?

在全球化和数字化的时代&#xff0c;地方文化的保护和传承变得尤为重要。社交媒体平台如TikTok已经成为一种有力的工具&#xff0c;帮助地方文化传统得以传承和分享。本文将深入探讨TikTok在保护和传承地方文化方面的作用&#xff0c;并分析它如何成为地方文化的守护者。 TikTo…

使用 ClickHouse 深入了解 Apache Parquet (二)

【squids.cn】 全网zui低价RDS&#xff0c;免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等 这篇文章是我们的 Parquet 和 ClickHouse 博客系列的第二部分。在这篇文章中&#xff0c;我们将更详细地探讨 Parquet 格式&#xff0c;重点介绍使用 ClickHouse 读写文…

jsp debug模式

1、复制 action 后面名称 全局搜找到对应的java文件 2、点击debug模式 点击断点 3、进入页面 数据就能打印出来 4、按f8 查看下一条数据

支付宝小程序介入人脸识别(金融级--前端部分)

在这里只做前端部分说明: 详情参考文档:如何通过集成支付宝小程序唤起实人认证服务_实人认证-阿里云帮助中心 操作步骤 调用 API 发起认证。 发起认证服务。 调用 startBizService 接口请求认证。 function startAPVerify(options, callback) {my.call(startBizService, {n…

Vue-vue项目Element-UI 表单组件内容要求判断

整体添加判断 <el-formref"ruleFormRef":model"formModel"class"demo-ruleForm"label-position"top"status-icon:rules"rules"><el-form-item label"姓名" prop"applyUsers" class"form-…

python代理服务器搭建,Python代理IP怎么使用?

随着互联网的普及&#xff0c;越来越多的人开始关注网络安全和隐私保护。代理服务器是一种可以隐藏用户真实IP地址的工具&#xff0c;通过代理服务器可以让人们在使用网络时更加安全和隐蔽。搭建Python代理服务器可以让我们更好地了解网络协议、加强网络安全等。 搭建Python代理…

【VSCode】设置自动保存

首先打开设置 然后在搜索栏上搜索auto save&#xff0c;此时可以看见&#xff0c;默认off不保存 files:autoSaveDelay 设置自动保存的间隔 1.AfterDelay 将在配置的 “#files:autoSaveDelay#” 后自动保存。 2.onFocusChange 当编辑器失去焦点时&#xff0c;将自动保存。也就…

laravel的默认首页怎么改-laravel框架默认欢迎页面如何修改

laravel的默认首页怎么改 搭建好的laravel的默认首页怎么改 我们有两种改动方式&#xff1a; 第一种修改默认路由&#xff1a; 下一步是要移除Laravel应用程序默认的欢迎页路由。这个路由可以在routes/web.php文件的顶部找到&#xff0c;看起来类似于以下代码&#xff1a; …

关于CSGO游戏搬砖,想给大家的几点忠告

关于CSGO游戏搬砖&#xff0c;想给大家的几点忠告 1、新出的箱子&#xff0c;里面开出的皮肤短时间内会溢价&#xff0c;价格虚高&#xff0c;后期会呈逐渐下跌趋势&#xff0c;这就是我们不让大家碰新品的原因&#xff0c;哪怕利润再高也不建议购入或者囤货&#xff0c;实在要…

蜻蜓c影视追剧系统-多个小程序添加说明

多小程序添加设置 蜻蜓c影视追剧 支持多小程序添加&#xff0c;也就是可以管理不同前端的小程序。 此处id 对应前端小程序的mp值 关于添加小程序&#xff1a; 此处有所有填写内容的参考方式&#xff0c;要注意是必须开通了微信支付才可以添加&#xff0c;这里需要添加证书信息…

60 最长有效括号

最长有效括号 题目描述题解1 DPstack题解2 stack题解3 DP题解4 左右指针 题目描述 给你一个只包含 ( 和 ) 的字符串&#xff0c;找出最长有效&#xff08;格式正确且连续&#xff09;括号子串的长度。 示例 1&#xff1a; 输入&#xff1a;s "(()" 输出&#xff1…

CTF Reverse入门(1) 环境安装

前言 逆向重点是分析和理解计算机程序、二进制文件或者其他软件的逆向工程技术。在CTF比赛中&#xff0c;参赛者通常会收到一个或多个二进制文件、程序、固件或者其他类型的软件&#xff0c;他们的任务是分析这些文件&#xff0c;识别潜在的漏洞或安全问题。 学逆向需要会密码…

(三)QT中使用QVTKOpenGLNativeWidget的简单教程以及案例,利用PCLVisualizer显示点云

先添加一个带有ui的QT应用程序。 一、在ui界面中添加QVTKOpenGLNativeWidget控件 先拖出来一个QOpenGLWidget控件 修改布局如下&#xff1a; 然后将QOpenGLWidget控件提升为QVTKOpenGLNativeWidget控件&#xff0c;步骤如下&#xff1a; 右击QOpenGLWidget窗口&#xff0c;选…

【数据结构】线性表(六)堆栈:顺序栈及其基本操作(初始化、判空、判满、入栈、出栈、存取栈顶元素、清空栈)

文章目录 一、堆栈1. 定义2. 基本操作 二、顺序栈0. 顺序表1. 头文件和常量2. 栈结构体3. 栈的初始化4. 判断栈是否为空5. 判断栈是否已满6. 入栈7. 出栈8. 查看栈顶元素9. 清空栈10. 主函数11. 代码整合 堆栈Stack 和 队列Queue是两种非常重要的数据结构&#xff0c;两者都是特…

公司oa是什么?一般公司oa有什么样功能?

公司OA&#xff08;Office Automation&#xff09;是指通过计算机和信息技术来实现办公自动化的系统。 它提供了一系列的功能和工具&#xff0c;用于协调、管理和处理公司内部的日常事务和流程。OA系统旨在提高工作效率、加强信息交流与共享、简化业务流程&#xff0c;并提供便…

2023年中国人力资源服务外包市场规模、机构数量及细分领域规模[图]

人力资源服务外包是企业根据需要将某一项或几项人力资源管理工作或职能外包出去&#xff0c;交由其他企业或组织进行管理&#xff0c;以降低人力成本&#xff0c;实现效率最大化&#xff0c;企业专注自身核心业务发展。人力资源外包业务包括人事管理、人才派遣、薪酬财税、健康…

思维模型 晕轮效应

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。 1 晕轮效应应用 1.1 面试中的晕轮效应 一位外表英俊、谈吐得体的男士在面试中表现出色&#xff0c;面试官对他印象极佳&#xff0c;认为他具备领导才能和优秀的沟通能力。然而&#xff0…