数仓规范:命名规范如何设计?

目录

0 前言

1 表命名规范

2 字段命名规范

 3 任务命名规范

 4 层级命名规范

5 自定义函数命名规范

 6 视图和存储过程的命名规范

7 综合案例分析

8 常见陷阱和如何避免 

9 工具和最佳实践

10 小结

想进一步了解数仓建设这门艺术的,可以订阅我的专栏数字化建设通关指南,将在该专栏进行详细解析。

专栏 原价99,现在活动价39.9,按照阶梯式增长,还差3个名额将上升至59.9,直到恢复原价。

数字化建设通关指南


35687fd971a64b079ceda986951902af.png

0 前言

数据仓库建设的目的仍是为了下游应用,因此,降低下游用户的应用成本是至关重要的。下面这些问题,你可以看看是否遇到过。很多表名非常类似,涉及各个层级的数据,也不知道粒度如何,用起来非常混乱!表内的字段名特别乱,甚至不同表中相同含义字段的命名不一致!任务名与表名差异很大,很难找到表对应的调度任务是哪一个!以上这些问题,都是由于命名不规范所导致的。那规范的命名又包括哪些方面呢?下面,我们一起来看一下。

1 表命名规范

表命名,核心原则是“见名知意”​,通过规范的标准,降低用户的识别成本。表命名的通用方式为[数据分层]_[业务域]_[内容描述]_[刷新周期]​_[存储策略]

1.1 前缀命名
维表 命名形式:dim_描述
事实表 命名形式:fact_描述_[AB]
临时表 命名形式:tmp_ 正式表名_ [C自定义序号]
宽表 命名形式:dws_主题_描述_[AB]
备份表 命名形式:正式表名_bak_yyyymmdd
表命名解释:

1)表名使用英文小写字母,单词之间用下划线分开,长度不超过40个字符,命名一般控制在小于等于6级。
2)其中ABC第一位"A"时间粒度:使用"c"代表当前数据,"h"代表小时数据,"d"代表天数据,"w"代表周数据,"m"代表月数据,"q"代表季度数据, "y"代表年数据。
3)其中ABC的第二位"B"表示对象属性,用"t"表示表,用"v"表示视图。
4)其中ABC的第三位"C"自定义序号用于标识多个临时表的跑数顺序。

1.2 注释
注释要结合表的英文名,要求注释简洁明了,体现出表的业务出处、主题和用途。

1.3 存储格式
所谓的存储格式就是在Hive建表的时候指定的将表中的数据按照什么样子的存储方式,如果指定了方式,那么在向表中插入数据的时候,将会使用该方式向HDFS中添加相应的数据类型。在数仓中建表默认用的都是PARQUET存储格式,相关语句如下所示:

STORED AS INPUTFORMAT‘org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat’OUTPUTFORMAT‘org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat’

1.4 字符集
Hadoop和hive 都是用utf-8编码的,在建表时可能涉及到中文乱码问题,所以导入的文件的字符编码统一为utf-8格式。

1.5 约定
理论上在数仓落地的表不应该出现null未知类型,对于可能出现null的字段,如果为字符型统一为空字符串,如果是数值则给0。

1.6 刷新周期

aedbbf3e40f444608587c62f61ab5612.png

1.7 存储策略

efdb372e35c34da0a0249e5a2ccd2a2f.png

  1. 8 来源系统:如果数据来自特定的源系统,可以在名称中标注。

    例如:_erp_crm_pos

示例:

-- 创建订单事实表(每日粒度)
CREATE TABLE fact_order_daily (order_id INT,customer_id INT,order_date DATE,total_amount DECIMAL(10,2),-- 其他字段...
);-- 创建客户维度表
CREATE TABLE dim_customer (customer_id INT,customer_name VARCHAR(100),customer_email VARCHAR(100),-- 其他字段...
);-- 创建来自ERP系统的库存汇总表(月度粒度)
CREATE TABLE dws_inventory_monthly_erp (product_id INT,warehouse_id INT,month_date DATE,avg_stock_qty INT,-- 其他字段...
);-- 创建临时表用于数据处理
CREATE TABLE tmp_order_analysis (-- 临时分析用字段...
);

 注意点:

  1. 全小写:使用全小写字母,避免大小写敏感性问题。

  2. 下划线连接:使用下划线 _ 连接不同的单词,提高可读性。

  3. 避免特殊字符:不要使用空格、横杠或其他特殊字符。

  4. 长度限制:表名长度应控制在64个字符以内,以适应大多数数据库系统的限制。

