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

数据分析工作流

数据分析工作流

画板

1.流程

  1. 数据产生阶段
    • 业务系统生成数据:在各种业务场景下,如用户在电商平台上进行购物(产生订单信息、浏览记录等)、在金融系统中进行交易(产生交易流水、账户余额变动等)或者在企业内部的管理系统中进行操作(如员工考勤记录、项目进度更新等),这些业务系统会不断地产生数据。这些数据通常以不同的格式和频率生成,例如,订单数据可能是在用户下单时产生,交易流水可能是实时产生的,而考勤记录可能是按天或者按班次产生。
    • 数据格式和内容多样性:产生的数据格式可能包括结构化数据(如关系型数据库中的表格形式的数据,包含明确的字段和记录,像订单表中的订单编号、商品名称、购买数量等字段)、半结构化数据(如 JSON 格式的日志数据,其中包含一些固定的键值对以及可变的嵌套结构)和非结构化数据(如用户评论的文本内容、上传的图像或视频等)。这些数据包含了各种有价值的信息,如用户行为、业务状态等,是后续数据分析的基础。
  2. 数据推送至消息队列(Kafka)阶段
    • 数据发送逻辑:业务系统中的数据推送功能(如前面提到的 send 方法)会将数据发送到 Kafka 消息队列。这个过程涉及到构建合适的数据格式(如将数据包装成包含 clustertopicitems 等信息的格式,确保数据符合 Kafka 的主题 - 分区等存储要求),设置请求头表明数据的类型(如 JSON 格式),然后通过 HTTP 请求或者其他适合的方式将数据发送到 Kafka。
    • 消息队列存储机制:Kafka 接收到数据后,会根据配置的主题(<font style="color:#DF2A3F;">topic</font>)和分区策略将数据存储起来。主题类似于一个分类标签,不同类型的数据可以发送到不同的主题。分区则是为了实现数据的并行处理和存储,提高系统的吞吐量和可用性。例如,对于电商平台的数据,可以将订单数据发送到 “order_topic” 主题,将用户浏览数据发送到 “browse_topic” 主题,并且每个主题可以根据数据量、业务规则等因素划分为多个分区进行存储。
  3. 数据从消息队列传输到 ClickHouse 阶段
    • 数据消费机制:在 Kafka 存储数据的同时,会有消费者程序(可以是自定义开发的,也可以是基于相关框架的)从 Kafka 中读取数据。这些消费者程序会按照预先定义的配置(如订阅的主题、拉取数据的频率、批量大小等)从 Kafka 的分区中获取数据。例如,会有一个专门用于将数据传输到 ClickHouse 的消费者程序,它会持续监听指定的主题,一旦有新的数据到达或者按照一定的时间间隔,就会从 Kafka 中拉取数据。
    • 数据转换和适配(如果需要):在将数据从 Kafka 传输到 ClickHouse 的过程中,可能需要进行一些数据转换和适配操作。例如,Kafka 中的数据可能是 JSON 格式,而 ClickHouse 的表结构可能要求数据以特定的列格式(如 CSV 或者特定的 SQL 数据类型)存储,此时就需要将数据进行解析、转换和重新组织,以符合 ClickHouse 的存储要求。然后,将转换后的数据插入到 ClickHouse 相应的表中进行存储。
  4. 数据分析阶段(在 BI 平台上)
    • 数据连接和查询:BI 平台会与 ClickHouse 建立连接,通过 SQL 或者其他支持的查询语言来获取存储在 ClickHouse 中的数据。例如,分析师可以在 BI 平台上编写查询语句,从 ClickHouse 中获取特定时间段内的订单数据、用户行为数据等进行分析。
    • 数据分析操作:在获取数据后,BI 平台提供了各种分析工具和功能,如数据可视化(制作柱状图、折线图、饼图等来直观展示数据)、数据挖掘(发现数据中的关联规则、聚类分析等)、数据建模(构建预测模型,如根据历史销售数据预测未来销量)等。分析师可以根据业务需求,利用这些工具对数据进行深度分析,以获取有价值的见解,如用户购买行为的趋势、业务流程中的瓶颈、市场需求的变化等,从而为业务决策提供支持。

