草庐IT

Mongodb 不分片

coder 2023-10-31 原文

我们尝试在 3 个副本集(rs1、rs2、rs3)中对 mongodb 2.4.9 中的大型集合进行分片。目前,所有数据都驻留在rs1上。

我们有 3 个配置服务器正在运行并使用以下方式启用分片:

sh.enableSharding("test")

然后我们选择一个分片键并分片一个集合:

sh.shardCollection("test.fs.chunks", { files_id : 1 , n : 1 } )   

之后我们添加了额外的分片:

sh.addShard( "rs2/mongo2:27017" )

sh.addShard( "rs3/mongo3:27017" )

但是 - 4 天后,所有数据仍然驻留在 rs1 上。查看配置,我们正在分片的数据库列为“partitioned = true”:

{  "_id" : "test",  "partitioned" : true,  "primary" : "rs1" }

但是,当我们执行 db.fs.chunks.getShardDistribution() 时,会出现一个错误,指出集合未分片:

mongos> db.fs.chunks.getShardDistribution()
Collection test.fs.chunks is not sharded.

然后我们尝试重新执行 shardCollection 命令并收到一个错误,指出它已经分片:

mongos> sh.shardCollection("test.fs.chunks", { files_id : 1 , n : 1 } )

"code" : 13449,

"ok" : 0,

"errmsg" : "exception: collection test.fs.chunks already sharded with 33463 chunks"

所有 3 个配置服务器都在运行。 mongos 日志包含一系列平衡器分布式锁获取/解锁消息,但没有其他值得注意的。

有没有人对我们如何进一步解决这个问题并进行一些分片有任何建议?

谢谢

戴夫

最佳答案

我在集合中遇到了类似的问题,但我使用以下命令修复了它:

http://docs.mongodb.org/manual/reference/command/splitChunk/

我 100% 确定这不是您应该做的,但确实有效!

实际上,另一种想法是创建一个只有一条记录的新集合,对其进行分片,然后将另一个集合中的所有记录插入其中。

我有一个集合,每个记录都在一个 block 中。使用 sh.status() 找出最大的 block 。

然后使用:

db.adminCommand({split:<database>.<collection>,find:{<database>.<collection>._id:<any doc in the shard>}});

这会在中点拆分块。有趣的是,Mongodb 的分块过程随后做了一些进一步的拆分,但仍然需要一些重写才能将 block 放入正确的大小。

关于Mongodb 不分片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21979544/

