草庐IT

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

coder 2023-11-03 原文

有一组注册器,比如 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/

有关mongodb - 如何为大量文档的大量时间值对组织 mongodb 数据库?的更多相关文章

  1. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  2. ruby - 如何为 emacs 安装 ruby​​-mode - 2

    我刚刚为fedora安装了emacs。我想用emacs编写ruby。为ruby​​提供代码提示、代码完成类型功能所需的工具、扩展是什么? 最佳答案 ruby-mode已经包含在Emacs23之后的版本中。不过,它也可以通过ELPA获得。您可能感兴趣的其他一些事情是集成RVM、feature-mode(Cucumber)、rspec-mode、ruby-electric、inf-ruby、rinari(用于Rails)等。这是我当前用于Ruby开发的Emacs配置:https://github.com/citizen428/emacs

  3. ruby-on-rails - Ruby 检查日期时间是否为 iso8601 并保存 - 2

    我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby​​是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查

  4. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  5. ruby-on-rails - 将 Ruby 中的日期/时间格式化为 YYYY-MM-DD HH :MM:SS - 2

    这个问题在这里已经有了答案:Railsformattingdate(4个答案)关闭4年前。我想格式化Time.Now函数以显示YYYY-MM-DDHH:MM:SS而不是:“2018-03-0909:47:19+0000”该函数需要放在时间中.现在功能。require‘roo’require‘roo-xls’require‘byebug’file_name=ARGV.first||“Template.xlsx”excel_file=Roo::Spreadsheet.open(“./#{file_name}“,extension::xlsx)xml=Nokogiri::XML::Build

  6. ruby - 查找字符串中的内容类型(数字、日期、时间、字符串等) - 2

    我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s

  7. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

  8. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  9. Matlab imread()读到了什么 (浅显 当复习文档了) - 2

    matlab打开matlab,用最简单的imread方法读取一个图像clcclearimg_h=imread('hua.jpg');返回一个数组(矩阵),往往是a*b*cunit8类型解释一下这个三维数组的意思,行数、数和层数,unit8:指数据类型,无符号八位整形,可理解为0~2^8的数三个层数分别代表RGB三个通道图像rgb最常用的是24-位实现方法,即RGB每个通道有256色阶(2^8)。基于这样的24-位RGB模型的色彩空间可以表现256×256×256≈1670万色当imshow传入了一个二维数组,它将以灰度方式绘制;可以把图像拆分为rgb三层,可以以灰度的方式观察它figure(1

  10. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

随机推荐