2.消息队列的作用

  1. **缓冲和流量控制**作用
    • 缓冲数据:在数据从数据源(如业务系统产生数据的地方)传输到ClickHouse的过程中,数据产生的速率和ClickHouse处理数据的速率可能不一致。Kafka消息队列可以作为一个缓冲区域。例如,在业务高峰期,数据产生速度很快,Kafka可以暂时存储这些大量的数据,避免数据丢失或者数据源系统因为数据积压而出现性能问题。就像是在一个供水系统中,消息队列是一个蓄水池,当水源(数据产生端)供水速度过快时,蓄水池可以先存储多余的水(数据)。
    • 流量控制:它可以平滑数据流量。通过控制从消息队列中读取数据并发送到ClickHouse的速度,确保ClickHouse不会因为短时间内涌入过多的数据而崩溃。比如,可以根据ClickHouse的处理能力,合理地设置从Kafka中拉取数据的频率和批量大小,实现数据流量的精细化控制。
  2. 解耦数据生产者和消费者
    • 系统解耦:在整个架构中,数据生产者(如各种业务系统)和数据消费者(ClickHouse用于数据分析)之间通过Kafka消息队列进行解耦。这意味着数据生产者不需要知道数据消费者的具体细节,如ClickHouse的存储结构、处理能力等。同样,ClickHouse也不需要关心数据是如何产生的,只需要从Kafka中获取数据即可。例如,如果数据生产者的业务逻辑发生变化,只要数据格式符合Kafka的要求,就不会影响ClickHouse的正常数据获取;反之,ClickHouse的配置或者性能优化等操作也不会干扰数据生产者的工作。这种解耦提高了整个系统的灵活性和可维护性,就像在一个物流系统中,发货方(数据生产者)只需要把货物(数据)送到仓库(消息队列),收货方(数据消费者)从仓库提货,双方不需要直接对接,减少了相互的干扰。
  3. 提高系统的可靠性和数据的可用性
    • 数据持久化:Kafka消息队列会对数据进行持久化存储。这意味着即使在数据传输过程中出现一些临时故障,如网络抖动、ClickHouse短暂不可用等情况,数据也不会丢失。数据会保留在Kafka中,等待系统恢复正常后可以继续传输到ClickHouse。例如,当ClickHouse因为维护或者升级而暂停服务时,Kafka可以保存这段时间产生的数据,等ClickHouse恢复后,再将数据发送过去,保证了数据的完整性和可用性。
    • 异步处理支持:数据生产者可以将数据异步地发送到Kafka消息队列。这样,数据生产者不需要等待数据被ClickHouse处理完成就可以继续其他操作,提高了数据生产者的效率。例如,业务系统可以快速地将产生的数据发送到Kafka,然后继续处理下一个业务任务,而数据在Kafka中排队等待被ClickHouse处理,整个过程更加高效。

