数据仓库: 3- ETL过程
目录
- 3- ETL过程
- 3.1 数据抽取(Extract)
- 3.1.1 数据抽取的挑战
- 3.1.2 数据抽取的方式
- 3.1.2.1 全量抽取
- 3.1.2.2 增量抽取
- 3.1.2.3 实时抽取
- 3.1.3 数据抽取的技术
- 3.1.4 数据抽取工具
- 3.1.5 总结
- 3.2 数据转换(Transform)
- 3.2.1 定义
- 3.2.2 主要的数据转换类型
- 3.2.3 常见的数据转换操作
- 3.2.4 数据转换的技术实现
- 3.2.5 数据转换的挑战
- 3.2.6 数据转换的最佳实践
- 3.2.7 数据转换的监控和优化
- 3.2.8 新型趋势
- 3.2.9 常见的数据转换方法
- 3.2.9.1 数据清洗
- 3.2.9.2 数据结构转换
- 3.2.9.3 数据结构转换
- 3.2.9.4 数据内容转换
- 3.2.10 总结
- 3.3 数据加载(Load)
- 3.3.1 数据加载方式
- 3.3.1.1 全量加载 (Full Load)
- 3.3.1.2 增量加载 (Incremental Load)
- 3.3.1.3 批量加载 (Bulk Load)
- 3.3.2 数据加载步骤
- 3.3.3 数据加载工具
- 3.3.4 数据加载最佳实践
- 3.3.5 总结
- 3.4 ETL工具介绍(如Kettle、Talend)
- 3.4.1 ETL 工具的功能
- 3.4.2 常见的 ETL 工具
- 3.4.2.1 商业 ETL 工具:
- 3.4.2.2 开源 ETL 工具:
- 3.4.3 如何选择 ETL 工具
- 3.4.4 总结
- end
3- ETL过程
3.1 数据抽取(Extract)
数据抽取是 ETL (Extract, Transform, Load) 过程的第一步, 也是至关重要的一步 ; 它负责从不同数据源中提取数据, 为后续的数据转换和加载做准备 ;
3.1.1 数据抽取的挑战
- 数据源多样性: 数据仓库的数据通常来自多个不同的数据源, 例如关系型数据库、文本文件、Execl文件、NoSQL 数据库、API接口等, 每个数据源都有其独特的格式和访问方式 ;
- 数据量大: 许多企业的数据量非常庞大, 特别是互联网行业, 数据抽取需要高效地处理海量数据 ;
- 实时性要求: 一些业务场景需要实时获取最新的数据, 这就要求数据抽取能够支持实时或近实时的数据同步 ;
- 数据质量: 不同数据源的数据质量参差不齐, 数据抽取需要进行数据清洗和校验, 保证数据质量 ;
- 最小化对源系统的影响: 数据抽取需要尽可能地减少对源系统的性能影响, 避免影响其正常运行 ;
3.1.2 数据抽取的方式
3.1.2.1 全量抽取
全量抽取是指每次抽取时, 都获取数据源中的所有数据 ; 适用于:
- 初始加载数据仓库
- 数据量较小
- 对数据实时性要求不高
3.1.2.2 增量抽取
增量抽取是指只抽取上次抽取之后发生变化的数据; 常用的增量抽取方法包括:
- 基于时间戳: 根据数据源中记录的时间戳字段判断数据是否发生变化 ;
- 基于快照: 将数据源中的数据定期生成快照, 然后比较不同时间点的快照, 找出变化的数据 ;
- 基于日志: 通过解析数据源的日志文件, 识别出发生变化的数据 ;
- 基于触发器: 在数据源中设置触发器, 当数据发生变化时自动通知数据仓库进行数据抽取 ;
3.1.2.3 实时抽取
实时抽取是指以流式的方式持续不断地从数据源中获取数据 ; 常用的实时抽取工具包括:
- Kafka
- Flume
- Logstash
实时抽取适应于:
- 对数据实时性要求极高
- 数据源支持实时数据流
3.1.3 数据抽取的技术
- 直接连接: 通过数据库连接直接从源系统读取数据 ;
- 文件传输: 将源数据导出为文件, 然后传输到目标系统 ;
- 应用程序接口(API): 通过调用源系统提供的API来获取数据 ;
- 变更数据捕获(CDC): 实时捕获源系统中的数据变化 ;
3.1.4 数据抽取工具
常用的数据抽取工具包括:
- 开源工具: Sqoop、Kettle、DataX 等 ;
- 商业软件: Informatica PowerCenter、IBM DataStage、Oracle GoldenGate 等 ;
- 云服务: AWS Glue、Azure Data Factory、阿里云 DataWorks 等 ;
选择合适的工具需要考虑数据源类型、数据量、性能要求、成本等因素 ;
3.1.5 总结
数据抽取是数据仓库建设中的重要环节, 需要根据不同的数据源和业务需求选择合适的抽取方式和工具, 并采取有效的措施保证数据质量和效率, 为后续的数据处理和分析打下坚实的基础 ;
3.2 数据转换(Transform)
数据转换是ETL过程中的第二步, 也是最复杂和最耗时的阶段 ; 它涉及将抽取的原始数据转换为适合目标数据仓库的格式和结构 ;
3.2.1 定义
数据转换的定义: 数据转换是将源系统中抽取的数据转化为符合目标数据仓库要求的过程 ; 这包括数据清洗、标准化、聚合和结构化等操作 ;
3.2.2 主要的数据转换类型
- 数据清洗: 修正或删除不正确、不完整、不准确或重复的数据 ;
- 数据标准化: 统一数据格式, 确保数据的一致性 ;
- 数据聚合: 将详细数据汇总为更高层次的信息 ;
- 数据派生: 根据现有数据计算或推导新的数据 ;
- 数据分割/合并: 将一个字段拆分为多个字段, 或将多个字段合并为一个 ;
3.2.3 常见的数据转换操作
- 字符串操作: 如大小写转换、截取、连接等 ;
- 日期时间转换: 统一日期格式, 计算时间差等 ;
- 数值计算: 如四则运算、取整、百分比计算 等 ;
- 数据类型转换: 如将字符串转换为数字 ;
- 查找替换: 使用查找表替换代码或值 ;
- 条件转换: 基于特定条件执行不同的转换逻辑 ;
3.2.4 数据转换的技术实现
- SQL转换: 使用SQL语句进行数据转换 ;
- ETL工具: 使用专门的ETL工具, 如Informatica、Talend 等 ;
- 编程语言: 使用Python、Java等语言编写自定义转换逻辑 ;
- 存储过程: 在数据库中使用存储过程进行转换 ;
3.2.5 数据转换的挑战
- 性能问题: 复杂的转换可能会导致性能瓶颈 ;
- 数据质量: 确保转换后的数据质量和准确性 ;
- 业务规则复杂性: 处理复杂的业务规则和转换逻辑 ;
- 可扩展性: 设计可扩展的转换流程以适应未来的需求变化 ;
3.2.6 数据转换的最佳实践
- 模块化设计: 将复杂的转换逻辑拆分为可管理的模块 ;
- 数据质量检查: 在转换过程中实施数据质量检查 ;
- 版本控制: 对转换逻辑进行版本控制, 便于追踪和回滚 ;
- 文档化: 详细记录转换规则和逻辑, 便于维护和审计 ;
- 并行处理: 利用并行处理技术提高转换效率 ;
3.2.7 数据转换的监控和优化
- 性能监控: 监控转换过程的执行时间和资源使用情况 ;
- 错误处理: 实现健壮的错误处理机制, 记录和报告异常 ;
- 优化策略: 根据监控结果, 优化转换逻辑和执行计划 ;
3.2.8 新型趋势
- 实时转换: 支持实时或近实时的数据转换 ;
- 机器学习应用: 使用机器学习技术进行高级数据清洗和转换 ;
- 云端转换: 利用云计算资源进行大规模数据转换 ;
3.2.9 常见的数据转换方法
3.2.9.1 数据清洗
- 空值处理: 填充默认值、删除记录、替换值等 ;
- 重复值处理: 删除重复记录、保留唯一记录等 ;
- 异常值处理: 删除异常值、替换值、使用平均值等 ;
- 数据校验: 使用规则引擎、正则表达式等对数据进行校验, 确保数据符合规范 ;
3.2.9.2 数据结构转换
- 数据类型转换: 例如将文本类型转换为日期类型, 将字符串类型转换为数值类型等 ;
- 日期格式转换: 例如将"YYYY-MM-DD"格式转换为"MM/DD/YYYY"格式 ;
- 编码格式转换: 例如将 GBK 编码转换为 UTF-8 编码 ;
3.2.9.3 数据结构转换
- 表合并: 将多个具有相同结构的表合并成一个表, 例如将多个地区的销售数据合并成全国销售数据 ;
- 表拆分: 将一个包含多个主题的表拆分成多个主题单一的表, 例如将客户信息表拆分成客户基本信息表和客户联系方式表 ;
- 行列转换: 将数据表中的行准换为列, 或将列转换为行, 例如将每个月的销售数据从多行转换为多列 ;
3.2.9.4 数据内容转换
- 数据计算: 例如计算销售总额、利润率、平均值等 ;
- 单位转换: 例如将人民币转换为美元, 将公斤转换为磅等 ;
- 代码转换: 例如将产品代码转换为产品名称, 将地区代码转换为地区名称等 ;
- 数据派生: 根据已有数据生成新的指标, 例如根据客户购买历史计算客户价值, 根据用户行为预测用户流失等 ;
3.2.10 总结
数据转换是 ETL 过程中至关重要的一步, 它直接影响到数据仓库的数据质量和分析结果的准确性 ;
选择合适的转换方法和工具, 并遵循最佳实践, 可以有效地完成数据转换任务, 为数据分析和业务决策提供高质量的数据支持 ;
3.3 数据加载(Load)
数据加载是 ETL 过程的最后阶段, 也是数据仓库建设中至关重要的一步 ; 在这一阶段, 经过清洗、转换后的数据将从暂存区加载到目标数据仓库中 ;
高效、准确的数据加载能够保证数据仓库的质量和性能, 为后续的数据分析和决策提供有力支持 ;
3.3.1 数据加载方式
数据加载的方式主要有三种:
3.3.1.1 全量加载 (Full Load)
- 每次加载都会清空目标表, 然后将所有数据重新加载 ;
- 这种方式简单直接, 但对于数据量大的情况效率较低, 且会对系统造成较大压力 ;
3.3.1.2 增量加载 (Incremental Load)
只加载自上次加载操作以来新增或修改的数据 ;
这种方式效率高, 对系统影响小, 但需要记录数据的变化, 实现起来相对复杂 ;
- 基于时间戳: 通过比较数据源和目标表的时间戳字段, 识别出变化的数据进行加载 ;
- 基于快照: 将数据源子啊不同时间点的状态保存为快照, 通过比较快照识别变化的数据 ;
- 基于日志: 通过解析数据库的日志文件, 识别出数据的变化并进行加载 ;
3.3.1.3 批量加载 (Bulk Load)
使用专门的工具或命令, 将大量数据一次性加载到目标表中 ;
这种方式效率最高, 但需要数据库提供相应的支持 ;
3.3.2 数据加载步骤
数据加载过程通常包括以下步骤 :
- 数据验证: 在加载数据之前, 需要对数据进行验证, 确保其完整性、一致性和准确性 ; 例如: 检查数据类型是否匹配、时间是否为空值、数据是否符合业务规则等 ;
- 数据清洗: 对于不符合要求的数据, 需要进行清洗或转换, 例如处理缺失值、转换数据格式、去除重复数据等 ;
- 数据排序: 为了提高加载效率, 可以对数据进行排序, 特别是对于大规模数据加载 ;
- 数据加载: 将数据加载到目标表中, 可以选择不同的加载方式和策略 ;
- 索引创建: 为了提高查询效率, 需要在加载数据后创建索引 ;
- 数据验证: 数据加载完成后, 需要再次进行验证, 确保数据已正确加载到目标表中 ;
3.3.3 数据加载工具
市面上有很多数据加载工具可供选择, 例如:
- 开源工具: Sqoop、Kettle、Apache NiFi 等 ;
- 商业工具: Informatica PowerCenter、IBM DataStage、Microsoft SSIS
3.3.4 数据加载最佳实践
- 选择合适的加载方式, 根据数据量、数据变化频率、系统性能等因素综合考虑 ;
- 对数据进行预处理, 例如数据清洗、排序等, 可以提供加载效率 ;
- 使用批量加载工具, 可以大幅度提高加载效率 ;
- 对加载过程进行监控, 及时发现并解决问题 ;
3.3.5 总结
数据加载是数据仓库建设中不可或缺的一环, 选择合适的加载方式和工具, 并遵循最佳实践, 可以确保数据仓库的质量和性能, 为企业提供高质量的数据服务 ;
3.4 ETL工具介绍(如Kettle、Talend)
ETL (Extract, Transform, Load) 是数据仓库建设的核心环节, 而 ETL 工具则是实现ETL过程的关键 ;
它们提供了图形化界面、预定义组件和自动化功能, 帮助用户高效地完成数据集成和转换任务 ;
3.4.1 ETL 工具的功能
- 数据抽取: 从各种数据源 (如关系型数据库、NoSQL数据库、文件、API等) 中抽取数据 ;
- 数据清洗和转换: 对抽取的数据进行清洗、去重、格式转换、结构转换、内容转换等操作, 以满足数据仓库的规范和业务需求 ;
- 数据加载: 将转换后的数据加载到目标数据仓库中, 并进行数据检验和索引优化 ;
- 任务调度和监控: 支持定时或事件触发的 ETL 任务调度, 并提供监控功能, 实时跟踪任务执行情况和数据质量 ;
- 元数据管理: 记录数据源、目标库、转换规则等元数据信息, 方便用户进行数据血缘分析和影响分析 ;
3.4.2 常见的 ETL 工具
3.4.2.1 商业 ETL 工具:
- Informatica PowerCenter: 业界领先的 ETL 工具, 功能强大, 性能优异, 但价格昂贵 ;
- IBM DataStage: 成熟稳重的 ETL 工具, 支持多种平台和数据源, 适用于大型企业 ;
- Oracle Data Integrator (ODI): 与 Oracle 数据库紧密集成的 ETL 工具, 功能全面, 易于使用 ;
- Microsoft SQL Server Integration Services (SSIS): 与 SQL Server 数据库紧密集成的 ETL 工具, 功能强大, 性价比高 ;
3.4.2.2 开源 ETL 工具:
- Apache Kafka: 高吞吐量的分布式消息队列系统, 常用于实时数据采集和传输 ;
- Apache Spark: 快速、通用的集群计算引擎, 支持批处理和流处理, 可用于大规模数据转换 ;
- Apache NIFI: 数据流处理和自动化工具, 支持图形化界面配置数据流, 适用于复杂的数据集成场景 ;
- Kettle (Pentaho Data Integration): 易于使用的开源 ETL 工具, 提供图形化界面和丰富的组件, 适用于中小型企业 ;
3.4.3 如何选择 ETL 工具
- 数据源和目标库: 工具是否支持所需的数据源和目标库类型 ;
- 数据量和性能要求: 工具的处理能力和性能是否满足数据量和处理速度的要求 ;
- 功能需求: 工具是否提供所需的数据转换、任务调度、元数据管理等功能 ;
- 成本预算: 工具的许可费用、实施成本和维护成本是否符合预算 ;
- 技术团队: 团队的技术栈和技能是否与工具匹配 ;
3.4.4 总结
ETL 工具是数据仓库建设不可或缺的工具, 它们可以帮助用户高效地完成数据集成和转换任务, 提高数据质量, 为数据分析和业务决策提供有力支持 ;
选择合适的 ETL 工具需要综合考虑多种因素, 并根据实际需求进行权衡 ;
end
相关文章:

