我正在使用包含船舶信息(测量)的数据库。船只发送更新,包括他们的位置,燃料使用等。因此数据库中的条目看起来像这样
| measurement_id | ship_id | timestamp | position | fuel_use |
| key | f_key | dd-mm-yy hh:ss| lat-lon | in l/km |
每秒为每艘船添加一个新条目,这样数据库中的条目数量就会非常快。
我正在处理的应用程序所需要的不是一秒钟的信息,而是1分钟,1天甚至1年的累积数据。例如,一天内的总燃料使用量,一年中的行驶距离,或一个月内每天的平均燃料使用量。
为了得到这个并计算出来自这个原始数据是不可行的,你必须从服务器获得3150万条记录来计算一年内的旅行距离。
我认为聪明的事情是将条目组合成一个更大的条目。例如,获得60次测量并将它们组合成一个单独的表中的1分钟测量条目。通过平均燃料使用,并通过总计两个条目之间的行进距离。一分钟就会看起来像这样。
| min_measurement_id | ship_id | timestamp | position | distance_traveled | fuel_use |
| new key |same ship| dd-mm-yy hh| avg lat-lon | sum distance_traveled | avg fuel_use |
然后可以重复此过程以使用数小时,数天,数月,数年。这样,通过仅请求7个查询,或者如果我想要每小时详细信息168个条目,可以完成一周的查询。那些看起来像是对我来说更有用的数字。
可以通过每10分钟查询原始数据库来填充新表,然后该数据填充分钟表,进而更新小时表等。
然而,这似乎是大量管理和重复几乎相同的数据,并且不断进行相同的操作。
所以我感兴趣的是是否有某种方法来构建这些数据。它可以按层次排序(在几秒钟之后,几天,几分钟都是分层次的)还是有其他方法来优化它?
这是我第一次使用这么大的数据库,所以我也不知道在互联网上寻找什么。
答案 0 :(得分:1)
聚合在数据仓库中很常见,因此您对组数据的处理方法很好。是的,您正在复制某些数据,但您将获得速度优势。