Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB:集合中的数十亿文档_Mongodb - Fatal编程技术网

MongoDB:集合中的数十亿文档

MongoDB:集合中的数十亿文档,mongodb,Mongodb,我需要将66亿个Bigram加载到一个集合中,但我找不到任何关于最佳方式的信息 将这么多文档加载到一个主键索引将花费很长时间,但据我所知,mongo不支持分区的等效功能 切分有帮助吗?我是否应该尝试将数据集拆分到多个集合中,并将该逻辑构建到我的应用程序中?您完全可以(在网络上跨N个服务器的分区)。事实上,这是它的核心优势之一。在应用程序中不需要这样做 对于大多数用例,我强烈建议对66亿个文档这样做。根据我的经验,MongoDB在使用多台中端服务器时比使用一台大型服务器时性能更好。很难说最佳批量插

我需要将66亿个Bigram加载到一个集合中,但我找不到任何关于最佳方式的信息

将这么多文档加载到一个主键索引将花费很长时间,但据我所知,mongo不支持分区的等效功能

切分有帮助吗?我是否应该尝试将数据集拆分到多个集合中,并将该逻辑构建到我的应用程序中?

您完全可以(在网络上跨N个服务器的分区)。事实上,这是它的核心优势之一。在应用程序中不需要这样做


对于大多数用例,我强烈建议对66亿个文档这样做。根据我的经验,MongoDB在使用多台中端服务器时比使用一台大型服务器时性能更好。

很难说最佳批量插入是什么——这在一定程度上取决于要插入的对象的大小和其他无法测量的因素。您可以尝试几个范围,看看什么能提供最佳性能。另外,有些人喜欢使用mongoimport,这非常快,但您的导入数据需要是json或csv。如果数据是BSON格式的,显然有mongodrestore

Mongo可以轻松处理数十亿个文档,一个集合中可以包含数十亿个文档,但请记住。在MongoDB中有很多人拥有数十亿的文档,网上有很多关于它的讨论。如果你改变主意,想拥有多个收藏,这里有一个关于使用大量你可能喜欢阅读的收藏的建议。集合越多,索引也就越多,这可能不是您想要的

这是Craigslist关于在MongoDB和这家伙的网站上插入数十亿个文档的报道

看起来分片确实是一个很好的解决方案,但通常分片用于跨多个服务器进行扩展,很多人这样做是因为他们想扩展写操作,或者他们无法将工作集(数据和索引)保留在RAM中。从一台服务器开始,然后随着数据的增长或需要额外的冗余和恢复能力,移动到碎片或副本集是完全合理的

但是,也有其他用户使用多个mongod来绕过单个mongod的锁定限制,从而进行大量写入。很明显,但仍然值得一提的是,多mongod设置的管理比单个服务器更复杂。如果您的IO或cpu在这里没有达到最大值,您的工作集比RAM小,并且您的数据很容易保持平衡(非常随机分布),您应该会看到改进(在单个服务器上进行分片)。仅供参考,存在内存和IO争用的可能性。随着2.2在中的改进,我怀疑这样部署的理由会少很多

你需要正确地计划你的切分移动,也就是说,仔细考虑选择你的切分键。如果您这样做,那么最好预先拆分并关闭平衡器。移动数据以保持平衡会适得其反,这意味着您需要提前决定如何分割数据。此外,在设计文档时,考虑到某些字段对于切分或作为主键是有用的,这一点有时也很重要

这里有一些很好的链接-


这仅适用于单个服务器。即使说创建4个碎片,每个碎片仍将保存数十亿条记录……至少在6个月前我与大容量MongoDB合作时,锁定是非常不理想的。即使您的碎片在同一台物理服务器上,您也可能会看到在服务器上运行多个MongoDB实例的性能更好(再说一次,我认为官方不支持这种配置)。测试你的用例。还有。。。如果没有足够的RAM将工作集(频繁访问的文档)保存在内存中,Mongo的性能就会下降(相对而言)。“请注意这一点。难道索引不更需要放在内存中吗?@D-Klotz:真的,两者都需要。至少在我使用MongoDB的时候。对比SQL Server,内存中的索引通常是最关键的方面。看看我的回答是否对你有帮助:如果你像你建议的那样迭代大量的数据,那么在任何数据库中都会很慢,包括其他大型数据库解决方案。否@ChrisHoughton,mysql innodb引擎的插入/选择速度非常快,甚至超过65亿条记录,当然还有复合索引和分区。但是,当我尝试mongodb超过10亿条记录时,它是令人敬畏的,尤其是对于聚合函数。