2 字段命名规范

字段命名作用同表命名作用一致,同样是为了减少应用上的歧义。字段命名需要遵循以下几项原则。

  • 字段名需含义清晰,唯一解释,不可出现同名不同义的情况。
  • 字段名建议用英文简写,不建议用拼音,更不建议用拼音简写。
  • 字段名一律小写,避免出现混乱的情况。·
  • 字段名各单词间用下画线进行分割。字段名长度不宜过长,建议控制在20个字符以内。

1)修饰词

修饰词是对指标场景的描述,例如PV是一个原子指标,那么主页PV、列表页PV、详情页PV就是在PV基础上增加的修饰词,将原子指标包装成一个用于描述特定场景的数据。

 2)原子指标

原子指标可以理解为指标的内核、业务指标的最小颗粒度,例如PV、UV、人均PV、人均时长等。根据指标的类型,原子指标的命名规范如图3-20所示。

73133ec43f8a4a41b7c83896ae29ad59.png

3)时间修饰

大多数情况下,指标描述的是当日的数据表现,但仍有些应用场景,需要记录过去或者未来一段时间的表现情况。例如,过去7日搜索PV、过去第7日搜索PV、未来7日搜索PV、未来第7日搜索PV等。对于这种需要跨度的时间修饰,命名需要遵循一定原则,用以区分过去/未来、N日内/第N日,如图所示。 

870cce8c26594c1b9d6250af0ae95c8d.png

3) 派生指标

e86c59e61b3d462fadac89b6320df565.png

4)衍生指标

ffbb7770099a4ac8ad6ea29e27699120.png

 注意点:

(1)前缀使用:对于特定类型的字段,可以使用前缀。

  • is_ 表示布尔值(例如:is_active)
  • has_ 表示布尔值(例如:has_children)
  • num_ 表示计数(例如:num_orders)
  • pct_ 表示百分比(例如:pct_discount)
  • amt_ 表示金额(例如:amt_total)


时间字段:对于时间相关的字段,使用统一的命名方式。

  • date 后缀表示日期(例如:order_date)
  • time 后缀表示时间(例如:login_time)
  • timestamp 后缀表示时间戳(例如:create_timestamp)

主键:主键字段通常使用 id 作为后缀。

例如:customer_id、order_id
外键:外键字段应与引用表的主键名称保持一致。

例如:如果 customer 表的主键是 customer_id,那么在 order 表中引用它的外键也应该叫 customer_id

全小写:使用全小写字母。

下划线连接:使用下划线 _ 连接不同的单词。

避免保留字:不要使用数据库的保留字作为字段名。

避免缩写:除非是广为人知的缩写(如 ID),否则应使用完整单词。

一致性:相同含义的字段在不同表中应保持一致的命名。

 示例:

CREATE TABLE fact_order (order_id INT PRIMARY KEY,customer_id INT,  -- 外键,引用 dim_customer 表order_date DATE,order_timestamp TIMESTAMP,total_amount DECIMAL(10,2),num_items INT,is_paid BOOLEAN,payment_method VARCHAR(50),discount_pct DECIMAL(5,2),shipping_amt DECIMAL(8,2),has_gift_wrap BOOLEAN,-- 其他字段...
);CREATE TABLE dim_customer (customer_id INT PRIMARY KEY,customer_name VARCHAR(100),customer_email VARCHAR(100),registration_date DATE,is_active BOOLEAN,last_login_timestamp TIMESTAMP,lifetime_value DECIMAL(12,2),-- 其他字段...
);

在这个例子中,我们可以看到:

  • 字段名清晰描述了其内容(例如 total_amount、num_items)
  • 使用了适当的前缀(例如 is_paid、discount_pct)
  • 时间相关字段使用了统一的后缀(_date、_timestamp)
  • 主键和外键的命名保持一致(customer_id)
  • 所有字段名都是小写并使用下划线连接
  • 通过遵循这些规则,我们可以创建出清晰、一致且易于理解的数据模型,大大提高了数据仓库的可用性和可维护性。

 

 3 任务命名规范

表的生成代码往往需要配置一个调度任务加以完成,这里需要注意,调度任务命名需与表命名一致,建议采用相同的名称,如果已被占用,建议使用表命名作为基准,增加后缀作为任务命名,方便后续查找应用。

命名规范

  •      ETL 脚本名称尽可能和所产出的表同名;
  •      数据采集、数据推送脚本尽可能标识数据去向;
  •      ETL 脚本若产生多个表,采用对应的数据域和语义描述命名;
  •      Jar 包命名以实际的业务处理逻辑语义描述为主,调度任务命名同样尽量以产出表名命名根据脚本命名规范。

