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

数仓建模(三)建模三步走:需求分析、模型设计与数据加载

        本文包含:

  • 数据仓库的背景与重要性
  • 数据仓库建模的核心目标
  • 本文结构概览:需求分析、模型设计与数据加载

目录

第一部分:需求分析

1.1 需求分析的定义与目标

1.2 需求分析的步骤

1.2.1 业务需求收集

1.2.2 技术需求分析

1.2.3 成果输出

1.3 常见问题与解决策略

1.4 需求分析案例

第二部分:模型设计

2.1 数据仓库模型的分类与选择

2.1.1 数据仓库模型分类

2.1.2 模型选择的原则

2.2 维度建模的核心概念

2.2.1 事实表

2.2.2 维度表

2.2.3 粒度选择的重要性

2.3 模型设计步骤

2.3.1 概念模型设计

2.3.2 逻辑模型设计

2.3.3 物理模型设计

2.4 常见模型设计问题与优化

2.5 实战案例

第三部分:数据加载

3.1 数据加载的定义与核心任务

3.2 数据加载的流程

3.2.1 数据抽取

3.2.2 数据转换

3.2.3 数据加载

3.3 数据加载的性能优化

3.3.1 优化策略

3.3.2 缓存与索引

3.3.3 异常处理机制

3.4 数据加载的工具与框架

3.4.1 开源工具

3.4.2 数据集成平台

3.5 实战案例

第四部分:综合案例与项目总结

4.1 综合案例:从零到一构建一个数据仓库

4.1.1 项目背景

4.1.2 数据仓库建设流程

1. 需求分析

2. 模型设计

3. 数据加载

4. 系统测试与优化

4.1.3 项目结果

4.2 成功的数据仓库建模经验总结

4.2.1 需求分析的关键

4.2.2 模型设计的原则

4.2.3 数据加载的优化策略

4.2.4 团队协作与管理

结论


建模落地步骤

第一部分:需求分析

1.1 需求分析的定义与目标

在数据仓库建模中,需求分析是首要环节,其目标是明确数据仓库的建设目的,确保最终设计的模型能够满足业务需求和技术需求。

  • 需求分析的定义:通过与业务和技术团队的充分沟通,深入理解业务背景、数据来源及使用场景,并形成清晰的需求文档。
  • 目标
    • 确定数据仓库需要支持的业务指标和分析场景。
    • 梳理各数据源的结构和质量。
    • 识别系统需要的性能和扩展能力。
1.2 需求分析的步骤
1.2.1 业务需求收集
  • 明确业务目标
    例如,在零售行业中,业务需求可能包括客户购买行为分析、销售趋势预测、库存管理优化等。
  • 识别关键指标(KPI)
    通过访谈业务部门,了解他们日常关注的指标,例如销售额、转化率、库存周转率等。
  • 典型分析问题
    • 哪些商品的销售增长最快?
    • 不同地区的销售差异如何?

方法

  • 与业务人员一对一访谈,使用模板问题引导讨论。
  • 组织跨部门的需求研讨会,整合不同团队的视角。
1.2.2 技术需求分析
  • 数据源的类型
    识别企业内部的系统(如CRM、ERP、POS)和外部数据(如第三方统计数据)。
  • 数据质量与可用性评估
    确定数据源是否有缺失、重复或不一致的问题。
  • 性能需求
    例如,日交易记录超过1000万笔的数据仓库,需要支持实时查询和并发分析。

方法

  • 制定数据质量检查清单。
  • 使用数据分析工具(如SQL或Python)进行探索性数据分析(EDA)。
1.2.3 成果输出
  • 需求文档:包括业务需求、技术需求、数据源清单、期望输出格式等。
  • 优先级排序:列出核心需求与次要需求,明确实现顺序。
1.3 常见问题与解决策略
  1. 需求模糊不清
    原因:业务方对数据仓库缺乏了解。
    解决:引入简单的原型系统,帮助业务方快速验证需求。

  2. 需求变更频繁
    原因:市场动态变化或业务策略调整。
    解决:采用敏捷开发方法,分阶段交付。

  3. 跨部门需求冲突
    原因:不同团队对指标定义或优先级存在分歧。
    解决:设立需求评审委员会,确保决策权统一。

1.4 需求分析案例

案例:某零售企业的需求分析

  • 背景:该企业希望通过数据仓库支持销售分析和库存管理。
  • 业务需求
    • 识别畅销品和滞销品。
    • 对比不同地区的销售业绩。
  • 技术需求
    • 日销售数据约500万条,需支持实时查询。
    • 数据来源包括POS系统、会员系统和供应链管理系统。
  • 分析过程
    1. 与销售团队沟通,明确KPI为销售额、毛利率、退货率等。
    2. 检查数据质量,发现POS系统的数据存在部分缺失。
    3. 提出解决方案:在数据加载过程中增加异常值填补与校验逻辑。
  • 输出成果
    • 确定需求文档,列出关键指标和分析场景。
    • 为后续模型设计提供清晰方向。

第二部分:模型设计

2.1 数据仓库模型的分类与选择
2.1.1 数据仓库模型分类
  1. 星型模型

    • 结构特点:以事实表为中心,多个维度表围绕其设计,维度表中不拆分子表。
    • 优点
      • 查询逻辑简单直观,易于理解。
      • 高效支持多维分析,如OLAP查询。
    • 缺点
      • 数据冗余度较高,维度表可能包含重复信息。
  2. 雪花模型

    • 结构特点:对维度表进行进一步规范化拆分,将重复信息分散到多个表中。
    • 优点
      • 数据冗余度低,存储效率高。
    • 缺点
      • 查询复杂度增加,性能下降。
  3. 数据湖与数据仓库结合

    • 背景:现代企业往往需要处理多样化、非结构化的数据。
    • 特点
      • 数据湖存储原始数据,提供灵活性;
      • 数据仓库对经过清洗和转换的数据进行建模,优化性能。
    • 场景:适用于需要同时支持实时流处理和离线分析的场景。
2.1.2 模型选择的原则
  • 业务需求驱动:模型设计需围绕业务场景展开。例如,财务分析偏向使用星型模型,科学研究更倾向于雪花模型。
  • 性能与存储平衡:权衡查询效率和存储空间,例如大规模日志分析场景可能需要宽表设计。
  • 系统扩展性:为未来的数据增长预留空间,如增加新的维度或事实字段。

2.2 维度建模的核心概念
2.2.1 事实表
  • 作用:记录业务活动的数值型数据,通常包含度量指标(如销售额)和外键(关联维度表)。

  • 分类

    1. 事务型事实表:记录单一业务事件,适用于实时交易场景,例如订单明细表。
    2. 快照型事实表:记录某一时刻的整体状态,例如每月库存快照表。
    3. 累积型事实表:记录事件从开始到结束的状态变化,例如项目生命周期表。
  • 设计原则

    • 粒度明确:粒度决定数据表的记录细节水平,影响查询性能与数据量。
      • 示例:电商订单数据的粒度可以是“单个订单”或“单个商品”。
    • 事实列设计:确保每个度量字段都可以有效计算,如总金额、数量等。
2.2.2 维度表
  • 作用:存储描述性信息,为事实表中的数据提供上下文支持。
  • 设计技巧
    • 定义主键(通常为业务主键,如客户ID)。
    • 添加分组字段(如“季度”、“类别”)以支持聚合查询。
    • 使用层次结构(如“国家 > 省 > 市”)优化分析。
2.2.3 粒度选择的重要性
  • 定义:事实表中一条记录的详细程度。
  • 影响:粒度越细,数据量越大,分析的灵活性越高,但性能需求也更高。
  • 案例:零售商的销售分析
    • 粒度:按“交易ID”存储 → 支持订单级分析;按“商品ID”存储 → 支持商品级分析。

2.3 模型设计步骤
2.3.1 概念模型设计
  • 目的:定义高层次的业务实体及其关系。
  • 方法:通过业务需求分析,识别核心对象和关键关系。
  • 示例
    • 实体:客户、产品、订单。
    • 关系:客户与订单之间为“一对多”,订单与产品之间为“多对多”。
2.3.2 逻辑模型设计
  • 定义维度表与事实表
    • 确定主键、外键。
    • 设计字段类型,如数值型用于事实列,字符型用于维度列。
  • 字段设计
    • 添加衍生字段(如“商品类别”、“客户年龄段”)简化分析。
    • 提供多语言支持(如“产品名称”和“产品名称_英文”)。
2.3.3 物理模型设计
  • 数据库技术选择:如MySQL适用于中小型项目,Hive适合大数据量分析。
  • 存储优化
    • 使用分区策略:按时间、区域等分区提升查询性能。
    • 引入分桶:将数据分散到多个文件中以优化Join操作。
  • 索引设计
    • 单字段索引:提高单列查询速度。
    • 复合索引:支持复杂查询场景,如联合过滤条件。

2.4 常见模型设计问题与优化
  1. 事实表过大
    • 问题:大规模事实表查询慢,占用存储多。
    • 解决:按时间、区域或业务场景进行拆分,如按月分表。
  2. 维度表冗余
    • 问题:维度表中重复字段增多,影响存储和一致性。
    • 解决:使用雪花模型或规范化设计。
  3. 数据一致性问题
    • 问题:来自多个系统的数据口径不同,影响分析结果。
    • 解决:在ETL阶段加入清洗规则,确保统一标准。

2.5 实战案例

