[英]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: 1514391000
, end: 1514392000
和step: 200
,然后我希望收到6个结果,分别为( end: 1514392000
和2000)。 PostgreSQL是否可以有效地做到这一点?
我唯一想到的是,在插入时间序列时,请确保将它们的值四舍五入到最接近的分钟,然后我确切地知道要筛选的时间戳,而无需搜索数据库。
我也想知道是否有可能在相同的情况下搜索给定项目的“最近时间戳记”。 通过巧妙的时间戳输入,所有这些似乎都可以解决,但是我不确定这是否可行。
我建议有一个时间戳记开始和一个时间戳记结束列。 然后,您可以轻松找到匹配的行。
我正在考虑一种两表解决方案,一种用于较新的数据,一种用于较旧的数据。
您还应该按天对最近的表进行分区。 这将使您可以更有效地管理较旧的数据-一次一天(或一周或一个月)删除数据。
然后,每天(或每周或每月)将较旧的数据汇总到要存档的记录中。 您可以从较新的数据中删除分区。
您可以交换归档分区或使用视图来组合它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.