具体实例
     我们对如下的脚本进行命名:

      数据导出脚本命名:
      dws_jttl_pull_month_tmp_exp.sh,其中exp表示向外导出用于标识方向

       ETL过程脚本命名:
        dws_jttl_pull_month.sh

       一个ETL脚本产生多个表:
        dws_phm_switchshock_min_hh_mm.sh

        该脚本文件描述了按分钟、小时、月份转辙机振动的监控数据。说明了该脚本有三张表

        一张按分钟统计的表,一张按小时统计的表、一张按月份统计的表。

        调度任务命名:
        dws_jttl_pull_day
 

 4 层级命名规范

 参考

63fea1f233ba4e04a00a3d1cd9ccdccb.png

5 自定义函数命名规范

自定义函数命名规范在表的生成过程中,一般会用到SQL的内置函数,然而在面对一些复杂逻辑,内置函数无法满足需求时,往往需要自己创建函数,以满足对应的应用场景。为了便于应用及管理,自定义函数命名需要遵循一定规范。自定义函数命名的通用方式为[业务域]_udf/udaf/udtf_[内容描述],以“城市等级划分函数”为例,如图所示。 

42691e7446a84d15a893b79f0db07e05.png

 6 视图和存储过程的命名规范

 

视图和存储过程是数据仓库中重要的对象,它们的命名同样需要遵循一定的规范,以确保整个系统的一致性和可读性。

(1)视图命名规范

  • 前缀使用:使用 v_ 作为视图的前缀。
  • 目的描述:在前缀后添加描述视图目的或内容的词语。
  • 数据粒度:如果视图代表特定的数据粒度,可以在名称中体现。
  • 全小写:使用全小写字母。
  • 下划线连接:使用下划线 _ 连接不同的单词。
-- 创建一个展示每日销售汇总的视图
CREATE VIEW v_sales_daily_summary AS
SELECT order_date,SUM(total_amount) as daily_sales,COUNT(DISTINCT customer_id) as unique_customers
FROM fact_order
GROUP BY order_date;-- 创建一个展示高价值客户的视图
CREATE VIEW v_high_value_customers AS
SELECT *
FROM dim_customer
WHERE lifetime_value > 10000;

 

(2)存储过程命名规范

  • 前缀使用:使用 p_ 作为存储过程的前缀。

  • 动作描述:在前缀后添加描述存储过程主要动作的动词。

  • 对象描述:在动作后添加存储过程操作的主要对象。

  • 全小写:使用全小写字母。

  • 下划线连接:使用下划线 _ 连接不同的单词。

 

-- 创建一个更新客户终身价值的存储过程
CREATE PROCEDURE p_update_customer_lifetime_value
AS
BEGIN-- 存储过程的具体实现
END;-- 创建一个生成每月销售报告的存储过程
CREATE PROCEDURE p_generate_monthly_sales_report@year INT,@month INT
AS
BEGIN-- 存储过程的具体实现
END;

7 综合案例分析

假设我们正在为一家在线零售公司构建数据仓库,主要包括订单、客户、产品和销售等数据。

-- 创建数据库
CREATE DATABASE prod_ecommerce_dw_v1;USE prod_ecommerce_dw_v1;-- 创建维度表
CREATE TABLE dim_customer (customer_id INT PRIMARY KEY,customer_name VARCHAR(100),customer_email VARCHAR(100),registration_date DATE,is_active BOOLEAN,last_login_timestamp TIMESTAMP
);CREATE TABLE dim_product (product_id INT PRIMARY KEY,product_name VARCHAR(200),category_id INT,category_name VARCHAR(100),brand_name VARCHAR(100),unit_price DECIMAL(10,2)
);-- 创建事实表
CREATE TABLE fact_order (order_id INT PRIMARY KEY,customer_id INT,order_date DATE,order_timestamp TIMESTAMP,total_amount DECIMAL(12,2),num_items INT,is_paid BOOLEAN,payment_method VARCHAR(50),dt STRING
)
PARTITIONED BY (dt);-- 创建汇总表
CREATE TABLE dws_daily_sales (dt STRING,total_sales DECIMAL(15,2),total_orders INT,avg_order_value DECIMAL(10,2),num_unique_customers INT
)
PARTITIONED BY (dt);-- 创建视图
CREATE VIEW v_top_selling_products AS
SELECT p.product_id,p.product_name,SUM(fo.num_items) as total_sold,SUM(fo.total_amount) as total_revenue
FROM fact_order fo
JOIN dim_product p ON fo.product_id = p.product_id
GROUP BY p.product_id, p.product_name
ORDER BY total_sold DESC
LIMIT 100;-- 创建存储过程
CREATE PROCEDURE p_update_daily_sales_summary(IN target_date DATE)
BEGININSERT INTO dws_daily_salesSELECT DATE_FORMAT(target_date, '%Y%m%d') as dt,SUM(total_amount) as total_sales,COUNT(DISTINCT order_id) as total_orders,AVG(total_amount) as avg_order_value,COUNT(DISTINCT customer_id) as num_unique_customersFROM fact_orderWHERE DATE(order_date) = target_date;
END;

 