3.clickhouse

  1. ClickHouse简介
    • ClickHouse是一个用于联机分析处理(OLAP)的列式数据库管理系统(DBMS)。它的设计目标是尽可能快地处理海量数据的分析查询,在大数据场景下能够高效地提供数据洞察。与传统的行式数据库不同,ClickHouse采用列式存储,这种存储方式在分析型查询场景下具有显著的性能优势。
  2. 列式存储结构
    • 存储原理
      • 在列式存储中,数据是按列而不是按行存储的。例如,对于一个包含多个列(如用户ID、订单日期、订单金额等)的订单数据表,ClickHouse会将所有用户ID存储在一个单独的列块中,所有订单日期存储在另一个列块中,以此类推。这种存储方式使得在进行数据分析查询时,特别是涉及到对某一列或少数几列进行聚合、过滤、排序等操作时,可以快速定位和读取相关列的数据,而无需读取整个行的数据。
    • 性能优势
      • 数据压缩效率高:由于同一列的数据类型相同,且数据通常具有相似的模式,ClickHouse可以对列数据进行高效的压缩。例如,对于存储日期的列,其数据格式相对固定,通过合适的压缩算法(如LZ4、ZSTD等)可以大幅减少数据存储体积,节省磁盘空间,并提高数据读取速度,因为从磁盘读取更少的数据意味着更快的I/O操作。
      • 查询性能提升:在进行分析查询时,如计算某个时间段内的订单总额(只涉及订单金额列),列式存储只需要读取订单金额列的数据进行计算,而不需要像行式存储那样读取每行的所有数据。这大大减少了不必要的数据读取量,从而显著提高查询速度,尤其是在处理海量数据时,这种性能提升更加明显。
  3. 数据类型支持
    • ClickHouse支持多种数据类型,包括基本数据类型(如整数类型(Int8、Int16、Int32、Int64)、浮点数类型(Float32、Float64)、字符串类型(String)、日期时间类型(Date、DateTime)等)和复杂数据类型(如数组(Array)、嵌套(Nested)等)。
    • 丰富的数据类型支持使得它能够很好地处理各种业务场景下的数据,例如,在处理包含多个商品的订单数据时,可以使用嵌套类型来存储订单中的商品信息(如商品ID、商品数量、商品价格等),方便进行复杂的数据分析,如计算每个订单的总价、统计每种商品的销售数量等。
  4. 高性能查询处理
    • 分布式查询执行
      • ClickHouse支持分布式架构,可以将数据分布存储在多个节点上。当执行查询时,它会在多个节点上并行执行查询操作,然后将结果进行汇总。这种分布式查询执行机制能够充分利用集群的计算资源,大大提高查询处理速度,适用于处理大规模数据集的复杂查询。
    • 向量化执行引擎
      • 其查询执行引擎采用向量化技术,能够对数据进行批量处理。在传统的数据库执行模型中,数据通常是逐行处理的,而ClickHouse的向量化执行引擎可以一次处理一组数据(一个向量)。例如,在计算多个数据行的总和时,向量化执行引擎可以同时对多个数据元素进行加法运算,利用CPU的SIMD(单指令多数据)指令集,提高计算效率。
    • 索引支持
      • ClickHouse提供了多种索引机制,如跳数索引(Sparse Index)等,用于加速数据查询。跳数索引可以帮助快速定位数据所在的位置区间,减少不必要的数据扫描。例如,在查询特定日期范围内的订单数据时,索引可以帮助快速找到包含这些日期数据的磁盘块,从而加快查询速度。
  5. 数据导入和ETL(抽取、转换、加载)功能
    • 数据导入方式多样
      • 可以通过多种方式将数据导入ClickHouse,如使用命令行工具(如clickhouse - client)、通过HTTP接口、使用第三方ETL工具(如Apache NiFi、Airbyte等)进行数据传输。这些导入方式可以适应不同的数据源和数据传输场景,方便将来自各种业务系统(如数据库、日志文件、消息队列等)的数据导入ClickHouse。
    • ETL功能支持
      • 在数据导入过程中,ClickHouse支持一定程度的ETL操作。虽然它主要侧重于高性能的数据分析,但也可以在数据加载阶段进行简单的数据清洗(如过滤无效数据、替换缺失值等)和转换(如数据格式转换、数据类型转换等)操作。不过,对于复杂的ETL流程,通常还是会结合专门的ETL工具与ClickHouse一起使用。
  6. 应用场景
    • 日志分析
      • 可以快速处理大量的日志数据,如Web服务器日志、应用程序日志等。通过对日志数据的分析,可以获取用户访问行为、系统性能指标等信息。例如,分析用户访问网站的频率、访问的页面路径、响应时间等,帮助优化网站性能和用户体验。
    • 商业智能和数据分析
      • 在企业的商业智能领域,ClickHouse是一个强大的工具。它可以处理来自销售、市场、财务等多个业务部门的数据,为企业提供数据驱动的决策支持。例如,分析销售数据,了解产品销售趋势、客户购买行为、市场份额变化等,帮助企业制定营销策略、优化产品组合等。
    • 实时监控和告警
      • 能够实时处理和分析监控数据,如服务器性能指标(CPU使用率、内存占用、网络流量等)。当这些指标超出设定的阈值时,可以及时发出告警信息,帮助运维人员快速响应系统故障或性能问题。

4.clickhouse mysql对比

  1. 存储结构与数据模型
    • MySQL
      • MySQL是传统的关系型数据库,采用行式存储。数据以行(记录)为单位存储在磁盘上,每一行包含了表中所有列的信息。例如,在一个包含“用户ID”“用户名”“用户年龄”的用户表中,一条记录会将这三个字段的值完整地存储在一起。这种存储方式在处理事务性操作(如插入、更新、删除单条记录)时比较高效,因为它可以快速定位到整行数据。
    • ClickHouse
      • ClickHouse是列式存储数据库,如前面所述,数据按列存储。对于同样的用户表,“用户ID”列的数据会存储在一个独立的区域,“用户名”列和“用户年龄”列的数据也分别存储。这种存储方式对于分析型查询非常有利,特别是当只需要对部分列进行聚合、过滤等操作时,可以大幅减少不必要的数据读取。
  2. 性能特点
    • MySQL
      • 在事务处理方面表现出色,具有ACID(原子性、一致性、隔离性、持久性)特性,能够很好地支持在线事务处理(OLTP)场景。例如,在电商平台的订单处理系统中,MySQL可以高效地处理用户下单、支付、退款等一系列事务操作,保证数据的准确性和一致性。但是,在处理大规模数据分析查询时,由于需要读取大量行数据来获取所需列的信息,性能可能会受到影响。
    • ClickHouse
      • 专为分析型查询(OLAP)设计,具有高性能的特点。在处理海量数据的复杂分析查询时,如对数十亿条日志数据进行多维度聚合分析,能够快速返回结果。其列式存储、分布式架构、向量化执行引擎等技术使其在数据读取和计算方面具有显著优势。不过,它在事务处理方面相对较弱,不适合作为高并发的事务处理数据库。
  3. 数据规模和扩展性
    • MySQL
      • 可以处理中小规模的数据量,并且通过合理的数据库设计(如索引优化、分库分表等)也能应对一定规模的大数据场景。但是,随着数据量的不断增长,特别是当数据达到非常大规模(如PB级)时,MySQL的性能可能会下降,并且扩展起来相对复杂。例如,在扩展存储容量时,可能需要进行复杂的数据库架构调整,如主从复制、分片等操作。
    • ClickHouse
      • 能够轻松应对海量数据(从GB级到PB级),其分布式架构使得它可以通过增加节点来线性扩展存储容量和计算能力。在处理大规模数据仓库应用场景时,ClickHouse可以有效地存储和分析数据。例如,在大型互联网公司的数据分析平台中,ClickHouse可以存储和分析数亿用户的行为数据、日志数据等。
  4. 数据处理功能
    • MySQL
      • 提供了丰富的SQL功能,用于数据的操作、查询和管理。支持复杂的事务处理、存储过程、触发器等功能,适合构建复杂的业务逻辑系统。例如,在企业资源规划(ERP)系统中,MySQL可以利用存储过程来实现复杂的业务流程,如库存管理中的出入库操作、财务结算等。
    • ClickHouse
      • 主要侧重于数据分析功能,提供了强大的查询功能,如支持高效的聚合函数、窗口函数等,用于对数据进行深度分析。虽然也支持SQL,但它的功能更偏向于快速的数据查询和分析。例如,在数据挖掘和商业智能场景中,ClickHouse可以快速计算各种统计指标、进行数据分组和排序,帮助分析师获取有价值的信息。
  5. 应用场景
    • MySQL
      • 广泛应用于各种业务系统的后端数据库,如电商系统的订单管理、用户管理,企业内部的办公自动化系统、客户关系管理(CRM)系统等,主要用于处理事务性操作和存储业务数据。
    • ClickHouse
      • 主要用于数据分析、数据仓库、商业智能等领域,如互联网公司的用户行为分析、广告效果分析,金融机构的风险评估、市场趋势分析等,为企业提供数据洞察和决策支持。

http://www.kler.cn/a/470571.html

相关文章:

  • LabVIEW之树形控件
  • 大数据高级ACP学习笔记(2)
  • 119.使用AI Agent解决问题:Jenkins build Pipeline时,提示npm ERR! errno FETCH_ERROR
  • Hadoop 生态之 kerberos
  • 设计模式——泛型单例类
  • 形态学:图像处理中的强大工具
  • XXX公司面试真题
  • Selenium 八大元素定位方法及场景扩展
  • Hadoop、Flink、Spark和Kafka
  • Visual studio code编写简单记事本exe笔记
  • 【Uniapp-Vue3】image媒体组件属性
  • 【Logstash01】企业级日志分析系统ELK之Logstash 安装与介绍
  • 【通识安全】煤气中毒急救的处置
  • 数据库系统安全
  • 数据结构:时间复杂度和空间复杂度
  • 如何恢复依赖的go自定义SDK的GoZero项目
  • MCGS学习记录
  • JuiceFS 详解:一款为云原生设计的高性能分布式文件系统
  • @Cacheable 注解爆红(不兼容的类型。实际为 java. lang. String‘,需要 ‘boolean‘)
  • SQL Server 中 STRING_AGG 函数使用拼接字符串超长处理方法
  • JVM实战—10.MAT的使用和JVM优化总结
  • 机器学习周报-ModernTCN文献阅读
  • 回归预测 | MATLAB实现CNN-BiLSTM-Attention多输入单输出回归预测
  • 解决linux自启程序无法在终端输出问题
  • 低空经济应用探索,无人机个性需求组装技术详解
  • 云计算基础,虚拟化原理