案例:基于电商平台的模型设计

  1. 背景:某电商平台希望建立数据仓库支持用户行为分析和销售预测。
  2. 需求分析
    • 业务需求:PV、UV、跳出率、销售额分析;按品类统计商品销量。
    • 技术需求:日新增订单数据量500万条,支持10秒内响应查询。
  3. 模型设计
    • 概念模型:核心实体包括用户、订单、商品。
    • 逻辑模型
      • 事实表
        • 订单事实表(订单ID、销售额、用户ID、时间ID、商品ID)
      • 维度表
        • 用户维度表:用户基本信息,如性别、注册时间、会员等级。
        • 商品维度表:商品信息,如类别、品牌、库存状态。
    • 物理模型
      • 基于Hive设计分区表,分区字段为订单日期。
      • 引入分桶优化用户行为查询,分桶字段为用户ID。
  4. 优化措施
    • 宽表设计:将多个维度表的信息预先关联,提升高频查询效率。
    • 增量更新:每日加载增量数据,减少全量更新的性能开销。

第三部分:数据加载

3.1 数据加载的定义与核心任务

数据加载是数据仓库建模中的关键环节,它将原始数据从数据源中抽取、清洗、转换后加载到目标系统(如数据仓库或数据湖)中,为后续分析提供支撑。

  • 核心任务

    1. 数据抽取(Extract):从不同系统中获取原始数据。
    2. 数据转换(Transform):对数据进行清洗、聚合和标准化处理。
    3. 数据加载(Load):将处理后的数据写入数据仓库或数据库。
  • 目标

    • 确保数据的完整性、一致性和准确性。
    • 提高数据加载的性能和可靠性。

3.2 数据加载的流程
3.2.1 数据抽取
  • 数据源类型
    • 关系型数据库(如MySQL、PostgreSQL)
    • 非结构化数据(如JSON、日志文件)
    • 流式数据源(如Kafka、Flume)
  • 抽取方式
    • 全量抽取:适用于初始加载,完整拉取数据。
    • 增量抽取:只提取新增或更新的数据,减少数据量。
  • 工具与技术
    • Sqoop:从关系型数据库导入数据到HDFS或Hive。
    • Kafka:实时数据流的抽取与传输。
3.2.2 数据转换
  • 数据清洗
    • 去除重复数据。
    • 填补缺失值(如使用均值、中位数或默认值)。
    • 标准化字段格式(如日期格式、货币单位)。
  • 数据聚合
    • 例如,按天聚合用户访问日志,生成PV、UV等统计指标。
  • 衍生字段生成
    • 根据业务需求添加计算字段,如“销售额 = 单价 × 数量”。
3.2.3 数据加载
  • 加载方式
    • 批量加载:适用于历史数据或低频更新场景。
    • 实时加载:适用于实时分析需求,如监控系统。
  • 数据验证与监控
    • 验证数据完整性(记录数是否一致)。
    • 监控加载任务状态,及时发现失败或延迟。

3.3 数据加载的性能优化
3.3.1 优化策略
  1. 分区与分桶
    • 分区:按时间或区域对数据进行逻辑分割,减少查询范围。
    • 分桶:将数据物理分块以优化Join操作。
  2. 并行加载
    • 利用多线程或分布式架构并行处理多个数据源或分片。
  3. 批量插入
    • 通过批量插入减少单条插入操作的网络和IO开销。
  4. 增量更新
    • 通过记录变更数据(CDC),避免全量更新。
3.3.2 缓存与索引
  • 使用内存缓存(如Redis)加速加载过程。
  • 在目标系统中提前创建索引以提升写入后查询性能。
3.3.3 异常处理机制
  • 加入容错机制:如数据加载失败时,自动重试或回滚。
  • 生成日志记录:便于排查问题。

3.4 数据加载的工具与框架
3.4.1 开源工具
  1. Apache NiFi
    • 支持数据流的可视化设计和实时监控。
    • 适用于跨平台、多格式数据的集成与传输。
  2. Apache Airflow
    • 提供强大的调度和工作流管理功能,适合批量加载任务。
  3. Kafka
    • 支持高吞吐量的流式数据加载,适用于实时场景。
3.4.2 数据集成平台
  • Informatica:企业级数据集成解决方案,支持复杂ETL任务。
  • Talend:开源工具,适合中小型数据仓库构建。

3.5 实战案例

案例:某金融企业的数据加载实践

  1. 背景

    • 该企业需要构建一个数据仓库支持客户行为分析和风险管理。
    • 数据源包括交易记录系统、用户行为日志和第三方信用评级数据。
  2. 解决方案

    • 数据抽取
      • 使用Kafka实时抽取交易记录数据。
      • 使用Sqoop批量导入用户行为日志到HDFS。
    • 数据转换
      • 对交易记录进行清洗,去除重复条目并填充缺失字段。
      • 衍生信用评分字段,用于风险评级分析。
    • 数据加载
      • 交易数据采用实时加载,每分钟刷新一次。
      • 行为日志采用每日批量加载,更新至Hive数据仓库。
  3. 优化措施

    • 增量更新策略:通过事务时间戳标记增量数据,避免重复加载。
    • 使用分区表:按月分区交易数据,提升查询性能。
    • 监控与告警:通过Airflow监控加载任务状态,确保任务按时完成。
  4. 效果

    • 数据加载性能提升30%,每日数据更新时效性缩短至5分钟内。
    • 支持实时查询和离线分析,为决策提供及时支持。