在这个案例中,我们可以看到:

数据库名称 prod_ecommerce_dw_v1 清晰地表明了这是生产环境的电子商务数据仓库,版本为1。

维度表使用 dim_ 前缀,如 dim_customer 和 dim_product。

事实表使用 fact_ 前缀,如 fact_order。

汇总表使用 dws_ 前缀,如 dws_daily_sales。

所有表和字段名都使用小写字母和下划线。

视图使用 v_ 前缀,如 v_top_selling_products。

存储过程使用 p_ 前缀,如 p_update_daily_sales_summary。

分区字段使用 dt,格式为 yyyymmdd。

8 常见陷阱和如何避免 

在实施数据仓库命名规范时,有一些常见的陷阱需要注意:

  • 过度缩写:为了节省空间而过度使用缩写可能导致命名难以理解。
  • 避免方法:除非是广为人知的缩写,否则尽量使用完整词汇。
  • 不一致性:在不同的表或模块中使用不同的命名风格。
  • 避免方法:制定详细的命名指南,并定期审查以确保一致性。
  • 使用特殊字符:在名称中使用特殊字符可能导致SQL语句编写困难。
  • 避免方法:仅使用字母、数字和下划线。
  • 使用保留字:使用数据库的保留字作为对象名称。
  • 避免方法:熟悉所使用数据库系统的保留字列表,避免使用这些词。
  • 忽视业务含义:纯粹从技术角度命名,忽视业务含义。
  • 避免方法:在命名时考虑业务用户的理解,使用业务术语。
  • 命名过长:创建过长的名称,超出数据库系统的限制。
  • 避免方法:在保证清晰的前提下,控制名称长度,通常不超过64个字符。
  • 重复信息:在字段名中重复表名中已包含的信息。
  • 避免方法:例如,在 customer 表中,不要使用 customer_name,直接用 name 即可。
  • 使用数字前缀:某些数据库可能不支持以数字开头的标识符。
  • 避免方法:始终以字母开头命名。
  • 忽视未来扩展:命名不考虑未来可能的扩展需求。
  • 避免方法:设计命名方案时考虑可能的未来变化,预留扩展空间。
  • 混用大小写:在一些大小写敏感的数据库中可能导致问题。
  • 避免方法:统一使用小写,即使在不区分大小写的数据库中也是如此。

通过注意这些陷阱并采取相应的避免措施,我们可以创建一个更加健壮和可维护的数据仓库命名系统。

9 工具和最佳实践


为了更好地实施和维护数据仓库命名规范,我们可以利用一些工具和最佳实践:

数据字典:维护一个详细的数据字典,记录所有表、字段的名称、含义和用途。

工具推荐:Confluence, Microsoft Excel, Dataedo

命名规则检查器:使用自动化工具检查命名是否符合规范。

工具推荐:SQL Prompt, ApexSQL Refactor

版本控制:使用版本控制系统管理数据库脚本和文档。

工具推荐:Git, SVN

自动化文档生成:使用工具自动生成数据库文档,包括表结构、关系图等。

工具推荐:Dataedo, SchemaSpy

代码审查:实施严格的代码审查流程,确保新添加的对象符合命名规范。

工具推荐:GitHub, GitLab, Bitbucket

培训和指南:为团队成员提供详细的命名规范指南和培训。

定期审计:定期审查数据仓库对象,确保它们持续符合命名规范。

元数据管理:使用元数据管理工具来维护和管理数据仓库的结构信息。

工具推荐:Alation, Collibra

命名模板:创建标准化的命名模板,特别是对于复杂的对象如存储过程和视图。

自动化重命名工具:使用工具批量重命名不符合规范的对象。

工具推荐:ApexSQL Refactor, Redgate SQL Prompt
 

