我一直在阅读有关 OLAP 处理的架构类型的信息,特别是星型模式概念。我目前正在设置一个数据库进行测试。
我的情况
我有 750 个传感器,每个传感器每分钟都会将数据发布到 SQL 数据库。目前,我的方法是发布 if 值发生变化。进一步思考这一点让我想知道它是否会在确定是否存在数据丢失与未更改的值时造成问题,并使我重新考虑预定的发布。
插入传感器值的软件会以
2020-01-23 13:48:52
格式发布时间戳。除此之外,还发布了传感器名称和传感器值。因此,如果算上主键,我的事实表中有 4 列。
我知道我需要对我的数据进行一些中间处理(可能是一个按计划处理的表,以使其符合架构,然后删除),但现在,我试图保持这个高水平- 水平并一次解决一个问题。
这是我目前的设想,但考虑到我需要的分辨率,我不知道如何处理时间维度。
我的问题
目前,我的方法是发布 if 值发生变化。进一步思考这一点让我想知道它是否会在确定是否存在数据丢失与未更改的值时造成问题,并使我重新考虑预定的发布。
这是确定数据丢失的合理担忧还是有其他方法来解决它?
考虑到我需要的分辨率,样本时间维度会是什么样子?
如果我正确理解您的情况,您正在记录代表某个时间点的某些系统状态的值。换句话说,您正在及时捕获系统的快照。在星型模式中,您应该使用“定期快照事实表”。此类事实表捕获值,无论它们是否已更改,因为它们的粒度是日期/时间单位,而不是事务。
时间维度可以通过多种方式建模。我会做以下事情:
创建维度“日期”来处理日历日期。谷物:一个历日。跨度:从您拥有数据之日起,直到今天(包括今天)。
创建维度“时间”来处理一天中的时间。谷物:一分钟。跨度:24 小时(因此该表中的总记录为 60 分钟 * 24 小时)。
将日期和时间键添加到事实表中。
我还会将时间戳保留为事实表中的简并维度,以便在需要时能够访问秒数。