第四部分:综合案例与项目总结

4.1 综合案例:从零到一构建一个数据仓库
4.1.1 项目背景

某连锁零售企业计划建设数据仓库,目标是支持以下业务需求:

  • 销售分析:按门店、商品类别、时间等维度分析销售额、利润率等关键指标。
  • 库存管理:实时监控库存状态,避免库存过剩或短缺。
  • 客户行为分析:分析客户购买习惯,提供精准营销建议。

技术需求包括:

  • 支持每日1000万条交易记录的导入与查询。
  • 响应时间要求:批量查询 ≤ 10秒,实时数据监控 ≤ 1分钟。
  • 数据来源多样,包括POS系统、CRM系统和第三方供应链数据。

4.1.2 数据仓库建设流程
1. 需求分析
  1. 业务需求:通过与销售、运营和市场团队的沟通,明确关键指标:
    • 日/周/月销售额和利润率。
    • 商品滞销率和补货建议。
    • 不同客户群体的购买偏好。
  2. 技术需求
    • 数据源清单:POS系统、会员系统、供应链管理系统。
    • 性能需求:支持实时监控和历史分析场景。
2. 模型设计
  1. 概念模型:确定核心业务实体和关系:
    • 实体:门店、商品、客户、订单。
    • 关系:客户与订单为“一对多”,订单与商品为“多对多”。
  2. 逻辑模型:设计事实表和维度表:
    • 事实表
      • 销售事实表(销售额、订单量、利润率、时间ID、门店ID、商品ID)。
      • 库存事实表(库存数量、入库时间、商品ID、门店ID)。
    • 维度表
      • 商品维度表:商品类别、品牌、规格等。
      • 时间维度表:日、周、月、季度、年。
      • 门店维度表:地区、门店类型、管理人员等。
      • 客户维度表:性别、年龄段、会员等级等。
  3. 物理模型
    • 使用Hive作为数据仓库,支持大规模数据处理。
    • 按时间分区事实表(如按月分区销售事实表)。
    • 对维度表建立索引(如商品ID索引,提升Join性能)。
3. 数据加载
  1. 数据抽取
    • 使用Kafka实时采集POS系统的订单数据。
    • 使用Sqoop每日批量导入会员数据和供应链数据。
  2. 数据转换
    • 清洗:去重、补齐缺失值(如缺失库存数据用平均值填补)。
    • 衍生:生成商品销量排名和会员购买频率字段。
  3. 数据加载
    • 批量加载:每日更新商品维度和销售事实表。
    • 实时加载:订单数据实时流式写入Kafka,再加载到Hive。
4. 系统测试与优化
  • 测试
    • 测试查询性能,确保核心查询在10秒内完成。
    • 验证数据一致性,确保加载数据与源系统一致。
  • 优化
    • 增量更新:通过记录变更时间戳,仅加载新增或更新数据。
    • 并行加载:分区表加载时采用多线程并行处理。

4.1.3 项目结果
  • 业务效果
    • 销售分析报告生成时间从1小时缩短至5分钟。
    • 实现实时库存监控,库存周转率提升15%。
    • 精准营销活动的ROI提高20%。
  • 技术效果
    • 支持每日数据导入量1亿条,查询响应时间≤10秒。
    • 系统运行稳定,具备良好的扩展性。

4.2 成功的数据仓库建模经验总结
4.2.1 需求分析的关键
  • 与业务部门深度协作:确保模型设计和数据加载完全对齐业务需求。
  • 建立需求优先级:合理规划实现顺序,避免低优先级需求占用资源。
4.2.2 模型设计的原则
  • 关注可扩展性:为未来的业务增长留有扩展空间,如新维度或新事实字段。
  • 平衡性能与存储:通过分区、分桶等技术优化大数据查询性能。
  • 坚持以业务场景为导向:从实际需求出发,避免过度设计或不必要的复杂化。
4.2.3 数据加载的优化策略
  • 自动化与监控:采用工具(如Airflow)调度和监控ETL任务,提升效率并降低出错率。
  • 增量更新:减少全量数据加载的开销,提高加载效率。
  • 实时与批量结合:根据场景选择适合的加载方式,既满足实时监控,也支持历史分析。
4.2.4 团队协作与管理
  • 跨部门协作:建立需求评审机制,减少部门间的冲突。
  • 敏捷开发:分阶段交付系统功能,快速响应需求变更。

结论

        数据仓库建模的成功,离不开需求分析、模型设计和数据加载这三步的紧密结合。通过科学的方法和合理的工具选型,企业能够高效构建一个稳定、可扩展的数据仓库,为数据驱动的决策提供强有力的支持。

        未来,随着实时数据处理技术和数据湖集成方案的发展更进一步(2025年有望),数据仓库的能力将更加丰富,为企业的数字化转型提供更强大的动力。

下节预告:大数据分析的基础结构 星型模型与雪花模型

