假设我有一个包含3600个文档的集合(最后一个小时每秒一个),每个文档都有两个字段:timestamp
和value
中的一个或多个。
什么是最好的(读:性能最佳)的方法来选择这些数据的样本,比如说,12个文档,间隔5分钟?或者60个文档,每分钟一个?
实际上,该集合将有数千万条记录,并且查询将经常运行,因此性能确实是关键。通过对两个字段进行索引,在具有200,000条记录的集合上,按timestamp > {one hour ago}
筛选的查询相对较快。
此帖子已由Aggregating averages from large datasets for number of steps over period of time in ArangoDB接替。
2条答案
按热度按时间to94eoyn1#
我会这样做:
timestamp
被假定为基于毫秒的Unix时间戳,类似于DATE_NOW()
函数返回的值。其中
@start
是时段的开始时间戳,@end
是时段的结束时间戳。上面的函数返回周期中每个5分钟时间段的第一个文档。如果您希望每分钟一个文档,请将公式中的
300
更改为60
。如果您不需要第一个文档,而是需要从该时间段开始X秒后的文档,也可以将0
更改为其他值。有一件事可以帮助提高速度,那就是如果你把时间戳存储在以秒为基础的Unix时间戳中,因为这样公式会更简单:
doc.timestamp % 300 == 0
,每个文档所需的计算更少。正如评论中提到的,在
timestamp
上使用永久索引,这将显著加快第一个过滤器行的速度。bgtovc5b2#
对此的简短回答是:
有关更多细节,请参见我的问题中的答案,并替换为以下问题:https://stackoverflow.com/a/72886996/1138620