数据仓库建模方法万字详解

在数据仓库的建设过程中,数据建模是至关重要的一环。它决定了数据仓库的结构和性能,直接影响到数据分析和决策的效率和准确性。在进行数据建模之前,必须对企业进行全面的业务梳理。通过建立业务模型,我们可以全面了解企业的业务架构和整个业务的运行情况,能够将业务按照一定的标准进行分类和规范,以提高业务效率。

通过构建数据模型,能够很好地将底层技术与上层业务分离开。当上层业务发生变化时,通过查看数据模型,底层技术可以轻松完成业务变动,从而提高整个数据仓库的灵活性。

常见的数据仓库建模方法主要有以下几种:

1. 数据仓库建模理论基础

1.1 数据仓库建模模型分类

  1. 星型模型(Star Schema):这是最常用的数据仓库建模方法之一。它以一个事实表(通常包含大量的业务数据)为中心,周围关联多个维度表(用于描述事实的各个方面)。例如,一个销售数据仓库可能有一个事实表记录销售交易,而关联的维度表可能包括产品、客户、时间等。

销售人员作为维度表的一部分,通常会与其他维度表一起与事实表相连。以下是一个简化的星型模型设计示意图,展示了销售人员维度表如何融入整个数据仓库结构中:

 

在这个示意图中:

  • 事实表 (Fact):包含了业务过程中的度量数据,如销售额、销售数量、成本和利润。每个记录代表一个销售事件。
  • 销售人员维度表 (Dim - Salesperson):包含了与销售人员相关的属性,如姓名、职位、部门和管理关系。salesperson_id 是与事实表相连的主键,而 manager_id 可能指向另一个员工维度表。
  • 时间维度表 (Dim - Time):包含了与时间相关的属性,如日期、星期、月份、季度和年份。date_id 是与事实表相连的主键。

在星型模型中,事实表的每个记录都通过外键与一个或多个维度表相连。这种设计允许用户从不同的维度对数据进行切片和切块,以支持复杂的查询和分析。例如,可以查询特定销售人员在特定季度的销售业绩,或者分析不同时间段内的销售趋势。

  1. 雪花模型(Snowflake Schema):雪花模型是星型模型的扩展,它对维度表进行了进一步的规范化,将一些低粒度的维度表分解为多个关联的表。这样可以减少数据冗余,但可能增加查询的复杂性。例如,将客户维度分解为客户基本信息、地址、联系方式等多个表。
  2. 星座模型(Constellation Schema):当有多个事实表共享一些公共的维度表时,使用星座模型。这种模型将相关的事实表和共享维度表组织在一起,形成一个星座状的结构。例如,销售、市场营销和客户服务等业务领域可能共享客户和产品等维度表。

1.2 模型使用对比

在Spark+Doris离线数仓的开发中,我们通常会选择星形模型作为底层Hive或Doris数据表的基础架构。原因如下:

  1. 查询效率:星形模型中的数据冗余可以减少表的查询次数,从而提高查询效率。这对于离线数仓中的大规模数据处理尤为重要,因为每次查询可能需要处理海量数据。

  2. 易于理解与维护:星形模型的结构简单明了,易于理解和维护。这对于开发和运维团队来说是一个重要的考虑因素,因为他们需要在短时间内掌握和适应新的技术架构。

  3. 更好的扩展性:星形模型支持快速添加新的维度和事实表,以满足业务需求的不断变化。这对于离线数仓来说非常重要,因为业务需求的变化可能会导致数据仓库的重新设计和重构。

  4. 对OLAP系统的友好性:星形模型非常适合OLAP系统,因为其查询效率高的特点使得OLAP查询可以快速响应。这一点在Kylin(一种基于Hadoop的开源OLAP引擎)中得到了充分体现,我们将在后面的章节中详细讨论。