相关文章:

数仓建模(三)建模三步走:需求分析、模型设计与数据加载

本文包含: 数据仓库的背景与重要性数据仓库建模的核心目标本文结构概览:需求分析、模型设计与数据加载 目录 第一部分:需求分析 1.1 需求分析的定义与目标 1.2 需求分析的步骤 1.2.1 业务需求收集 1.2.2 技术需求分析 1.2.3 成果输出…...

C语言的网络编程

C语言的网络编程 引言 随着互联网的快速发展,网络编程已经成为计算机科学与技术领域中不可或缺的一部分。C语言作为一种底层语言,以其高效、快速和灵活的特性,广泛应用于网络编程中。本文将深入探讨C语言在网络编程中的应用,包括…...

EE213 Lab3 virtuoso NAND NOR INV XOR HA designlayout(min size layout method)

目录 0 前言 1 设计目标 2 减小面积的layout画法 3 NAND 4 NOR 5 INV 6 XOR 7 HA 0 前言 记录一下来到skd上的强度比较大的一门课,数字集成电路2的lab设计还是蛮好的,该帖非详细教程只是单纯的写一些思虑并用作笔记,新手小白欢迎交…...

Qt——QTableWidget 限制单元格输入范围的方法(正则表达式输入校验法、自定义代理类MyItemDelegrate)

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》...

mono3d汇总

lidar坐标系 lidar坐标系可以简单归纳为标准lidar坐标系和nucense lidar坐标系&#xff0c;参考链接。这个坐标系和车辆的ego坐标系是一致的。 标准lidar坐标系 opendet3d&#xff0c;mmdetection3d和kitt都i使用了该坐标系 up z^ x front| /| /left y <------ 0kitti采…...

机器学习第一道菜(一):线性回归的理论模型

机器学习第一道菜&#xff08;一&#xff09;&#xff1a;线性回归的理论模型 一、问题&#xff1a;千金买笑1.1 散点图1.2 机器学习能搞啥 二、模型的建立2.1 线性回归2.2 回归模型 前面讲了机器学习的“四大绝技”&#xff0c;今天&#xff0c;开始研究第一绝技“回归”&…...

Unity的Transform类

1.position 游戏对象的世界坐标以(0, 0, 0)为原点 2.localPosition 本地坐标&#xff0c;相对父物体坐标 3.eulerAngles 相对世界的欧拉角 4.localEulerAngles 本地欧拉角 5.rotation 相对世界四元数 6.localRotation 本地四元…...

指针的进阶

指针的主题&#xff0c;我们在初级阶段的《指针》章节已经接触过了&#xff0c;我们知道了指针的概念&#xff1a; 1. 指针就是个变量&#xff0c;用来存放地址&#xff0c;地址唯一标识一块内存空间。 2. 指针的大小是固定的4/8个字节&#xff08;32位平台/64位平台&#xff0…...

每日学习30分轻松掌握CursorAI:Cursor插件系统与扩展功能

Cursor插件系统与扩展功能 一、课程概述 今天我们将学习Cursor AI的插件系统&#xff0c;了解如何通过插件扩展和增强IDE功能。由于Cursor AI基于VS Code开发&#xff0c;我们可以利用丰富的VS Code插件生态系统。 1.1 学习目标 了解插件系统原理掌握插件安装管理使用常用开…...

【WEB】网络传输中的信息安全 - 加密、签名、数字证书与HTTPS

文章目录 1. 概述2. 网络传输安全2.1.什么是中间人攻击2.2. 加密和签名2.2.1.加密算法2.2.2.摘要2.2.3.签名 2.3.数字证书2.3.1.证书的使用2.3.2.根证书2.3.3.证书链 2.4.HTTPS 1. 概述 本篇主要是讲解讲一些安全相关的基本知识&#xff08;如加密、签名、证书等&#xff09;&…...

Dexie.js内存管理技巧:在大型数据集操作中避免浏览器崩溃

Dexie.js 内存管理技巧&#xff1a;避免浏览器崩溃 在使用 Dexie.js 操作 大型数据集 时&#xff0c;如果不注意内存管理&#xff0c;可能会导致浏览器内存溢出&#xff08;OOM&#xff0c;Out of Memory&#xff09;或崩溃。因此&#xff0c;以下 内存管理技巧 可用于优化性能…...

vscode项目依赖问题

必读 一定要将前端下拉的项目备份一下&#xff0c;很容易运行导致依赖报错&#xff0c;重新下载 命令 使用幽灵分解器安装 pnpm install 替代 npm install 设置淘宝NPM镜像源 yarn config set registry https://registry.npmmirror.com 查看目前依赖包的版本 npm list ant-d…...

LLMs之RAG:《EdgeRAG: Online-Indexed RAG for Edge Devices》翻译与解读

