如何构建具有重复开始和结束时间的流程的数据仓库

问题描述 投票:0回答:1

我的第一个想法是使用星型模式来构建它。

我需要收集以下数据:进程名称、计划运行日期、开始时间、结束持续时间、状态、执行服务器、目标服务器。

同一进程每天可以运行多次,我的第一个想法是只做一个平面文件,但后来我想遵循更标准的通用方法,例如使用启动模式和时间维度,尽管我不确定星型模式和 3D 立方体适合这种情况吗?

在星型模式中,我的事实“进程运行时”具有以下属性:

ExecutionID
ProcessID
TimeID
Process Name

执行维度

ExecutionID
Start Time
End Time
Duration
Target Server
Execution Server
Status

时间维度

TimeID
Month
Day
Year

这是构建我的架构的最佳方法吗?为什么我不应该只做一张平坦的桌子。我正在争论是否需要执行维度。想法?

database database-design data-warehouse star-schema
1个回答
0
投票

IMO,持续时间应该是一种度量,而不是一种属性。这是您可能想要聚合的相关数值(相加、平均等)。

为了保留开始和结束日期/时间,您应该有角色扮演维度,两次链接到事实表。我第一次在星型模式中对此进行建模看起来像这样:

  • dim_process
    该表仅保存与流程本身相关的属性,而不保存与流程执行相关的属性。
process_id int primary key,
process_name varchar,
(...)

您可能希望包含其他属性,例如代码发布/版本号,或提交哈希,环境名称等,并将其转变为 II 型缓慢变化的维度(包括

date_from datetime, date_to datetime, version
列)。

  • dim_server
    此维度存储与服务器相关的所有属性(执行服务器和目标服务器都在同一维度中,或者如果您愿意的话可以分开存储。
server_id int primary key,
server_name varchar, 
server_fqdn varchar,
server_ip varchar

和以前一样,您可能想向服务器添加更多属性(操作系统名称和版本、体系结构、可用 RAM、磁盘空间等)

  • dim_user
    您可能希望包含此内容以跟踪哪个操作系统用户运行每个进程。现在可能不相关,但将来可能不相关,特别是当不同的进程由不同的用户执行时
user_id int primary key,
username varchar,
(...)

其他属性可以是用户组、主文件夹、检查用户是否为管理员的标志等

*

dim_status
包含所有可能的执行结果的维度

status_id int primary key,
status_code varchar,
status_desc varchar,
(...)

任何其他可能的属性。

status_code
可以只是一个 1/0 标志,其中 0 表示“正常”,1 表示错误,而描述可以是更有意义且人类可读的消息,

  • dim_date
    与日历日期相关的所有属性。
date_id int primary key,
year int,
month_number int, 
month_name_short varchar,
month_name_long varchar,
day_of_month int,
day_of_week int,
day_of_week_short varchar,
day_of_week_long varchar,
iso8601_year_of_week int,
iso8601_week_of_year int,
date_string varchar,
(...)

以及您认为将来可能有用的任何其他属性(is_weekend、is_holiday 等) 不用担心这里过于冗长。该表中 100 年的日期总计 36524 行数据。

  • dim_time
    所有与一天中的时间相关的属性。
time_id int primary key,
hour int,
minute int,
second int,
hour24 varchar,  -- '00' to '23'
hour12 varchar,  -- '01' to '12'
am_pm varchar,
time_string24, -- formatted as HH:mm:ss
time_string12,  -- formatted as hh:mm:ss a
(...)

再次包含您认为将来可能有用的任何其他属性。总共有 86400 行(如果要添加闰秒则为 86401 行)。

  • fact_executions
    所有不同维度的外键以及度量。
process_id int,  -- joins to dim_process
execution_server_id int,  -- joins to dim_server
target_server_id int,  -- joins to dim_server
user_id int, -- joins to dim_user
scheduled_date_id int,    -- joins to dim_date
scheduled_time_id int,  -- joins to dim_time
start_date_id int,  -- joins to dim_date
start_time_id int,  -- joins to dim_time
end_date_id int,  -- joins to dim_date
end_time_id int,  -- joins to dim_time
status_id int, -- joins to dim_status
duration int,  -- seconds between start and end dates/times
execution_count int, -- probably always 1, but having this column allows sum(execution_count) to give a meaningful result
(...)

添加您可能需要的任何其他维度,以及您可能认为有用的任何其他度量(例如,计划时间和开始时间之间的时间、自上次错误以来连续成功运行的次数、使用的峰值内存、使用的峰值 CPU 等。

© www.soinside.com 2019 - 2024. All rights reserved.