数据仓库: 3- ETL过程
目录 3- ETL过程3.1 数据抽取(Extract)3.1.1 数据抽取的挑战3.1.2 数据抽取的方式3.1.2.1 全量抽取3.1.2.2 增量抽取3.1.2.3 实时抽取 3.1.3 数据抽取的技术3.1.4 数据抽取工具3.1.5 总结 3.2 数据转换(Transform)3.2.1 定义3.2.2…...

js数组变字符串
let array [1,2,3]; let string array.join(,); // 使用空格作为分隔符 console.log(string); // 输出: "1,2,3"...

日常问题笔记1
th:insert:将被引用的模板片段插⼊到自己的标签体中 th:replace:将被引用的模板片段替换掉自己 th:include:类似于 th:insert,⽽不是插⼊⽚段,它只插⼊此⽚段的内容 <!--1、比如抽取的公用代码片段如下--> <…...

位图与布隆过滤器 —— 海量数据处理
🌈 个人主页:Zfox_ 🔥 系列专栏:C从入门到精通 目录 🚀 位图 一: 🔥 位图概念 二: 🔥 位图的实现思路及代码实现三: 🔥 位图的应用四:…...

二:《Python基础语法汇总》— 条件判断与循环结构
一:条件判断 1.程序执行的三大流程: 顺序流程:无缩进代码,从上往下依次执行 分支流程:选择性执行某块代码,或跳过某行代码去执行,与缩进(TAB)有关 循环流程&…...