然而,在某些情况下,我们也会考虑使用雪花模型。例如,当数据仓库中的某些表需要严格遵循第三范式时,雪花模型可能是一个更好的选择。此外,对于一些复杂的数据分析任务,可能需要通过雪花模型的规范化处理来减少数据冗余,从而提高查询效率。

1.3 企业实际开发中的模型选择策略

在实际的企业开发中,我们通常会根据业务需求和数据特点灵活选择模型设计。有时候,我们会在同一个数据仓库中使用星形模型和雪花模型并存的方式,以满足不同的查询和分析需求。

一般来说,企业在选择数据仓库模型时,更倾向于选择维度更少的星形模型。特别是在Hadoop体系下,减少表与表之间的连接操作可以显著降低中间数据的传输和计算成本,从而提高整体性能。

总之,在Spark+Doris离线数仓的开发中,星形模型因其查询效率高、易于理解和维护等优点而成为首选的模型设计。然而,在实际开发中,我们需要根据业务需求和数据特点灵活选择模型设计,甚至在同一数据仓库中使用多种模型并存的方式,以满足不同的查询和分析需求。

1.4 数据建模要遵循的原则

(一)、高内聚和低耦合

高内聚和低耦合是软件工程中的重要原则,同样适用于数据仓库建模。高内聚意味着将业务相近或相关、粒度相同的数据设计为一个逻辑或物理模式,这样可以减少数据间的依赖,提高数据处理的效率。低耦合则是将有高概率同时访问的数据放在一起,将低概率同时访问的数据分开存储,以降低数据之间的关联性,便于数据的管理和维护。

实际操作中,我们可以通过以下几点来实现高内聚和低耦合:

  1. 分析业务需求,确定数据仓库的主题域和实体关系,确保每个主题域内的数据具有较高的内聚性。
  2. 对于粒度相同的数据,尽量将其组织在一起,形成一个完整的数据视图。
  3. 对于低概率同时访问的数据,可以考虑将其分散到不同的物理存储中,以降低数据之间的耦合度。
(二)、核心模型与扩展模型分离

在数据仓库建模过程中,我们需要根据业务需求的差异,将数据模型分为核心模型和扩展模型。核心模型包括的字段支持常用的核心业务,具有较高的通用性和稳定性;扩展模型则包括的字段支持个性化或少量应用的业务,具有一定的灵活性和可扩展性。为了提高核心模型体系的简洁性和可维护性,我们需要将这两种模型尽量分离。

具体实现方法如下:

  1. 在设计数据模型时,首先要明确核心模型的范围和边界,确保核心模型能够满足大部分业务需求。
  2. 对于个性化或少量应用的业务需求,可以在扩展模型中进行设计和实现,避免对核心模型造成影响。
  3. 在数据仓库的物理部署上,可以将核心模型和扩展模型分别部署在不同的服务器或存储设备上,以实现物理上的隔离。
(三)、成本与性能平衡

在数据仓库建模过程中,我们需要权衡数据的冗余度和查询性能。适当的数据冗余可以换取数据查询性能的提升,但是过度冗余会导致存储空间的浪费和维护成本的增加。因此,我们需要找到一个平衡点,以实现成本与性能的最佳组合。

为了实现成本与性能的平衡,我们可以采取以下措施:

  1. 根据业务需求和数据特点,合理设置数据的冗余度。对于经常查询且数据量较大的字段,可以考虑进行冗余存储以提高查询性能;对于不常查询或数据量较小的字段,则可以适当减少冗余度以节省存储空间。
  2. 采用合适的数据压缩算法和技术,以减少存储空间的占用和提高数据处理速度。
  3. 定期对数据仓库进行优化和维护,包括清理无用数据、更新统计信息、调整索引策略等,以保持数据仓库的高效运行。
(四)、数据可回滚

在数据仓库的使用过程中,可能会遇到各种异常情况导致数据出现问题。为了确保数据的完整性和一致性,我们需要实现数据可回滚的功能。数据可回滚意味着在不改变处理逻辑、不修改代码的情况下,重新执行任务后结果不变。

