首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB只使用四个碎片中的三个

MongoDB只使用四个碎片中的三个
EN

Database Administration用户
提问于 2014-06-14 14:18:20
回答 1查看 142关注 0票数 0

使用MongoDB 2.6,我设置了四个复制集: a、b、c& d:

>rs.conf()

代码语言:javascript
复制
a:PRIMARY> rs.conf()
{
    "_id" : "name_of_replset",
    "version" : 1,
    "members" : [
        {
            "_id" : 0,
            "host" : "fedora_cje:port_number"
        },
        {
            "_id" : 1,
            "host" : "fedora_cje:port_number"
        },
        {
            "_id" : 2,
            "host" : "fedora_cje:port_number"
        }
    ]
}

这些复制集已添加到碎片中。

>sh.status()

代码语言:javascript
复制
 shards:
    {  "_id" : "a",  "host" : "a/fedora_cje:27000,fedora_cje:27001,fedora_cje:27002" }
    {  "_id" : "b",  "host" : "b/fedora_cje:27100,fedora_cje:27101,fedora_cje:27102" }
    {  "_id" : "c",  "host" : "c/fedora_cje:27200,fedora_cje:27201,fedora_cje:27202" }
    {  "_id" : "d",  "host" : "d/fedora_cje:27300,fedora_cje:27301,fedora_cje:27302" }

在sh.status()的底部,我看到了这条消息

代码语言:javascript
复制
{  "_id" : "test",  "partitioned" : false,  "primary" : "d" }
{  "_id" : "test_collection",  "partitioned" : false,  "primary" : "d" }

但是测试和test_collection并不存在于test_cluster数据库中。

插入记录、第四个复制集和第四个碎片显然被忽略。

test_cluster.test_cluster_collection.stats()

代码语言:javascript
复制
"nchunks" : 3,
"shards" : {
    "a" : {...
    "b" : {...
    "c" : {

还请注意,块的数目仍然是3。

我使用默认的/etc/mongod.conf文件。

这是正在使用的insert语句:

代码语言:javascript
复制
>use test_cluster
>t=db.test_cluster.test_sharded_collection
>for( var i=0; i < 20000; i++ ){t.insert( { x:i,y:3,z:"test                       test" } )}

问:为什么第四个复制集,因此第四个碎片在插入过程中被忽略?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2014-06-15 21:22:13

这里有一些令人困惑的部分,首先列出这段sh.status()

代码语言:javascript
复制
{  "_id" : "test",  "partitioned" : false,  "primary" : "d" }
{  "_id" : "test_collection",  "partitioned" : false,  "primary" : "d" }

这意味着有一个测试数据库,一个test_collection数据库,而不是集合。它还表明,它们都不是切分的--这就是"partitioned" : false的意思。

然后显示test_cluster.test_cluster_collection.stats()的一些输出,但这不是sh.status命令中的一个数据库。它是一个来自test_cluster数据库的集合,没有任何迹象表明它是如何分割的,尽管它将在sh.status()中列出。从根本上说,这两条信息之间没有任何关系。

您的for循环也将作为test_cluster的子集合插入到test_sharded_collection中。换句话说,您要插入的完整名称空间是test_cluster.test_cluster.test_sharded_collection,我怀疑这不是切分的,这就是为什么您可能看不到块增加的原因。我怀疑您打算做的是插入到test_cluster.test_sharded_collection中。在插入时尝试这样做:

代码语言:javascript
复制
use test_cluster;
for( var i=0; i < 20000; i++ ){db.test_sharded_collection.insert( { x:i,y:3,z:"test                       test" } )};

sh.status()的全部输出,特别是关于test_sharded_collection的部分,将帮助我确认我的怀疑。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/68246

复制
相关文章

相似问题

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