我想知道 mongodb 中集合的最大大小是多少。 在 mongodb 限制文档中提到单个 MMAPv1 数据库的最大大小为 32TB。
这意味着集合的最大大小是 32TB? 如果我想在一个集合中存储超过 32TB 的数据,解决方案是什么?
最佳答案
存在理论上的限制,如下所示,但即使是下限也相当高。正确计算极限并不容易,但数量级应该足够了。
实际限制取决于一些因素,例如分片名称的长度等(如果您有几十万个,则总结一下),但这里是使用真实数据进行的粗略计算。
每个分片在配置数据库中都需要一些空间,这与任何其他数据库一样,在单台机器或副本集中限制为 32TB。在我管理的服务器上,config.shards 中条目的平均大小为 112 字节。此外,每个 block 需要大约 250 字节的元数据信息。让我们假设最佳 block 大小接近 64MB。
每台服务器最多可以有 500,000 个 block 。 500,000 * 250byte 等于 125MB 用于每个分片的 block 信息。因此,如果我们将所有内容最大化,则每个分片的每个分片有 125.000112 MB。将 32TB 除以该值表明我们可以在一个集群中拥有最多略低于 256,000 个分片。
每个分片又可以容纳 32TB 的数据。 256,000 * 32TB 为 8.19200 EB 或 8,192,000 TB。这将是我们示例的限制。
假设它是 8 艾字节。到目前为止,这可以很容易地翻译为“足够用于所有实际目的”。给你一个印象:国会图书馆(可以说是世界上最大的图书馆之一)拥有的所有数据都包含大约 20TB 的数据,包括音频、视频和数字 Material 。你可以将它放入我们理论上的 MongoDB 集群中大约 400,000 次。请注意,这是使用保守值的最大尺寸的下限。
现在好的部分:WiredTiger 存储引擎没有这个限制:数据库大小没有限制(因为可以使用多少数据文件没有限制),所以我们可以拥有无限数量的分片。即使我们在 mmapv1 上运行这些分片并且在 WT 上只有我们的配置服务器,a 的大小也几乎是无限的——在 64 位系统上限制为 16.8M TB 的 RAM 可能会在某处导致问题并导致 config.shard 集合被交换到磁盘,停止系统。我只能猜测,因为我的计算器拒绝使用该区域中的数字(而且我懒得手动操作),但我估计了两位数 yottabyte 区域的限制(以及在某处托管该区域所需的空间)相当于德克萨斯州的大小)。
不要担心分片环境中的最大数据大小。无论如何,这已经足够了,即使是最保守的方法。使用分片,你就完成了。顺便说一句:即使是 32TB 也是一大堆数据:我所知道的大多数集群拥有较少的数据和分片,因为 IOPS 和 RAM 利用率超过了单个节点的容量。
关于mongodb - mongodb中集合的最大大小是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33939587/
我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,
当谈到运行时自省(introspection)和动态代码生成时,我认为ruby没有任何竞争对手,可能除了一些lisp方言。前几天,我正在做一些代码练习来探索ruby的动态功能,我开始想知道如何向现有对象添加方法。以下是我能想到的3种方法:obj=Object.new#addamethoddirectlydefobj.new_method...end#addamethodindirectlywiththesingletonclassclass这只是冰山一角,因为我还没有探索instance_eval、module_eval和define_method的各种组合。是否有在线/离线资
Region是HBase数据管理的基本单位,region有一点像关系型数据的分区。region中存储这用户的真实数据,而为了管理这些数据,HBase使用了RegionSever来管理region。Region的结构hbaseregion的大小设置默认情况下,每个Table起初只有一个Region,随着数据的不断写入,Region会自动进行拆分。刚拆分时,两个子Region都位于当前的RegionServer,但处于负载均衡的考虑,HMaster有可能会将某个Region转移给其他的RegionServer。RegionSplit时机:当1个region中的某个Store下所有StoreFile
我在一段非常简单的代码(如我所想)中得到了一个错误的值:org=4caseorgwhenorg=4val='H'endputsval=>nil请不要生气,我希望我错过了一些非常明显的东西,但我真的想不通。谢谢。 最佳答案 这是典型的Ruby错误。case有两种被调用的方法,一种是你传递一个东西作为分支的基础,另一种是你不传递的东西。如果您确实在case中指定了一个表达式语句然后评估所有其他条件并与===进行比较.在这种情况下org评估为false和org===false显然不是真的。所有其他情况也是如此,它们要么是真的,要么是假的。
给定一个nxmbool数组:[[true,true,false],[false,true,true],[false,true,true]]有什么简单的方法可以返回“该列中有多少个true?”结果应该是[1,3,2] 最佳答案 使用转置得到一个数组,其中每个子数组代表一列,然后将每一列映射到其中的true数:arr.transpose.map{|subarr|subarr.count(true)}这是一个带有inject的版本,应该在1.8.6上运行,没有任何依赖:arr.transpose.map{|subarr|subarr.in
我有以下内容:text.gsub(/(lower)(upper)/,'\1\2')我可以将\2替换为大写吗?类似于:sed-e's/\(abc\)/\U\1/'这在Ruby中可行吗? 最佳答案 查看gsub文档:str.gsub(模式){|匹配|block}→new_str在block形式中,当前匹配字符串作为参数传入,$1、$2、$`、$&、$'等变量将被适当设置。block返回的值将替换为每次调用的匹配项。"alowerupperb".gsub(/(lower)(upper)/){|s|$1+""+$2.upcase}
我需要用任何语言编写一个算法,根据3个因素对数组进行排序。我以度假村为例(如Hipmunk)。假设我想去度假。我想要最便宜的地方、最好的评论和最多的景点。但是,显然我找不到在所有3个中都排名第一的方法。Example(assumingthereare20importantattractions):ResortA:$150/night...98/100infavorablereviews...18of20attractionsResortB:$99/night...85/100infavorablereviews...12of20attractionsResortC:$120/night
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭9年前。我正在创建一个Sinatra应用程序,它采用上传的CSV文件并将其内容放入哈希中。当我像这样在我的app.rb中引用这个散列时:hash=extract_values(path_to_filename)我不断收到此错误消息:undefinedmethod`bytesize'forHash:0x007fc5e28f2b90#object_idfile:utils.rblocation:bytesiz
2个数组的数组:a=[[1,2],[22,11],[18,9]]b=[[1,81]]用[0,0]填充第二个的最佳方法是什么,以便它们具有相同的大小? 最佳答案 b.fill(b.size..a.size-1){[0,0]} 关于ruby-使2个数组大小相同,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/29725615/
我收到“ArgumentError:数组大小太大”消息,代码如下:MAX_NUMBER=600_000_000my_array=Array.new(MAX_NUMBER)问题。Array.new函数在Ruby中的最大值是多少? 最佳答案 具有5亿个元素的数组的大小为2GiBytes,这取决于您使用的特定操作系统,通常是一个进程可以处理的最大值。换句话说:您的数组大于您的地址空间。因此,解决方案很明显:要么缩小数组(例如,将其分成block),要么扩大地址空间(在Linux中,您可以修补内核以获得3、3.5甚至4GiByte地址空间,