LLMs之RAG&#xff1a;《EdgeRAG: Online-Indexed RAG for Edge Devices》翻译与解读 导读&#xff1a;这篇论文针对在资源受限的边缘设备上部署检索增强生成 (RAG) 系统的挑战&#xff0c;提出了一种名为 EdgeRAG 的高效方法。EdgeRAG 通过巧妙地结合预计算、在线生成和缓存策…...

宇泰串口卡驱动在Ubuntu22.04编译、安装汇总

从官网下载驱动官网地址 上传到Ubuntu, 目录结构如下&#xff1a; 驱动源代码: 驱动代码是基于开源项目编译来的 编译路径不能有中文路径&#xff0c;否则可能有类似错误 源码是基于Linux2.3内核编译&#xff0c;我当前是6.8.0-51&#xff0c;数据结构有升级&#xff0c;需要调…...

python管理工具:conda部署+使用

python管理工具&#xff1a;conda部署使用 一、安装部署 1、 下载 - 官网下载&#xff1a; https://repo.anaconda.com/archive/index.html - wget方式&#xff1a; wget -c https://repo.anaconda.com/archive/Anaconda3-2023.03-1-Linux-x86_64.sh2、 安装 在conda文件的…...

(三)html2canvas将HTML 转为图片并实现下载

将 HTML 转为图片并实现下载&#xff0c;通常可以使用一个叫做 html2canvas 的 JavaScript 库。html2canvas 能够将 HTML 元素及其样式渲染成一个画布 (Canvas)&#xff0c;然后将该画布转换为图片格式&#xff08;如 PNG 或 JPEG&#xff09;&#xff0c;最终提供下载功能。 …...

安装Docker流程

1.卸载旧版 首先如果系统中已经存在旧的Docker&#xff0c;则先卸载&#xff1a; yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine 2.配置Docker的yum库 首先要安装一个…...

flutter 使用google_mlkit_image_labeling做图片识别

在AI横行的如今&#xff0c;相信大家或多或少都做过跟AI接轨的需求了吧&#xff1f;今天我说的是关于图片识别的需求&#xff0c;flutter的专属图片识别插件google_mlkit_image_labeling。 google_mlkit_image_labeling它是Google旗下的Google Cloud Vision API中分支出来的一部…...

宝塔php7.4安装报错,无法安装,php8以上可以安装,以下的不行,gd库什么的都正常

宝塔的依赖问题导致的问题&#xff0c;最后手动挂载后才解决。。。废了三天三夜终于搞好了。。。。无语&#xff5e; 建议&#xff1a;不要一直升级宝塔版本&#xff0c;升级前备份或者开服务商的实例镜像&#xff0c;方便恢复&#xff0c;不然&#xff0c;可就GG了&#xff5…...

python中的RPA->playwright自动化录制脚本实战案例笔记

playwright录制功能使用绕过登录操作 1、首先安装playwright pip install playwright2、 安装支持的浏览器 playwright install # 安装支持的浏览器&#xff1a;cr, chromium, ff, firefox, wk 和 webkit3、接着在自己的项目下运行录制命令&#xff1a; playwright codegen…...

Python在DevOps中的应用:自动化CI/CD管道的实现

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门&#xff01; 解锁Python编程的无限可能&#xff1a;《奇妙的Python》带你漫游代码世界 在现代软件开发中&#xff0c;DevOps理念的引入极大地提升了开发与运维的协作效率&#xff0c;而持续集成&#xff08…...

Centos 离线安装杀毒软件

离线部署实现&#xff1a; 1、去官网下载对应的软件包&#xff0c;centos就下载 .rpm软件包。https://www.clamav.net/downloads2、将下载的软件包上传到服务器后使用rpm命令进行安装&#xff0c;软件包里面已经将相关依赖这些打包好了&#xff0c;直接安装就行。 rpm -ivh --…...

TiDB使用过程中需要注意的坑点:避免踩雷

TiDB使用过程中需要注意的坑点&#xff1a;避免踩雷 TiDB作为一个分布式数据库&#xff0c;虽然在许多场景下表现出色&#xff0c;但在使用过程中也有一些“坑”需要开发者特别注意。尤其是在生产环境中&#xff0c;踩雷可能会导致性能问题&#xff0c;甚至系统宕机。今天&…...

Mysql--实战篇--大数据量表的分页优化(自增长主键,子查询主键主查询全部,查询条件加索引,覆盖索引等)

当Mysql数据表存储大量数据时&#xff08;百万级别数据&#xff09;&#xff0c;分页查询的性能问题是一个常见的挑战。特别是当使用LIMIT和OFFSET时&#xff0c;随着OFFSET的增加&#xff0c;查询性能会显著下降。原因在于MySQL需要扫描并跳过前面的行&#xff0c;这会导致I/O…...

Datawhale组队学习笔记task1——leetcode面试题

文章目录 写在前面刷题流程刷题技巧 Day1题目1、0003.无重复字符的最长子串解答&#xff1a;2.00004 寻找两个正序数组的中位数解答&#xff1a;3.0005.最长回文子串解答4.0008.字符串转换整数解答&#xff1a; Day2题目1.0151.反转字符串中的单词解答2.0043.字符串相乘解答3.0…...