为实现数据可回滚,我们可以采取以下措施:

  1. 在数据仓库中建立日志系统,记录数据的操作历史和处理过程。当发生异常情况时,可以通过日志系统查找问题根源并采取相应的措施进行修复。
  2. 使用事务处理机制来保证数据的完整性和一致性。在事务处理过程中,如果某个操作失败或出现异常情况,可以回滚到事务开始前的状态,确保数据的正确性。
  3. 定期对数据仓库进行备份和恢复演练,以确保在发生故障时能够迅速恢复数据并恢复正常运行。
(五)、一致性

在数据仓库建模过程中,我们需要确保不同表的相同字段命名与定义具有一致性。这有助于提高数据的可读性和可维护性,同时也方便用户在使用数据仓库时进行跨表查询和分析。

为了实现一致性原则,我们可以采取以下措施:

  1. 制定统一的数据命名规范和质量标准,确保所有参与人员都遵循相同的规则和标准进行数据建模和开发工作。
  2. 在数据模型设计阶段,要对表结构进行严格的审查和验证,确保不同表之间的字段命名和定义保持一致性。
  3. 在数据仓库的使用过程中,要定期对数据进行质量检查和评估工作,发现并及时纠正不一致性问题。
(六)、命名清晰、可理解

表名要清晰、一致,易于理解,方便使用。一个好的表名应该能够准确地反映表中存储的数据内容和业务含义,同时还要简洁明了,便于用户记忆和使用。为了实现这一原则,我们可以采取以下措施:

  1. 在设计表名时,要尽量使用有意义的单词或短语来表达表中存储的数据内容和业务含义。避免使用过于复杂或难以理解的缩写或代码作为表名。
  2. 对于多个单词组成的表名,可以使用下划线“_”进行分隔,以提高表名的可读性和易用性。同时,要注意避免使用保留字作为表名的一部分,以免引起不必要的冲突和误解。
  3. 在数据仓库的使用过程中,要定期对表名进行检查和更新工作,确保表名始终保持清晰、一致和易于理解的状态。同时,还要注意保持表名与业务术语的一致性,以便用户在使用数据仓库时能够更加便捷地进行跨部门和跨系统的数据分析和挖掘工作。

2. 维度设计


维度是数据仓库中用于切片和切块数据的关键元素。设计高质量的维度对于提高数据仓库的查询性能和用户体验至关重要。

维度属性:维度属性是维度表中的列,它们用于描述业务实体的特征。例如,一个时间维度可能包含年、季度、月、日等属性。
维度层次:维度层次是维度属性的层级结构,例如,地理维度可能包含国家、省、市、县等层次。
维度退化:在某些情况下,可以将事实表中的某些列直接作为维度使用,这称为维度退化。退化维度可以减少表的连接操作,提高查询性能。
维度整合:在多个事实表中共享相同的维度时,可以通过维度整合来避免数据冗余。维度整合可以提高数据的一致性,并简化数据仓库的结构。

(一)、纬度表的特征

纬度表具有以下三个显著特征:

  1. 列数较多:纬度表的范围很宽,通常具有很多属性,列数比较多。这些属性用于描述事实表中的维度信息,如时间、地点、产品等。在设计纬度表时,需要考虑如何有效地组织和管理这些属性,以满足查询和分析的需求。

  2. 行数较少:与事实表相比,纬度表的行数相对较少,通常小于10万行。这是因为纬度表主要用于描述事实表中的维度信息,而不涉及具体的度量值。因此,纬度表的大小通常比事实表小得多,这有助于提高查询性能。

  3. 内容相对固定:纬度表的内容相对固定,不会轻易发生改变。这意味着纬度表中的数据具有较高的稳定性和可靠性。在设计纬度表时,需要考虑如何确保数据的准确性和完整性,以满足业务分析的需求。