有关Mongodb 不分片的更多相关文章

  1. ruby-on-rails - 在一个 Rails 应用程序中使用 PostgreSQL 的 MongoDB - 2

    我可以在一个Rails应用程序中同时使用MongoDB和PostgreSQL吗?具体来说,我最终会想要使用像MongoHQ这样的东西。到目前为止,我未能在实验中进行这项工作。令我担心的是,MongoDB文档特别指出我必须禁用ActiveRecord。任何建议将不胜感激。 最佳答案 您无需禁用ActiveRecord即可使用MongoDB。查看Mongoid只需将gem加上任何模型与您现有的任何ActiveRecord模型一起添加。您应该注意到MongoHQ只是MongoDB的托管服务,可以与任何对象文档映射器(ODM)一起使用。更多

  2. ruby - 使用 mongodb/mongoid 运行时更改模型 - 2

    我必须在mongoid模型中添加几个字段,我知道MongoDB没有迁移,但如果我继续而不删除数据库,使rails完全“重新生成”数据库,它不会显示或使用新的领域!去这里最好的方法是什么?有比删除/重新打开mongodb更软的东西吗?提前致谢卢卡 最佳答案 一般来说,应该可以在运行时用新字段更新旧文档。MongoDB中不需要迁移。您可能想编写rake任务以使用新字段和默认值更新旧文档。您可以通过检查那些默认值为nil的新字段来找到这些文档。更新简单风格:如果您使用默认值定义一个新字段,只要您设置了一个新值,就应该始终使用该值:应用程序

  3. ruby-on-rails - 我如何从 Ruby 代码连接到 mongodb? - 2

    我如何从Ruby代码连接到mongodb? 最佳答案 首先,您必须安装MongoDbgem:geminstallmongo然后运行代码:require'rubygems'#notnecessaryforRuby1.9require'mongo'db=Mongo::Connection.new.db("mydb")#ORdb=Mongo::Connection.new("localhost").db("mydb")#ORdb=Mongo::Connection.new("localhost",27017).db("mydb")

  4. ruby - MongoDB:无法从 BSON 类型 EOO 转换为 Date - 2

    我正在尝试使用聚合框架(使用ruby​​)并像这样投影日期:db['requests'].aggregate([{"$project"=>{_id:0,method:'$method',user:'$user',year:{'$year'=>'$timestamp'}}}])文档是这样的:{_id:ObjectId("5177d7d7df26358289da7dfd"),timestamp:ISODate("2013-04-12T03:58:05+00:00"),method:"POST",status:"200",inputsize:"874",outputsize:"4981",u

  5. ruby - 在 Ruby 中从 MongoDB 中检索字段的子集 - 2

    我试图通过在Ruby中进行的查询从MongoDB获取字段的子集,但它似乎不起作用。它不返回任何结果这是ruby代码:coll.find("title"=>'Halo',:fields=>["title","isrc"])#thisdoesn'twork如果我删除字段散列,它会工作,返回包含所有字段的结果coll.find("title"=>'Halo')#thisworks查看mongodb控制台,第一个查询在mongodb服务器上结束,如下所示:{title:"Halo",fields:["title","isrc"]}如果我尝试从mongo客户端控制台进行查询,它会工作,我会得到结

  6. ruby - ruby 中的正则表达式 - 我可以在不分组的情况下使用括号吗? - 2

    我有一个正则表达式:/(somethingcomplexandboring)?(somethingcomplexandinteresting)/我对第二个括号的内容感兴趣;第一个只是为了确保正确匹配(因为无聊的部分可能存在也可能不存在,但如果存在,我会意外地将它与有趣部分的正则表达式匹配)。所以我可以使用$2访问第二个匹配项。但是,为了与我正在使用的其他正则表达式保持一致,我希望$1以某种方式包含第二个括号的内容。可能吗? 最佳答案 使用非捕获组:r=/(?:ab)?(cd)/ 关于ru

  7. Elasticsearch和MongoDB对比 - 2

    文章目录Elasticsearch和MongoDB对比关于ElasticsearchElasticsearch应用场景关于MongoDBMongoDB优点mongodb适用场景Elasticsearch和MongoDB对比Elasticsearch和MongoDB开源许可协议参考Elasticsearch和MongoDB对比关于Elasticsearch官网:https://www.elastic.co/cn/elasticsearch/Elasticistheleadingplatformforsearch-poweredsolutions.Weaccelerateresultsthatma

  8. javascript - 类型错误 : mongodb property insertmany is not a function - 2

    db.col.insertMany([{"_id":"tt0084726","title":"StarTrekII:TheWrathofKhan","year":1982,"type":"movie"},{"_id":"tt0796366","title":"StarTrek","year":2009,"type":"movie"},{"_id":"tt0084726","title":"StarTrekII:TheWrathofKhan","year":1982,"type":"movie"}]);OS:LinuxMint17.3RosaMongoDB:dbversionv2.6.1

  9. javascript - 如何使用 javascript 中的 http.post 将图像发送到服务器并在 mongodb 中存储 base64 - 2

    我在使用mongodb在服务器端存储图像的客户端访问http请求时遇到了问题。我非常感谢帮助。我需要一个简单的示例来说明如何将图像文件作为数据添加到httppost请求(例如XMLhttprequest)中。比方说,我知道服务器方法的网址。图片来源定义在imgsrc文件名存放在name我有这个自动取款机:varhttp=newXMLHttpRequest();httpPost.onreadystatechange=function(err){if(httpPost.readyState==4&&httpPost.status==200){console.log(httpPost.res

  10. 【MongoDB】windows安装MongoDB6.0.5+可视化界面软件 - 2

    目录MongoDB简介安装MongoDB  安装MongoDBShell添加账户密码 安装MongoDBCompassMongoDB简介MongoDB是一个流行的开源文档型NoSQL数据库管理系统,使用C++语言编写。与传统的关系型数据库不同,MongoDB使用文档模型来存储数据。文档模型是一种灵活的数据模型,它允许您在单个文档中存储和查询相关数据。文档模型还支持嵌套文档和数组结构,这使得它非常适合处理复杂的数据结构。MongoDB的特点包括:非常灵活的文档模型,可以轻松存储复杂数据类型。分布式系统设计,可以通过分片技术实现横向扩展,适合大规模数据处理。支持丰富的查询语言和聚合框架,使得开发人

随机推荐