【快速入门 LVGL】-- 1、STM32 工程移植 LVGL

目录 一、LVGL 简述 二、复制一个STM32工程 三、下载 LVGL 四、裁剪 源文件 五、工程添加 LVGL 文件 六、注册 显示 七、注册 触摸屏 八、LVGL 心跳、任务刷新 九、开跑 LVGL 十、控件的事件添加、响应处理 十 一、几个好玩小事情 十 二、显示中文 ~~ 约定 ~~ 在…...

Mac使用-快速开始总结(持续更新)

目录 Mac使用-快速开始总结常用快捷键 Mac使用-快速开始总结 第一次使用mac&#xff0c;发现很多细节上和windows不一样&#xff0c;以下是自己遇到的常用总结&#xff0c;帮助自己快速熟悉mac的使用&#xff5e; 常用快捷键 复制、粘贴 快捷键&#xff1f; 复制&#xff1a;…...

Kubernetes (K8s) 入门指南

Kubernetes (K8s) 入门指南 什么是Kubernetes&#xff1f; Kubernetes&#xff0c;通常简称为 K8s&#xff08;因为从 “K” 到 “s” 之间有八个字符&#xff09;&#xff0c;是一个开源的容器编排平台&#xff0c;用于自动化部署、扩展和管理容器化应用程序。它最初由谷歌设…...

归纳webpack

常用配置项 const HtmlWebpackPlugin require(html-webpack-plugin); // 通常用于生成HTML const MiniCssExtractPlugin require(mini-css-extract-plugin);// 用于分离CSS const cssMinimizerWebpackPlugin require("css-minimizer-webpack-plugin"); // 用于压…...

Web APP 阶段性综述

Web APP 阶段性综述 当前&#xff0c;Web APP 主要应用于电脑端&#xff0c;常被用于部署数据分析、机器学习及深度学习等高算力需求的任务。在医学与生物信息学领域&#xff0c;Web APP 扮演着重要角色。在生物信息学领域&#xff0c;诸多工具以 Web APP 的形式呈现&#xff…...

SpringBoot之OriginTrackedPropertiesLoader类源码学习