(二)、纬度表的设计方法

在设计纬度表时,需要考虑以下几个方面:

  1. 确定维度:首先,需要根据业务需求和数据仓库的主题域,确定需要哪些维度。常见的维度包括时间、地点、产品、客户等。在确定维度时,需要考虑维度的粒度和层次结构,以满足不同层次的查询和分析需求。

  2. 设计属性:针对每个维度,需要设计相应的属性。属性是用于描述维度信息的列,如时间维度的年、月、日等。在设计属性时,需要考虑属性的类型、取值范围和唯一性等,以确保数据的准确性和完整性。

  3. 设计主键和外键:纬度表需要有一个唯一的主键,用于标识表中的每一行数据。此外,纬度表还需要与事实表建立关联,通过外键实现。在设计主键和外键时,需要考虑如何确保数据的一致性和完整性。

  4. 设计索引:为了提高查询性能,可以在纬度表的常用查询列上创建索引。此外,还可以考虑使用位图索引、哈希索引等新型索引技术,以满足不同类型的查询需求。

  5. 数据清洗和验证:在设计纬度表时,需要对数据进行清洗和验证,以确保数据的准确性和完整性。这包括去除重复数据、修正错误数据以及填充缺失数据等。

(三)、拉链表

拉链表是一种特殊的纬度表,用于存储历史数据的变化。拉链表的主要特点是能够保留每条记录的生命周期信息,从而实现对历史数据的追踪和分析。

拉链表的设计方法如下:

  1. 确定拉链粒度:首先,需要根据业务需求和数据仓库的主题域,确定拉链表的粒度。常见的拉链粒度包括日、周、月等。在确定拉链粒度时,需要考虑拉链表的大小和查询性能。

  2. 设计拉链表结构:拉链表的结构通常包括时间戳、维度属性、开始时间和结束时间等列。时间戳用于记录每条记录的生命周期信息,维度属性用于描述拉链表的维度信息,开始时间和结束时间用于表示每条记录的有效时间范围。

  3. 生成拉链数据:生成拉链数据的方法通常是通过对原始数据进行窗口函数处理,得到每条记录的生命周期信息。然后,将这些生命周期信息与维度属性组合,生成拉链表的数据。

  4. 查询和分析拉链表:拉链表可以用于查询和分析历史数据的变化。通过指定时间范围,可以查询特定时间段内的历史数据,以及数据的变化情况。此外,还可以利用拉链表进行趋势分析和预测等高级分析功能。

拉链表应用实例

以“销售人员信息”为例设计拉链表,并假设销售人员信息可能会发生变化。

  • sales_person_dim:销售人员维度表
列名数据类型描述
sales_person_idINT销售人员ID(主键)
nameVARCHAR姓名
start_dateDATE记录生效日期
end_dateDATE记录失效日期
salaryDECIMAL薪资
statusVARCHAR状态(当前/历史)

假设现在有一条关于销售人员的维度数据:

sales_person_idnamestart_dateend_datesalarystatus
1Alice2023-01-019999-12-315000Current

现在销售人员Alice的薪资发生变化,需要更新维度表记录。我们可以通过拉链表来实现这一需求:

  1. 在插入新记录之前,将原记录的end_date更新为变更前的日期,标记其为历史记录。
  2. 插入新记录,start_date为变更后的生效日期,end_date设定一个最大日期值(例如9999-12-31),标记为当前记录。

更新后的维度表数据如下:

sales_person_idnamestart_dateend_datesalarystatus
1Alice2023-01-012024-03-225000Historical
1Alice2024-03-239999-12-315500Current

保留销售人员信息的历史变更记录,同时在任意时间点查询数据时能够获取到该时间点的准确信息,保证了数据的一致性和完整性。这种设计适用于需要跟踪维度数据变化历史的业务场景,例如销售、客户、产品等信息的变动追踪。通过拉链表,数据仓库可以更好地支持历史数据分析和趋势分析,提高数据分析的准确性和全面性


