微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MongoDB:在单台计算机上分片是否有意义?

如何解决MongoDB:在单台计算机上分片是否有意义?

| 在MongoDB中创建了一个包含11446615个文档的集合。 每个文档具有以下格式:
{ 
 \"_id\" : ObjectId(\"4e03dec7c3c365f574820835\"),\"httpReferer\" : \"http://www.somewebsite.pl/art.PHP?id=13321&b=1\",\"words\" : [\"SEX\",\"DRUGS\",\"ROCKNROLL\",\"WHATEVER\"],\"howMany\" : 3 
}
httpReferer:只是一个网址 单词:从上面的网址解析的单词。列表的大小在15到90之间。 我打算使用此数据库获取内容相似的网页列表。 我将使用单词字段查询此集合,因此我在该字段上创建了(或开始创建)索引:
db.my_coll.ensureIndex({words: 1})
创建此收藏集需要很长时间。我尝试了两种方法(在笔记本电脑上完成了以下测试): 插入和建立索引插入花费了5.5个小时,这主要是因为cpu会对数据进行密集的预处理。编制索引花费了30个小时。 插入之前建立索引将所有数据插入到集合中需要几天的时间。 我的主要重点是减少生成集合的时间。我不需要复制(至少现在是这样)。查询也不必很快。 现在,是时候提问了: 我只有一台带有一个磁盘的机器可以运行我的应用程序。运行多个数据库实例并在它们之间拆分我的数据有意义吗?     

解决方法

        是的,在单个服务器上分片确实很有意义。 目前,MongoDB仍对每个mongodb服务器使用全局锁。 创建多个服务器将使服务器从彼此的锁中释放。 如果您使用单独的NUMA运行多核计算机,则可以     还可以提高性能。 如果您的服务器负载增加过多,则初始分片将使将来的横向扩展更加容易。您现在最好这样做。 机器各不相同。我建议编写您自己的批量插入基准测试程序,并启动各种数量的MongoDB服务器分片。我有一台16核心RAIDed计算机,我发现3-4个分片对于我的重写数据库似乎是理想的选择。我发现我的两个NUMA是我的瓶颈。     ,        在使用mongodb v3.0.x的现代(2015)中,使用mmap进行了集合级锁定,这会稍微提高写入吞吐量(假设您对多个集合进行写入),但是如果您使用wiredtiger引擎,则会进行文档级锁定,即具有更高的写入吞吐量。这样就无需在单个计算机上进行分片。尽管从技术上讲,您仍然可以通过在一台机器上分片来提高mapReduce的性能,但是在这种情况下,最好使用可以利用多个内核的聚合框架。如果您严重依赖地图缩减算法,那么仅使用诸如Hadoop之类的方法可能最有意义。 分片mongodb的唯一原因是水平缩放。因此,如果一台机器无法容纳足够的磁盘空间,内存或CPU能力(稀有),则分片将变得很有用。我认为确实很少有人拥有足够的数据来分片,即使是大型企业也是如此,尤其是因为wiredtiger添加了压缩支持,可以将磁盘使用量减少80%以上。很少有人使用mongodb大规模执行真正占用大量CPU的查询,因为对此有更好的技术。在大多数情况下,IO是性能中最重要的因素,除非您运行大量复杂的聚合,甚至插入时就对地理空间进行索引,否则查询不会占用大量CPU资源。 您需要分片的最可能原因是,如果您有大量消耗大量RAM的索引,wiredtiger会减少这种情况,但这仍然是最常见的分片原因。在单个计算机上进行分片可能仅会导致不希望的开销,却几乎没有或可能没有任何好处。     ,        这不一定是mongo问题,而是一般的操作系统问题。您的数据库使用可能存在三个瓶颈。 网络(例如,您位于千兆位线上,大部分时间是在高峰时段使用的,但是您的数据库并未真正载入) CPU(您的CPU接近100%,但磁盘和网络几乎没有跳动) 磁碟 如果是网络,请尽可能重写网络协议,否则将其分片到其他计算机。对于CPU,如果您100%使用少数几个内核,而其他内核是免费的,则在同一台计算机上分片将提高性能。如果磁盘被充分利用,则添加更多磁盘并在它们之间进行分片-比添加更多计算机便宜。     ,不,在单个服务器上分片没有任何意义。 有一些例外情况,但它们大多归结为与诸如运行map / reduce或javascript之类的事情相关的并发问题。     ,        副本集教程的第一段对此进行了回答 http://www.mongodb.org/display/DOCS/Replica+Set+Tutorial     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。