源码解析 /*** 作用是从给定的资源&#xff08;如文件或输入流&#xff09;中加载 .properties 文件&#xff0c;* 并将属性键值对转换为带有来源信息&#xff08;origin&#xff09;的 OriginTrackedValue 对象。*/ public class OriginTrackedPropertiesLoader {private fin…...

Flask学习入门笔记

Flask学习入门笔记 前言1. 安装Flask2. 创建一个简单的Flask应用3. 路由与视图函数3.1 基本路由3.2 动态路由3.3 HTTP方法 4. 请求与响应4.1 获取请求数据4.2 返回响应 5. 模板渲染5.1 基本模板渲染5.2 模板继承 6. 静态文件6.1 静态文件的目录结构6.2 在模板中引用静态文件6.2…...

List 接口的实现类

在 Java 中&#xff0c;List 是一个非常常用的接口&#xff0c;提供了有序、可重复的元素集合。List 接口有多个实现类&#xff0c;每个实现类都有其特定的特性和适用场景。以下是 Java 中主要实现了 List 接口的类及其详细介绍。 1. 常见的 List 实现类 1.1 ArrayList 简介&…...

SpringCloud-基于Docker和Docker-Compose的项目部署

一、初始化环境 1. 卸载旧版本 首先&#xff0c;卸载可能已存在的旧版本 Docker。如果您不确定是否安装过&#xff0c;可以直接执行以下命令&#xff1a; sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logro…...

【人工智能】Python中的自动化机器学习(AutoML):如何使用TPOT优化模型选择

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门&#xff01; 解锁Python编程的无限可能&#xff1a;《奇妙的Python》带你漫游代码世界 随着机器学习在各行业的广泛应用&#xff0c;模型选择和优化成为了数据科学家面临的主要挑战之一。自动化机器学习&am…...

Kafka 超级简述

Kafka 就是一个 分布式的消息系统&#xff0c;它帮助不同的系统和应用之间传递信息。可以把它想象成一个超级高效的 “邮局”&#xff1a; 生产者&#xff08;Producer&#xff09; 就是把信息&#xff08;消息&#xff09;送到这个 “邮局” 的人。消费者&#xff08;Consume…...

tomcat项目运行后报500

HTTP状态 500 - 内部服务器错误 类型 异常报告消息 实例化Servlet类[com.mdy.servlet_02.LifeDemoServlet]异常描述 服务器遇到一个意外的情况&#xff0c;阻止它完成请求。例外情况jakarta.servlet.ServletException: 实例化Servlet类[com.mdy.servlet_02.LifeDemoServlet]异常…...

Chapter1:初见C#

参考书籍&#xff1a;《C#边做边学》&#xff1b; 1.初见C# 1.1 C#简介 C # {\rm C\#} C#编写了许多完成常用功能的程序放在系统中&#xff0c;把系统中包含的内容按功能分成多个部分&#xff0c;每部分放在一个命名空间中&#xff0c;导入命名空间语法格式如下&#xff1a; /…...

SQL-leetcode—620. 有趣的电影

620. 有趣的电影 表&#xff1a;cinema ------------------------ | Column Name | Type | ------------------------ | id | int | | movie | varchar | | description | varchar | | rating | float | ------------------------ id 是该表的主键(具有唯一值的列)。 每行包含…...

《鸿蒙Next平台:决策树面对噪声数据的鲁棒性逆袭》

在机器学习领域&#xff0c;决策树是一种强大的模型&#xff0c;但训练数据中的噪声往往会影响其性能和鲁棒性。在鸿蒙Next平台上&#xff0c;我们可以采用多种策略来增强决策树模型在面对噪声数据时的鲁棒性。 数据预处理层面 数据清洗&#xff1a;利用鸿蒙Next平台的数据处理…...

minio https配置

如果使用了官网的教程 使用minio-user作为启动用户 准备好&#xff1a;文件名要定死&#xff0c;因为minio只认识key和crt文件 将xxxxx.key重命名为private.key 将xxxxx.pem重命名为public.crt 将这两个文件放到/home/minio-user/.minio/certs/ 目录下 chown -r minio…...

Windows重装后NI板卡LabVIEW恢复正常

在重新安装Windows系统后&#xff0c;NI&#xff08;National Instruments&#xff09;板卡能够恢复正常工作&#xff0c;通常是由于操作系统的重新配置解决了之前存在的硬件驱动、兼容性或配置问题。操作系统重装后&#xff0c;系统重新加载驱动程序、清理了潜在的冲突或损坏的…...

Spring Initializr创建springboot项目 “java: 错误: 无效的源发行版:19”

我用的1.8的jdk&#xff0c;排查发现这是jdk和springboot版本冲突导致的。 1、File->Project Structure->Module->source和dependancies改成相应的版本 2、File->Setting->Build,Execution,Deployment->Compiler->Java Compiler->target bytecode ver…...

Vue computed属性原理及其惰性求值特点

1&#xff0c;computed属性 在 Vue.js 中&#xff0c; computed 属性是 Vue 响应式系统的一个核心特性&#xff0c;它允许开发者声明式地描述一个依赖其他响应式属性的计算值。 computed 属性是基于它们的依赖进行缓存的&#xff0c;只有当依赖发生变化时&#xff0c;它们才会…...

关于在 Kotlin DSL 中,ndk 的配置方式

在 Kotlin DSL 中&#xff0c;ndk 的配置方式有所不同&#xff0c;取决于 Android Gradle 插件版本。ndk { abiFilters(…) } 在 Kotlin DSL 中实际上是 externalNativeBuild 的一部分&#xff0c;需要通过正确的上下文调用。 错误代码&#xff1a; ndk {abiFilters("ar…...

机器学习(一)

一, Supervised Machine Learning (监督机器学习) 1,定义:学习X到Y或输入到输出的映射的算法&#xff0c;学习算法从正确答案中学习。即教机器 如何做事情(数据集学习算法模型)&#xff0c;根据已有的数据集&#xff0c;知道输入和输出结果 之间的关系&#xff0c;并根据这…...

得物App再迎开放日,全流程体验正品查验鉴别

近日&#xff0c;得物App超级品质保障中心再度迎来了开放日活动。近60位得物App的用户与粉丝齐聚超级品质保障中心&#xff0c;全流程体验正品查验鉴别。开放日当天&#xff0c;参与者有机会近距离观察得物App的商品质检区、鉴别区、收发流转区、实验室和正品库等关键功能区&am…...

《leetcode-runner》【图解】【源码】如何手搓一个debug调试器——表达式计算

前文&#xff1a; 《leetcode-runner》如何手搓一个debug调试器——引言 《leetcode-runner》如何手搓一个debug调试器——架构 《leetcode-runner》如何手搓一个debug调试器——指令系统 《leetcode-runner》【图解】如何手搓一个debug调试器——调试程序【JDI开发】【万字详解…...

Flink概述

一、Flink是什么 二、Flink特点 三、Flink vs SparkStreaming 表 Flink 和 Streaming对比 Flink Streaming 计算模型 流计算 微批处理 时间语义 事件时间、处理时间 处理时间 窗口 多、灵活 少、不灵活&#xff08;窗口必须是批次的整数倍&#xff09; 状态 有 …...

【Linux】信号

目录 一、信号的概念二、信号的产生2.1 通过键盘进行信号的产生2.2 通过系统调用进行信号的产生2.2.1 kill函数2.2.2 raise函数2.2.3 abort函数 2.3 通过异常的方式进行信号的产生2.4 通过软件条件的方式进行信号的产生2.4.1 关闭管道读端2.4.2 alarm函数 2.5 Core Dump&#x…...