gpt4 book ai didi

mongodb - 如何为大量文档的大量时间值对组织 mongodb 数据库?

转载 作者:可可西里 更新时间:2023-11-01 10:04:18 25 4
gpt4 key购买 nike

有一组注册器,比如 100k。每个注册者每天 24 次给出类似 23.123 的值。我需要保存这个值(value)和时间。然后我需要计算一段时间内的值(value)如何变化,例如4jun2014 - 19jul2014:为了做到这一点,我必须找到 3jun2014 的最后一个值和 19jul2014 的最后一个值。

首先,我试图估计一个注册商存储的数据大小。时间+值必须小于 100 字节。 1 年 < 100*24*365 = 720kB 的数据,所以我可以轻松地在我的文档中存储 10 年的数据(因为 7.2M < 16M 限制)。我决定不将注册数据存储在 registeredData 集合中,而是将嵌入在注册器对象中的注册器数据存储为树 timedata->year->month->day:

{
code: '3443-12',
timedata: {
2013: {
6: {
13: [
{t:1391345679, d:213.12},
{t:1391349679, d:213.14},
]
}

}
}
}

因此很容易获取当天的值:只需获取 find({code: "3443-12"})[0].timedata[2013][6][13]

当我获得新数据时,我只是将它插入现有文档的数组中,它最终从零增长到 7Mb。

问题

{t:1391345679, d:213.12} 行的存储大小是多少,是否小于 100bytes?

为此类目的组织数据库的方式是否正确?

100k 文档,5Mb 大小 = 500G。 MongoDB 处理数据库大小的速度是否比 RAM 大小快得多?

更新

我决定不将时间存储为时间戳,而是存储为从一天开始以秒为单位的时间:0 - 86399:{t: 86123, d: 213.12}

最佳答案

关于您的最后一个问题,“MongoDB 处理数据库大小的速度是否比 RAM 大小快得多?”答案是可以,但这取决于许多因素。

当工作集适合 MongoDB 可用的内存时,MongoDB 工作得最好。如果不是这样,您往往会看到相当快速的性能下降。该工作集的大小取决于数据库架构、构建的索引和您的数据访问模式。

假设您的数据库中有一年的数据,但通常只接触最近几天的数据。那么您的工作集很可能由将最近几天的数据保存在内存中所需的内存以及内存中足够的索引组成,以便您正确地更新和读取它们。

或者,如果您在一年内随机访问数据并且具有很高的更新量,您可能需要处理更大的工作集。

作为比较,我有一个生产 MongoDB 实例,其中包含大约 5 亿个文档,占用大约 2 TB 的磁盘存储空间。副本集主内存的总内存为 128GB(总存储空间的 1/16),我们没有遇到任何性能问题。

不过,所有这一切的关键是随着时间的推移您访问了多少数据。 MongoDB 性能的 killer 是内存争用,当您将数据分页以服务于新请求时,只会将旧数据重新分页。如果您不能将索引保留在内存中,情况会变得更糟。

关于mongodb - 如何为大量文档的大量时间值对组织 mongodb 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24253570/

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