首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB标记范围不工作

MongoDB标记范围不工作
EN

Stack Overflow用户
提问于 2014-11-24 12:11:34
回答 1查看 886关注 0票数 1

我的MongoDB有点问题。这是我的配置:

代码语言:javascript
复制
mongos> sh.status()
    --- Sharding Status --- 
      sharding version: {
            "_id" : 1,
            "version" : 4,
            "minCompatibleVersion" : 4,
            "currentVersion" : 5,
            "clusterId" : ObjectId("546f2d9c37d2895f3b8f9ec1")
    }
      shards:
            {  "_id" : "site_A_shard_1",  "host" : "site_A_shard_1/<HOST1>:27510,<HOST2>:27511",  "tags" : [ "site_A" ] }
            {  "_id" : "site_A_shard_2",  "host" : "site_A_shard_2/<HOST2>:27521,<HOST1>:27520",  "tags" : [ "site_A" ] }
            {  "_id" : "site_B_shard_1",  "host" : "site_B_shard_1/<HOST3>:27510,<HOST4>:27511",  "tags" : [ "site_B" ] }
            {  "_id" : "site_B_shard_2",  "host" : "site_B_shard_2/<HOST4>:27521,<HOST3>:27520",  "tags" : [ "site_B" ] }
      databases:
            {  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }
            {  "_id" : "test",  "partitioned" : false,  "primary" : "site_B_shard_1" }
            {  "_id" : "ocs",  "partitioned" : true,  "primary" : "site_B_shard_1" }
                    ocs.adrs_queue
                            shard key: { "shard.target" : 1, "shard.key" : 1 }
                            { "shard.target" : { "$minKey" : 1 }, "shard.key" : { "$minKey" : 1 } } -->> { "shard.target" : { "$maxKey" : 1 }, "shard.key" : { "$maxKey" : 1 } } on : site_B_shard_1 Timestamp(1, 0) 
                             tag: site_A  { "shard" : { "target" : "siteA", "key" : { "$minKey" : 1 } } } -->> { "shard" : { "target" : "siteA", "key" : { "$maxKey" : 1 } } }
                             tag: site_B  { "shard" : { "target" : "siteB", "key" : { "$minKey" : 1 } } } -->> { "shard" : { "target" : "siteB", "key" : { "$maxKey" : 1 } } }
                    ocs.ldrs
                            shard key: { "shard.target" : 1, "shard.key" : 1 }
                            { "shard.target" : { "$minKey" : 1 }, "shard.key" : { "$minKey" : 1 } } -->> { "shard.target" : { "$maxKey" : 1 }, "shard.key" : { "$maxKey" : 1 } } on : site_B_shard_1 Timestamp(1, 0) 
                             tag: site_A  { "shard" : { "target" : "siteA", "key" : { "$minKey" : 1 } } } -->> { "shard" : { "target" : "siteA", "key" : { "$maxKey" : 1 } } }
                             tag: site_B  { "shard" : { "target" : "siteB", "key" : { "$minKey" : 1 } } } -->> { "shard" : { "target" : "siteB", "key" : { "$maxKey" : 1 } } }
                    ocs.notifs_queue
                            shard key: { "shard.target" : 1, "shard.key" : 1 }
                            { "shard.target" : { "$minKey" : 1 }, "shard.key" : { "$minKey" : 1 } } -->> { "shard.target" : { "$maxKey" : 1 }, "shard.key" : { "$maxKey" : 1 } } on : site_B_shard_1 Timestamp(1, 0) 
                             tag: site_A  { "shard" : { "target" : "siteA", "key" : { "$minKey" : 1 } } } -->> { "shard" : { "target" : "siteA", "key" : { "$maxKey" : 1 } } }
                             tag: site_B  { "shard" : { "target" : "siteB", "key" : { "$minKey" : 1 } } } -->> { "shard" : { "target" : "siteB", "key" : { "$maxKey" : 1 } } }
                    ocs.ss_queue
                            shard key: { "shard.target" : 1, "shard.key" : 1 }
                            { "shard.target" : { "$minKey" : 1 }, "shard.key" : { "$minKey" : 1 } } -->> { "shard.target" : { "$maxKey" : 1 }, "shard.key" : { "$maxKey" : 1 } } on : site_B_shard_1 Timestamp(1, 0) 
                             tag: site_A  { "shard" : { "target" : "siteA", "key" : { "$minKey" : 1 } } } -->> { "shard" : { "target" : "siteA", "key" : { "$maxKey" : 1 } } }
                             tag: site_B  { "shard" : { "target" : "siteB", "key" : { "$minKey" : 1 } } } -->> { "shard" : { "target" : "siteB", "key" : { "$maxKey" : 1 } } }

在配置标记范围时,它似乎不起作用。每次我尝试插入一些信息时,它都会存储在同一个碎片(site_B_shard_1)中,即使相关的标记是site_A。

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-24 13:22:51

看起来,您试图跨两个碎片分发单个集合,但定义了重叠的碎片标签范围,其中site_Asite_B包含整个shard.target键值(minkey .. maxkey):

代码语言:javascript
复制
tag: site_A  {
    "shard" : {
        "target" : "siteA",
        "key" : { "$minKey" : 1 }
    }
} -->> {
    "shard" : {
        "target" : "siteA",
        "key" : { "$maxKey" : 1 }
    }
}

tag: site_B  {
    "shard" : {
        "target" : "siteB",
        "key" : { "$minKey" : 1 }
    }
} -->> {
    "shard" : {
        "target" : "siteB",
        "key" : { "$maxKey" : 1 }
    }
}

如果要使用标记感知切分在集合中分发数据,则需要定义范围,其中下限是包含的,上限是独占的,例如:

sh.addTagRange('ocs.adrs_queue',{"shard.target":MinKey},{"shard.target":"site_A"},'site_A') sh.addTagRange('ocs.adrs_queue',{"shard.target":"site_A"},{"shard.target":"site_B"},'site_A') sh.addTagRange('ocs.adrs_queue',{"shard.target":"site_B"},{"shard.target":MaxKey},'site_B')

在这一设置中:

  • 应该将具有匹配shard.target值的site_Asite_B的文档分发到匹配的碎片中
  • shard.target值小于site_A的文档也将在site_A碎片上分发。
  • shard.target值大于site_B的文档将在site_B碎片上分发

有关标记感知切分和多数据中心部署的更多示例,请参见:

  • 如何平衡共享群集的集合
  • MongoDB中的分层存储模型:优化延迟和成本
  • 关于多直流部署的MongoDB白皮书
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27104601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档