【威锋网-注册安全分析报告-无验证方式导致安全隐患】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…...

01_React简介、基础入门
React 简介、基础入门 一、React 简介1、是什么?2、谁开发的?3、为什么要学?4、React 的特点5、学习 React 之前你要掌握的 Javascript 基础知识 二、React 入门1、相关 js 库2、Hello React 入门小例子---React16.8.0 版本3、为什么不用 js …...

【Java 内存区域】
Java内存区域 JDK1.7 VS JDK1.8堆 (Heap)方法区 (Method Area)String 常量池 (String Pool)运行时常量池 (Runtime Constant Pool)虚拟机栈 (JVM Stack)局部变量表操作数栈动态链接方法返回信息 本地方法栈 (Native Method Stack)程序计数器 (Program Counter Register)元空间 …...

你是如何克服编程学习中的挫折感的?
一:学习之路 在编程学习的过程中,挫折和挑战是不可避免的。面对这些困难,我个人的一些经验和方法如下,或许能为你提供一些启示: 1. 学会分解问题 当遇到复杂的算法或者Bug时,我会将问题分解成更小的部分。…...

【AI应用实战】灵办AI插件集成详细指南
一、写在前面 随着AI技术的日新月异,大型模型应用如雨后春笋般涌现,从ChatGPT到文心一言,再到讯飞星火,无一不彰显着智能科技的无限潜力。而在这股浪潮中,我们欣喜地发现,一些创新的浏览器插件正悄然兴起&a…...