示例:使用Python脚本检查表名是否符合规范 

import redef check_table_name(name):pattern = r'^(dim|fact|dws|ods|tmp)_[a-z0-9_]+$'if re.match(pattern, name):return Trueelse:return False# 测试
table_names = ['dim_customer', 'FACT_ORDER', 'dws_daily_sales', 'TempTable']
for name in table_names:if check_table_name(name):print(f"{name} is valid")else:print(f"{name} is not valid")

通过使用这些工具和最佳实践,我们可以更有效地实施和维护数据仓库命名规范,提高整个团队的工作效率和数据质量。 

 

参考链接:https://blog.csdn.net/u012955829/article/details/142420972

 

10 小结

想进一步了解数仓建设这门艺术的,可以订阅我的专栏数字化建设通关指南,将在该专栏进行详细解析。

专栏 原价99,现在活动价39.9,按照阶梯式增长,还差3个名额将上升至59.9,直到恢复原价。


数字化建设通关指南

主要内容:


(1)SQL进阶实战技巧

可以参考如下教程,具体链接如下

SQL很简单,可你却写不好?也许这才是SQL最好的教程

上面链接中的文章及技巧会不定期更新。

(2)数仓建模实战技巧和个人心得

       1)新人入职新公司后应如何快速了解业务?

       2)以业务视角看宽表化建设?

       3)  维度建模 or 关系型建模?

       4)业务模型与数据模型有什么区别?业务阶段的模型该如何建设?

       5)业务指标体系该如何建设?指标体系该如何维护?指标平台应如何建设?指标体系                           该由谁来搭建?

       6)如何优雅设计DWS层?DWS层模型好坏该如何评价?

       7)指标发生异常,该如何排查?应从哪些方面入手寻找问题点?

       8) 数据架构的选择,mpp or hadoop?

       9)数仓团队应如何体现自己的业务价值,讲好数据故事?

       10)BI与大数据有什么关系?BI与信息化、数字化之间有什么关系?BI与报表之间的关                          系?

       11)数据部门如何与业务部门沟通,并规划指引业务需求?

 

文章不限于以上内容,有新的想法也会及时更新到该专栏。

具体专栏链接如下:

数字化建设通关指南_莫叫石榴姐的博客-CSDN博客

cb52e29eec8d48729502af9db8954177.png

 

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

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

相关文章

笔尖划出秋季的声息

笔尖划出秋季的声息 进入秋分,天气渐趋凉爽,天空青蓝明朗,难言伤感。 九月,把一些句子记录好,明年拿出来晒一晒,秋季也就有了答案。 1、经历 9月6日,台风“摩羯”席卷而过粤西,…

[Excel VBA]如何使用VBA按行拆分Excel工作表

如何使用VBA按行拆分Excel工作表 在Excel中,按行拆分工作表并生成多个新工作表是一项实用的技能,尤其在处理大量数据时。以下是一个VBA代码示例,能帮助你轻松实现这一功能。 1. 代码说明 本代码会根据源工作表中每个姓名创建一个新工作表&a…

mybatis 配置文件完成增删改查(二):根据条件查询一个

文章目录 参数占位符#{}:会将其替换为? ——为了防止sql注入${}:会将其替换为实际接收到的数据,拼sql ——无法防止sql注入 查询一个sql特殊字符的处理 参数占位符 #{}:会将其替换为? ——为了防止sql注入 ${}:会将其替换为实际接收到的数据…

2024年一区极光优化+分解+深度学习!VMD-PLO-Transformer-GRU多变量时间序列光伏功率预测

2024年一区极光优化分解深度学习!VMD-PLO-Transformer-GRU多变量时间序列光伏功率预测 目录 2024年一区极光优化分解深度学习!VMD-PLO-Transformer-GRU多变量时间序列光伏功率预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.中秋献礼&#…

python如何跨文件调用自己定义的函数

当自己定义函数过多时,只有一个python文件时代码会很长,不易理清代码框架,比如下面这段代码,如何隐藏具体函数细节呢?也就是把def函数放到另外一个python文件里步骤如下: 一个python文件代码篇幅过长 imp…

面试中如何回答关于 `RecyclerView` 性能优化的理解和实践经验

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 在面试中展示对 RecyclerView 性能优化的理解和实践经验,你可以从以下几个方面进行阐述: 1. 理解 RecyclerView 的工作…

Maven-五、属性