3. 事实表设计


事实表包含了业务过程中的度量数据,它是数据仓库中最重要的组成部分。

(一)、事实表的特征

事实表具有以下三个显著特征:

  1. 数据量大:由于事实表记录了业务过程中的所有度量值和事实信息,因此其数据量通常会非常大。在设计事实表时,需要考虑如何有效地存储和管理这些数据,以满足查询和分析的需求。

  2. 列数较少:事实表的内容相对较窄,列数通常比较少。主要包含一些外键ID和度量字段。这种设计有助于提高查询性能,同时便于对事实表进行管理和维护。

  3. 经常发生变化:事实表中的数据每天都会增加新数据,因此需要考虑如何处理新增数据以及如何保持数据的一致性和完整性。

(二)、事实表的类型

事实表通常可以分为以下三种类型:

  1. 事务事实表:事务事实表是以每个事务或事件为单位的表。例如,一笔支付记录作为事实表中的一行数据。事务事实表通常包含多个外键,用于关联相关的维度表。在设计事务事实表时,需要考虑如何有效地存储事务数据以及如何支持高效的查询和分析。

  2. 周期快照事实表:周期快照事实表中不会保留所有数据,只保留固定时间间隔的数据。例如,每日或每月的销售额,以及每月的账户余额等。周期快照事实表通常用于跟踪业务过程在特定时间段内的状态。在设计周期快照事实表时,需要考虑如何选择合适的时间间隔以及如何存储和查询这些数据。

  3. 累积快照事实表:累积快照事实表用于跟踪业务事实的变化。与周期快照事实表不同,累积快照事实表会保留所有历史数据,以便于分析业务过程在不同时间点的状态变化。在设计累积快照事实表时,需要考虑如何处理大量的历史数据以及如何支持高效的查询和分析。

(三)、事实表的优化

针对事实表的特点和类型,我们可以采取以下优化策略:

  1. 选择合适的数据类型:事实表中的度量字段通常采用整型或浮点型的十进制数值类型。在设计事实表时,需要根据业务需求选择合适的数据类型,以提高查询性能和存储效率。

  2. 利用索引优化查询:为了提高查询性能,可以在事实表的常用查询列上创建索引。此外,还可以考虑使用位图索引、哈希索引等新型索引技术,以满足不同类型的查询需求。

  3. 数据分区与分桶:为了提高查询性能和存储效率,可以对事实表进行分区或分桶。分区可以根据时间、地区等维度进行划分,以便于查询和分析特定时间段或地区的数据。分桶则是将事实表中的数据按照一定的规则进行分组,以提高查询性能。

  4. 数据压缩与归档:针对事实表中的大量历史数据,可以采用数据压缩和归档技术,以减少存储空间和查询时间。数据压缩可以减少数据占用的存储空间,而数据归档则可以将不再需要的数据移动到归档区域,以提高查询性能。

  5. ETL优化:ETL(Extract, Transform, Load)是数据仓库中用于抽取、转换和加载数据的过程。针对事实表的特性,可以优化ETL过程,以提高数据加载速度和准确性。例如,可以使用增量抽取、异步处理等技术,以提高ETL过程的效率。

(四)、事实表应用实例

一个销售事实表,记录了销售交易的信息。

  • sales_fact:销售事实表
列名数据类型描述
transaction_idINT交易ID(主键)
sales_person_idINT销售人员ID(外键,关联销售人员维度表)
product_idINT产品ID(外键,关联产品维度表)
date_idINT日期ID(外键,关联日期维度表)
amount_soldDECIMAL销售金额
quantity_soldINT销售数量

现在有一条销售交易数据如下:

transaction_idsales_person_idproduct_iddate_idamount_soldquantity_sold
1110120240323100010

