如何优化大型数据库请求

How to optimize large database requests

我正在使用一个包含船舶信息(测量值)的数据库。船只发送有关其位置、燃料使用等的更新。因此数据库中的条目如下所示

| 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 次测量并将它们组合成单独 table 中的 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 分钟查询一次原始数据库来填充新的 tables,然后该数据会填充分钟 table,进而更新小时 table,等等.

然而,这似乎是对几乎相同数据的大量管理和复制,不断进行相同的操作。

所以我感兴趣的是是否有某种方法可以构建这些数据。它可以分层排序(毕竟秒、天、分钟非常分层)还是有其他方法可以优化它?

这是我第一次使用这么大的数据库,所以我也不知道要在 Internet 上查找什么。

聚合在数据仓库中很常见,因此您对数据进行分组的方法很好。是的,您正在复制一些数据,但您将获得速度优势。