繁体   English   中英

PostgreSQL中具有大量查询要求的时间序列

[英]Time-series in PostgreSQL with heavy query requirement

我正在寻求实现时间序列数据库,并且已经遍历了各种数据库可供使用,但是由于我不了解该知识,因此我选择坚持使用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个结果,分别为( end: 1514392000和2000)。 PostgreSQL是否可以有效地做到这一点?

我唯一想到的是,在插入时间序列时,请确保将它们的值四舍五入到最接近的分钟,然后我确切地知道要筛选的时间戳,而无需搜索数据库。

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

我建议有一个时间戳记开始和一个时间戳记结束列。 然后,您可以轻松找到匹配的行。

我正在考虑一种两表解决方案,一种用于较新的数据,一种用于较旧的数据。

您还应该按天对最近的表进行分区。 这将使您可以更有效地管理较旧的数据-一次一天(或一周或一个月)删除数据。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM