PostgreSQL中的时间序列,查询要求很高

问题描述 投票:0回答:1

我正在寻求实现一个时间序列数据库,我已经使用了各种数据库选项,但是因为我不是那种知识,所以我选择坚持使用PostgreSQL,因为我有点熟悉将它与Django一起使用(特别是由于ORM)。

我们的想法是存储4列数据的时间序列(除了价格以外的所有索引)。

timestamp | id | item | price

我正在考虑每分钟添加这些,每分钟大约插入大约1500个数据点。一个月之后,我不再需要它们专门用于分钟,每天只需要一个就足够了(00:00)。

我认为PostgreSQL应该做得好吗?这将由后端提供,并且需要非常低的延迟(300毫秒往返)。

我的主要问题在于理解PostgreSQL是否能够有效地返回数据,即使在给定一系列项目,开始和结束时间戳以及请求数据的时间间隔等要求时(无需返回所有内容并手动过滤) 。

如果我的表包含具有以下数据的单个项目:

timestamp  | id | item | price
1514391000   01    foo     10
1514391100   02    foo     20
1514391200   03    foo     30
..........   ..    ...     ..
1514392000   11    foo     20
1514393000   21    foo     20

我希望能够请求start: 1514391000end: 1514392000step: 200,然后我希望收到6个结果(1000,1200,1400,1600,1800和2000)。 PostgreSQL以高效的方式实现这一点吗?

我唯一能想到的是当我插入我的时间序列时,我确保它们的值被四舍五入到最接近的分钟,然后我确切地知道要过滤哪些时间戳而不需要搜索数据库。

我也想知道是否可以搜索给定项目的“最近时间戳”,同样的情况。所有这些似乎都可以通过巧妙的时间戳输入来解决,但我不确定这是否可行。

sql postgresql
1个回答
0
投票

我建议有一个时间戳开始和一个时间戳结束列。然后你可以很容易地找到匹配的行。

我正在考虑一个双表解决方案,一个用于更新的数据,另一个用于旧数据。

您还应该按日分区最近的表。这将允许您更有效地管理旧数据 - 一次删除数据(或一周或一个月)。

然后,每天(或周或月)将旧数据汇总到要存档的记录中。您可以从较新的数据中删除分区。

您可以交换存档分区或使用视图来组合它们。

© www.soinside.com 2019 - 2024. All rights reserved.