我需要在一个集合中加载66亿个bigrams,但我找不到有关最佳方法的任何信息.
将许多文档加载到单个主键索引上需要永远,但据我所知mongo不支持相当于分区?
分片会有帮助吗?我是否应该尝试将数据集拆分为多个集合并将该逻辑构建到我的应用程序中?
Mar*_*ick 56
很难说最佳体积插入是什么 - 这部分取决于您插入的物体的大小和其他不可测量的因素.您可以尝试一些范围,看看是什么让您获得最佳性能.作为替代方案,有些人喜欢使用mongoimport,这非常快,但您的导入数据需要是json或csv.如果数据是BSON格式,那显然是mondodrestore.
Mongo可以轻松处理数十亿个文档,并且可以在一个集合中包含数十亿个文档,但请记住最大文档大小为16mb.在MongoDB中有很多人拥有数十亿的文档,并且MongoDB Google用户组上有很多关于它的讨论.如果您改变主意并想要拥有多个集合,那么这是一个关于使用您可能想要阅读的大量集合的文档.您拥有的集合越多,您将拥有的索引就越多,这可能不是您想要的.
以下是Craigslist关于将数十亿个文档插入MongoDB和该人的博客文章的演示文稿.
它看起来像分片对你来说是一个很好的解决方案,但通常分片用于跨多个服务器进行扩展,很多人都这样做,因为他们想要扩展他们的写入或他们无法保持他们的工作集(数据和索引)在RAM中.从单个服务器开始,然后在数据增长时移动到分片或副本集,或者您需要额外的冗余和弹性,这是完全合理的.
但是,还有其他用户使用多个mongod来解决大量写入的单个mongod的锁定限制.显而易见但仍然值得一提,但多mongod设置管理比单个服务器更复杂.如果你的IO或cpu没有超出这里,你的工作集小于RAM,你的数据很容易保持平衡(相当随机分布),你应该看到改进(在单个服务器上使用分片).作为一个FYI,存在内存和IO争用的可能性.对于具有改进的2.2 并发与数据库锁定,我怀疑会有少得多的原因,这样的部署.
您需要计划正确分组,即仔细考虑选择分片键.如果你这样走,那么最好预先拆分并关闭平衡器.移动数据以保持平衡将会适得其反,这意味着您需要预先决定如何拆分数据.此外,设计文档有时很重要,因为某些字段可用于分片,或作为主键.
这是一些很好的链接 -
您绝对可以在MongoDB中对数据进行分片(在分片键上跨N个服务器进行分区).事实上,这是它的核心优势之一.在您的应用程序中没有必要这样做.
对于大多数用例,我强烈建议为66亿个文档执行此操作.根据我的经验,MongoDB在许多中端服务器上表现得更好,而不是一个大型服务器.