这条销售事实记录表示销售人员ID为1的销售人员在2024年3月23日销售了ID为101的产品,销售金额为1000,销售数量为10。

通过销售事实表的设计,我们可以将销售交易的关键信息记录下来,包括销售人员、产品、日期、销售金额和销售数量等维度。在数据仓库中,销售事实表通常与多个维度表进行关联,以支持复杂的数据分析和报表需求。

举例来说,我们可以通过销售事实表来回答以下问题:

  • 某销售人员在特定日期销售了哪些产品?
  • 某产品在某段时间内的总销售金额和数量是多少?
  • 某天的总销售金额是多少?
  • 某销售人员的总销售金额和数量是多少?

通过事实表的设计,我们能够更好地支持对销售数据的多维度分析和钻取,为企业决策提供更多的数据支持。同时,销售事实表也可以和销售人员维度表一起使用,帮助企业了解每位销售人员的业绩情况,分析销售趋势,优化销售策略,提高销售效率。

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

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

相关文章

FileZilla 链接服务器提示 20 秒连接超时

FileZilla 有个默认设置是如果 20 秒没有数据的话会自动中断链接。 Command: Pass: **************** Error: Connection timed out after 20 seconds of inactivity Error: Could not connect to server修改配置 这个配置是可以修改的,修改的步骤为: …

数据可视化-ECharts Html项目实战(5)

在之前的文章中,我们学习了如何设置滚动图例,工具箱设置和插入图片。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢 数据可视化-ECharts…

Vue3 + Django 前后端分离项目实现密码认证登录

1、功能需求 通常中小型前后端项目,对安全要求不高,也可以采用密码认证方案。如果只用django来实现非常简单。采用 Vue3 前后端分离架构,实现起来稍繁琐一点,好处是可以利用各种前端技术栈,如element-plus UI库来渲染…

[C#] .NET8增加了Arm架构的多寄存器的查表函数(VectorTableLookup/VectorTableLookupExtension)

发现.NET8增加了Arm架构的多寄存器的查表函数(VectorTableLookup/VectorTableLookupExtension),这给编写SIMD向量化算法带来了方便。 一、指令说明 在学习Arm的AdvSimd(Neon)指令集时,发现它的Lookup&…

Git Commit 提交规范,变更日志、版本发布自动化和 Emoji 提交标准

前言 Git Commit 是开发的日常操作, 一个优秀的 Commit Message 不仅有助于他人 Review, 还可以有效的输出 CHANGELOG, 对项目的管理实际至关重要, 但是实际工作中却常常被大家忽略,希望通过本文,能够帮助大家规范 Git Commit,并且展示相关 …

Spring Cloud微服务功能及其组件详细讲解

Spring Cloud微服务功能及其组件详细讲解 文章目录 Spring Cloud微服务功能及其组件详细讲解前言:什么是微服务?一、Spring Cloud原理简述二、核心组件1、服务发现——Nacos/Eureka/Consul1)Nacos服务发现2)Eureka服务发现3&#…

优化 - 排序算法