MySQL数据库连接超时问题排查报告
1、问题描述 边端设备访问云端过程中有概率出现MySQL数据库连接超时报错,具体报错代码如下: [2024-08-13 13:47:44,036] ERROR in app: Exception on /est-tasks/start [POST] Traceback (most recent call last): File "/usr/local/lib/python3.1…...

代码随想录第三天 | 链表
文章目录 链表理论知识定义链表删除链表 Leetcode203 移除链表元素代码实现 Leetcode707 设计链表代码实现复杂度分析错误点 Leetcode206 反转链表新建链表双指针法 链表理论知识 链接: https://programmercarl.com/%E9%93%BE%E8%A1%A8%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.h…...

Python编码系列—Python数据可视化:Matplotlib与Seaborn的实战应用
🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…...

putty中修改默认窗口大小和字体、字号
在WinSCP中调用putty,发现默认窗口太小,字号也很小,非常不友好。现在显示器都是1080p起步,所以很有必要修改之。 以中文版v0.70为例,方法: 1. 点击左上角图标 ,选择下拉菜单中的“修改设置”&…...

Windows下网络编与ESP8266-WiFi通信(win32-API)
一、前言 络编程是指编写程序使不同计算机之间能够通过网络进行通信和数据交换。网络编程涉及使用网络协议和编程接口来建立、管理和终止网络上的数据通信。在这一领域中,TCP/IP协议族是核心组成部分,尤其TCP(传输控制协议)是面向…...

