数据模型 - 存储大量信息的最佳方式

时间:2014-04-23 16:21:51

标签: database-design

我有一个服务器应用程序从一些从设备检索信息,检索到的数据相当于每台设备每秒大约200个浮点数。应用程序需要能够生成报告,其中时间范围可能从几分钟到几个月不等。因此,我实现了某种数据仓库。

该应用程序运行良好,但现在客户端不在我想要改进应用程序,这就是为什么我想询问我使用的数据模型是否良好或是否更好使用另一个,所以这是我正在使用的:

假设我有设备1& 2.我创建了以下表格: - data_s_1& data_s_2:我在进入时存储数据。 - data_m_1& data_m_2:我对最近60秒的数据进行平均。 - data_h_1& data_h_2:我对过去60分钟的数据进行平均。

这个数据模型允许我快速搜索我所问的报告,我在上面的表中存储了索引,这些索引允许我快速查找较低的数据。示例:data_h_1中的条目具有data_m_1表中用于平均值的第一个和最后一个项的索引,因此如果我需要获取该数据,则使用索引搜索并且速度更快。

我想问的是,为所有设备创建唯一的表(客户端超过20个)是否更好,就像带有device_id字段的单独data_s表一样。它使记录时更容易,但我不知道是否有正确的方法来做到这一点。任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:1)

一般来说,最好为每种类型的数据都有一个表(我假设每个data_s_x表的结构都相同)。这使得在不改变数据库结构的情况下添加新设备变得容易。

但它确实增加了一个表中的数据量,并且确保应用了正确的索引很重要 - 它可能就是你的情况!

您的data_m和data_h表严格说来是非规范化的:它们包含派生数据,实际上并不需要,因为它们的内容可以在需要时计算。然而,出于性能原因,这种非规范化听起来并不合理。我不知道你是否添加了它们,因为如果没有它们,性能会很差:如果你没有,那么我建议一个可能的改进是看看使用的报告是否仍然可以接受在生成报告的SQL中执行AVG计算。如果性能良好,那么您可以删除表和维护它们的处理。