一、概念 冒泡排序从左往右比较相邻的两个元素,右比左小就换位,这样最大值就出现在了右边最后一个元素上,再从左边第一个元素开始往右比较到倒数第二个元素,如此重复...选择排序 通过线性查找(从左往右挨个查找&#…

Mongodb入门到入土,安装到实战,外包半年学习的成果

这是我参与「第四届青训营 」笔记创作活动的的第27天,今天主要记录前端进阶必须掌握内容Mongodb数据库,从搭建环境到运行数据库,然后使用MongodB; 一、文章内容 数据库基础知识关系型数据库和非关系型数据库为什么学习Mongodb数据库环境搭建及运行MongodbMongodb命…

【进程概念】启动进程 | 查看进程 | 创建进程

目录 启动进程 查看进程 方法1:/proc 方法2:查看脚本 ​方法3:系统调用获取进程标示符❗❗ 终止进程 创建进程(主fork) 🙂查看父子进程的pid 🙂进程创建/执行/终止 🙂多次重新启动进…

Pycharm运行yolov5报错Error: Failed to initialize: Bad git executable.错误的解决方案

一、报错代码 ImportError: Failed to initialize: Bad git executable. The git executable must be specified in one of the following ways:- be included in your $PATH- be set via $GIT_PYTHON_GIT_EXECUTABLE- explicitly set via git.refresh()All git commands will…

STM32 CAN的工作模式

STM32 CAN的工作模式 正常模式 正常模式下就是一个正常的CAN节点,可以向总线发送数据和接收数据。 静默模式 静默模式下,它自己的输出端的逻辑0数据会直接传输到它自己的输入端,逻辑1可以被发送到总线,所以它不能向总线发送显性…

鸿蒙开发实战:网络请求库【axios】

简介 [Axios] ,是一个基于 promise 的网络请求库,可以运行 node.js 和浏览器中。本库基于[Axios]原库v1.3.4版本进行适配,使其可以运行在 OpenHarmony,并沿用其现有用法和特性。 http 请求Promise APIrequest 和 response 拦截器…

英语 单词记忆学习

关于足部的单词,可以从不同的角度来分类,比如解剖学、鞋类、运动等。以下是一些与足部相关的单词: ### 解剖学术语 1. **Ankle** (踝关节) - 脚与腿相接的部分。 2. **Arch** (足弓) - 脚底的弓形结构。 3. **Toe** (脚趾) - 脚的前端部分。…

Stable Diffusion实现光影字效果

昨天下午有人在群里发光影图片,大家都觉得很酷,我没怎么在意。直到早上我在小红书看到有人发同款图片,只是一晚上的时间点赞就超过了8000,而且评论数也很高,也可以做文字定制变现。研究了一下发现这个效果不难实现&…

数据结构/C++:哈希表

数据结构/C:哈希表 哈希表概念哈希函数直接定址法除留余数法 哈希冲突闭散列 - 开放定址法基本结构查找插入删除总代码展示 开散列 - 哈希桶基本结构查找插入删除代码展示 哈希表概念 在顺序表中,查找一个数据的时间复杂度为O(N);在平衡树这…

AI大模型的训练与优化

AI大模型的训练与优化 前言摘要1. 计算资源分配与管理1.1分布式训练技术1.2异构计算策略1.3资源利用率监控与调优 2. 参数调优与正则化方法2.1学习率调度策略2.2正则化方法 3. 模型压缩与优化3.1模型剪枝(Model Pruning)3.2模型量化(Model Qu…

宋仕强论道之华强北科技创新说

宋仕强论道之华强北科技创新说,“创新”是深圳市和华强北灵魂,创新再加上敢想敢干永不言败,造就了深圳市经济奇迹和华强北财富神话!首次在深圳市落槌的“土地拍卖”,华强北“一米柜台”赋予独立经营权,把最…

通过jsDelivr实现Github的图床CDN加速

最近小伙伴们是否发现访问我的个人博客http://xiejava.ishareread.com/图片显示特别快了? 我的博客的图片是放在github上的,众所周知的原因,github访问不是很快,尤其是hexo博客用github做图床经常图片刷不出来。一直想换图床&…

提面 | 面试抽题

学习到更新日期面试抽题-1.2案例分析的思维本质2024-3-23 1提面抽屉论述问题的分类 1.1案例分析占总论 1.2案例分析的思维本质

rabbitmq 3.9.29 docker mac 管理员页面无法打开

SyntaxError: Unexpected token ‘catch’ SyntaxError: Unexpected token ‘catch’ at EJS.Compiler.compile (http://127.0.0.1:15672/js/ejs-1.0.min.js:1:6659) at new EJS (http://127.0.0.1:15672/js/ejs-1.0.min.js:1:1625) at format (http://127.0.0.1:15672/js/main…