规范化PostgreSQL中定期收集并可能具有多个重复项的大型数据集
我正在尝试决定如何处理特定类型的数据。我们有一个探测器,每5分钟从云服务收集一次历史会话详细信息。我们使用返回的数据进行分析 由于云服务在向其系统中插入新的历史记录方面可能会出现一些延迟,因此我们决定在每次查询时要求提供最后15分钟的数据,因为我们不想丢失任何数据。因此,每5分钟,我们会询问过去15分钟内填充的记录。我们现在面临一些挑战:规范化PostgreSQL中定期收集并可能具有多个重复项的大型数据集,postgresql,microsoft-graph-api,Postgresql,Microsoft Graph Api,我正在尝试决定如何处理特定类型的数据。我们有一个探测器,每5分钟从云服务收集一次历史会话详细信息。我们使用返回的数据进行分析 由于云服务在向其系统中插入新的历史记录方面可能会出现一些延迟,因此我们决定在每次查询时要求提供最后15分钟的数据,因为我们不想丢失任何数据。因此,每5分钟,我们会询问过去15分钟内填充的记录。我们现在面临一些挑战: 将有重复的会话条目 每条记录将返回200多列 记录的列实际上可以根据它们提供的数据类型进行分类,因此我们计划基于这一事实制定规范化策略。但这带来了另一个挑
- 将有重复的会话条目
- 每条记录将返回200多列
- 如何规范化数据,并在需要时使用适当的键将它们连接在一起
提前感谢。您概述了两个问题:
-- staging table: date is not maintained after loadiing (at least not long)
-- it will either be archieved or deleted. This is NOT permiante Data
-- but it IS a perminate table.
create table probe_staging
( probe_ident text -- from prob for id
, transmission_time timestamptz -- from prob for id
, captured_time timestamptz -- generated
, loaded_timestamp timestamptz -- generated
, start_time timestamp -- prob data
, conference_id text -- ...
, conference_type text
, media_type text
, constraint probe_staging_uk
unique (probe_ident, transmission_time)
) ;
-- of course columns are just examples. But overall structure valid.
create table probe_master
( probe_id bigint generated always as identity
, probe_ident text
, in_servace_date timestamptz
, last_maintenance_date timestamptz
, constraint probe_master_pk
primary key (probe_id)
, constraint probe_master_bk
unique (probe_ident)
);
-- of course columns are just examples. But overall structure valid.
create table probe_transmission
( probe_transmission_id bigint generated always as identity
, probe_id bigint
, transmission_time timestamptz
, start_time timestamp
, conference_id text
, conference_type text
, media_type text
, constraint probe_transmission_pk
primary key (probe_transmission_id)
, constraint probe_trans_2_master_fk
foreign key (probe_id)
references probe_master(probe_id)
, constraint probe_trans_bk
unique (probe_id, transmission_time)
);
-- of course columns are just examples. But overall structure valid.
create table probe_transmission_audio
(probe_transmission_audio_id bigint generated always as identity
,probe_transmission_id bigint
, audio_data bytea
, constraint probe_transmission_audio_pk
primary key (probe_transmission_audio_id)
, constraint probe_trans_audio_2_trans_fk
foreign key (probe_transmission_id)
references probe_transmission(probe_transmission_id)
);
-- of course columns are just examples. But overall structure valid.
create table probe_transmission_video
(probe_transmission_video_id bigint generated always as identity
,probe_transmission_id bigint
, video_data bytea
, constraint probe_transmission_video_pk
primary key (probe_transmission_video_id)
, constraint probe_trans_video_2_trans_fk
foreign key (probe_transmission_id)
references probe_transmission(probe_transmission_id)
);
...
如果您没有探头的传输时间,请使用您确定的自然密钥。我假设您可以从它传输的数据中唯一地识别探测器本身。我已经使用了prob_\ident这一术语。非常感谢您的详细解释。我一定要试一试。