Maven 文章目录 Maven前言属性定义properties文件加载pom文件属性总结 前言 使用maven中的属性可以来简化我们的配置工作。 属性定义 在pom文件中可以使用**标签设置属性,属性名自定义,然后可以在使用${属性名}**文件中引用自己定义的属性。 使用属性进行配置&a…

干货 | 2024数智新时代制造业数字化创新实践白皮书(免费下载)

导读:本白皮书将对制造业发展历程、现状、趋势与核心难题做深入解读,并在此基础上提出了相应的制造行业解决方案,结合业内实践成功的客户案例来详析信息化转型的有效方法,以供生产制造行业的从业者参考交流。

【网络安全】依赖混淆漏洞实现RCE

未经许可,不得转载。 文章目录 正文 依赖混淆是一种供应链攻击漏洞,发生在企业的内部依赖包错误地从公共库(如npm)下载,而不是从其私有注册表下载。攻击者可以在公共注册表中上传一个与公司内部包同名的恶意包&#xf…

Java的IO流(二)

目录 Java的IO流(二) 字节缓冲流 基本使用 使用缓冲流复制文件 字符缓冲流 缓冲流读取数据原理 字符编码 字符集 转换流 序列化流与反序列化流 基本使用 禁止成员被序列化 序列号不匹配异常 打印流 基本使用 系统打印流与改变流向 Prop…

【Windows】快速帮你解决如何找到 Windows 上的 .condarc 文件

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

【VLM小白指北 (1) 】An Introduction to Vision-Language Modeling

开一个新坑Vision-Language Modeling (VLM) ,原文76页,慢慢更,for beginners,但也不能之前啥都不会啊。 原文链接:An Introduction to Vision-Language Modeling Introduction 存在的问题:将语言与视觉相…

算法-K个一组翻转链表

// 要实现没k个节点进行翻转的操作,可以按照一下步骤进行 // 1.计算链表长度 // 2.分组反转 // 3. 使用一个虚拟头节点来处理边界情况 // 4.每次处理k个节点进行反转 // 5.如果剩余节点不足k个 则保持原有顺序 // 6.依次反转每组中的节点 // 1.使用prevGroupEEnd追…

【测试】——JUnit

📖 前言:JUnit 是一个流行的 Java 测试框架,主要用于编写和运行单元测试,用来管理测试用例。本文采用JUnit 5 目录 🕒 1. 添加依赖🕒 2. 注解🕘 2.1 Test🕘 2.2 BeforeAll AfterAll&…

OceanBase 3.X 高可用 (一)

OceanBase 3.X 高可用(一) 一、分布式核心 OceanBase 3.x 采用的是paxos 协议,与raft协议相比。其复杂程度高,实现技术难度大。 Paxos 协议允许事务日志乱序发送,顺序提交。raft允许事务顺序发送,顺序提…

Windows Internals 7th Edition English Download

天翼云盘 珍藏美好生活 家庭云|网盘|文件备份|资源分享天翼云盘是中国电信推出的云存储服务,为用户提供跨平台的文件存储、备份、同步及分享服务,是国内领先的免费网盘,安全、可靠、稳定、快速。天翼云盘为用户守护数据资产。https://cloud.1…

高并发内存池(四):查缺补漏 与 申请内存过程的调试

目录 查缺补漏 问题:min函数的冲突问题 申请内存过程的调试 当前文件展示 Common.h ObjectPool.h ConcurrentAlloc.h ThreadCache.h CentralCache.h PageCache.h ThreadCache.cpp CentralCache.cpp PageCache.cpp UnitTest.cpp 单进程单span 单进程…

谷歌收录批量查询,怎么查看批量查询谷歌收录情况

在SEO(搜索引擎优化)领域,确保网站内容被谷歌等搜索引擎有效收录是提升网站可见性和流量的关键步骤。批量查询谷歌收录情况,能够帮助网站管理员快速了解哪些页面已被搜索引擎识别并编入索引,哪些页面可能存在问题需要优…

【python】石头剪刀布,模拟十次并统计获胜次数

解决问题 下面是一个使用Python编写的剪刀、石头、布游戏的程序,包含玩家与计算机对战和模拟计算机对战10次的功能。 import random def get_computer_choice(): return random.randint(0, 2) def get_user_choice(): choice input("请输入剪刀(0)…

Spring高手之路24——事务类型及传播行为实战指南

文章目录 1. 编程式事务(不推荐)2. 声明式事务(推荐)3. 事务的传播行为(复杂混合事务场景及时序图说明)3.1 NESTED和REQUIRES_NEW传播行为的区别 1. 编程式事务(不推荐) 定义&#…