【Golang】golang安装一些依赖包时总是失败
Golang安装一些依赖包失败: 比如安装gin包:go get -u github.com/gin-gonic/gin 可能会报错:连接网络失败、超时等 这时可能需要修改go的环境配置,修改代理即可: go env -w GO111MO…...

ubuntu如何监控Xvfb虚拟显示器
在Ubuntu中监控Xvfb显示器主要涉及到使用VNC服务器来远程访问这个环境。以下是一些基本步骤: 安装Xvfb和相关工具: 使用apt安装Xvfb和x11vnc,x11vnc是一个VNC服务器,可以远程访问Xvfb创建的虚拟桌面环境。 sudo apt-get install xvfb sudo ap…...

小型需求管理软件盘点:8款功能强大的工具
本文介绍了以下8款工具:PingCode、Worktile、易得云、Ping、燃草、Gitee、Monday.com、Slack。 在现代企业管理中,需求管理一直是个让人头疼的问题,特别是对于小型企业来说,选择一款合适的需求管理软件往往比想象中更复杂。如果选…...

Labelme的安装与使用教程
文章目录 一、Labelme是什么?二、安装步骤1.新建虚拟环境2.安装Labelme3.Labelme的使用 三、json2yolo 一、Labelme是什么? Labelme是一个用于图像标注的开源工具,可以实现图像标注、语义分割、实例分割等。 本文记录一下labelme的安装与使…...

