gpt4 book ai didi

MongoDB 作为时间序列数据库

转载 作者:IT老高 更新时间:2023-10-28 13:04:06 24 4
gpt4 key购买 nike

我正在尝试将 mongodb 用于时间序列数据库,并且想知道是否有人可以建议如何最好地针对该场景进行设置。

时间序列数据与股票价格历史非常相似。我收集了来自不同机器的各种传感器的数据。有数十亿个时间戳的值,我想问以下问题(最好来自数据库而不是应用程序级别):

  1. 对于给定的一组传感器和时间间隔,我想要按时间顺序位于该间隔内的所有时间戳和传感器值。假设所有传感器共享相同的时间戳(它们都是同时采样的)。

  2. 对于给定的一组传感器和时间间隔,我希望按时间顺序位于给定间隔内的每 k 个项目(时间戳和相应的传感器值)。

关于如何最好地设置和实现查询的任何建议?

感谢您的建议。

最佳答案

显然这是一个老问题,但我在研究 MongoDB 以获取时间序列数据时遇到了这个问题。我认为可能值得分享以下方法来提前分配完整的文档并执行更新操作,而不是新的插入操作。请注意,此方法已记录在 herehere .

假设您每分钟都在存储数据。考虑以下文档结构:

{
timestamp: ISODate("2013-10-10T23:06:37.000Z"),
type: ”spot_EURUSD”,
value: 1.2345
},
{
timestamp: ISODate("2013-10-10T23:06:38.000Z"),
type: ”spot_EURUSD”,
value: 1.2346
}

这与标准的关系方法相当。在这种情况下,您会为每个记录的值生成一个文档,这会导致大量插入操作。我们可以做得更好。考虑以下几点:

{
timestamp_minute: ISODate("2013-10-10T23:06:00.000Z"),
type: “spot_EURUSD”,
values: {
0: 1.2345,

37: 1.2346,
38: 1.2347,

59: 1.2343
}
}

现在,我们可以编写一个文档,执行 59 次更新。这要好得多,因为更新是原子的,单个写入更小,并且还有其他性能和并发优势。但是,如果我们想在一个文档中存储一整天,而不仅仅是整个小时,该怎么办。然后,这将要求我们遍历 1440 个条目以获取最后一个值。为了改进这一点,我们可以进一步扩展如下:

{
timestamp_hour: ISODate("2013-10-10T23:00:00.000Z"),
type: “spot_EURUSD”,
values: {
0: { 0: 1.2343, 1: 1.2343, …, 59: 1.2343},
1: { 0: 1.2343, 1: 1.2343, …, 59: 1.2343},
…,
22: { 0: 1.2343, 1: 1.2343, …, 59: 1.2343},
23: { 0: 1.2343, 1: 1.2343, …, 59: 1.2343}
}
}

使用这种嵌套方法,我们现在最多只需要步行 24 + 60 即可获得当天的最后一个值。

如果我们构建文档时所有的值都预先填充了填充,我们可以确定文档不会改变大小,因此不会被移动。

关于MongoDB 作为时间序列数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7368759/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com