如何以最佳方式访问MongoDB中的最新数据点?

2024-05-14 15:29:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我将多个时间序列存储在MongoDB中,其粒度为亚秒。数据库由一组Python脚本更新,存储的数据有两个主要用途:

(1)它是所有系列中最新数据的中心信息源。多个脚本每秒访问一次,以读取每个集合中的最新数据点

(2)它是一个长期的数据存储。我经常将整个数据库加载到Python中,以分析数据的趋势

为了尽可能保持数据库的效率,我希望存储我的数据(理想情况是在每个集合中每天保存一个文档)。但是,由于(1),存储桶越大,访问最后一个数据点所需的排序成本就越高。

我可以想到两种解决方案,但我不确定有什么替代方案,或者哪种方法是最好的:

a)将最新时间戳存储在单独的db/集合中的单行文档中。读取时不需要排序,但每次任何序列获取新数据点时都需要额外的写入

b)保持桶较小(每个桶1小时)并分类


Tags: 数据文档脚本数据库排序mongodb粒度时间
1条回答
网友
1楼 · 发布于 2024-05-14 15:29:13

使用a)可以将小型文档写入单独的集合,这比更新大型文档在性能上更可取。您可以在此集合中写入所有新的数据点,并根据您的偏好按小时或天数进行聚合。但正如您所说,这需要额外的写入操作

使用b)时,需要记住排序字段的索引大小。索引大小适合内存吗?这对于排序的性能至关重要,因为您不希望对大型集合执行任何内存内排序

我建议探索混合方法,即在“传入”集合中有限时间存储单个数据点。一旦您的bucketing时间间隔接近小时或天,您可以将数据点聚合到bucket中,并将它们存储在不同的集合中。当然,现在应用程序中还有一些额外的复杂性,需要能够读取Bucked和datapoint集合并合并它们

相关问题 更多 >

    热门问题