C#基础:数据库中使用Linq作分组处理(反射/直接分组)
目录 一、使用反射分组 二、不使用反射分组 三、调用示例 四、代码demo 一、使用反射分组 private static List<GroupList<T>> GetGroupList<T>(List<T> entities, string groupByProperty) {// 获取分组字段的类型var propertyInfo typeof(T).…...

Revite二次开发_使用WPF和WebView2制作一个访问网站的窗口
如果想在revit里打开网页,可以使用WebView2来实现,下面是一个代码示例。 也尝试过使用CefSharp,但由于Revit本身也使用了CefSharp,所以需要根据不同的Revit版本选择适合的CefSharp版本,比较麻烦,所以最好还…...

Java Spring Boot 连接数据库
要在Java Spring Boot应用程序中连接数据库,您需要遵循以下步骤: 1. 添加数据库依赖项:在您的Spring Boot项目中的pom.xml文件中添加数据库依赖项,例如MySQL或PostgreSQL等。例如,如果您要连接MySQL数据库,…...

Java面试八股之消息队列中推模式和拉模式分别有哪些使用场景
消息队列中推模式和拉模式分别有哪些使用场景 消息队列的推模式(Push)和拉模式(Pull)各有不同的使用场景和优缺点。下面我会详细介绍这两种模式及其适用场景: 推模式(Push) 特点:…...

springboot jar是如何启动的
我们先来看一个项目的打完包后的MANIFEST.MF文件: Manifest‐Version: 1.0 Implementation‐Title: spring‐learn Implementation‐Version: 0.0.1‐SNAPSHOT Start‐Class: com.tulingxueyuan.Application Spring‐Boot‐Classes: BOOT‐INF/classes/ Spring‐Bo…...

Android 12系统源码_屏幕设备(二)DisplayAdapter和DisplayDevice的创建
前言 在Android 12系统源码_屏幕设备(一)DisplayManagerService的启动这篇文章中我们具体分析了DisplayManagerService 的启动流程,本篇文章我们将在这个的基础上具体来分析下设备屏幕适配器的创建过程。 一、注册屏幕适配器 系统是在Disp…...

常用Mysql命令
前言 本文列举了一些常见的mysql操作 正文 一、连接和登录 MySQL 1. 使用命令行登录 MySQL 注意:需要将mysql的bin目录导入到环境变量中 mysql -u 用户名 -p示例: mysql -u root -p执行上述命令后,系统会提示输入密码,输入…...

IDEA Debug工具
一、Debug工具栏 自定义debug工具栏:先把debug程序运行起来->右击->配置 常用的工具: 二、DeBug常用图标详解 三、DeBug实践操作 常规Debug:略。 Stream Chain:处理流式语句 Reset Frame:重置方法入栈 …...

ARM64的汇编资源
最近在写一本ARM64的教材,所以在晚上查找了一下相关资源,都是免费开源的,不包括盗版书籍。 Exploring AArch64 assembler Roger Ferrer Ibez的博客文章,写在2016-2017年,内容简单充实,适合入门。 《ARM6…...

实验室安全分级分类管理系统在高校中的具体应用
盛元广通高校实验室安全分级分类管理系统的构建,旨在通过科学合理的管理手段,提高实验室的安全水平,保障师生的人身安全,防止实验事故的发生。这一系统通常包括实验室安全等级评估、分类管理、风险控制、安全教育与培训、应急响应…...

使用 prerenderRoutes 进行预渲染路由
title: 使用 prerenderRoutes 进行预渲染路由 date: 2024/8/20 updated: 2024/8/20 author: cmdragon excerpt: prerenderRoutes 函数是 Nuxt 3 中一个强大的工具,它能够帮助开发者优化页面加载速度和改善用户体验。通过使用 prerenderRoutes,你能够灵活地指定需要预渲染的…...