欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

【MongoDB】在windows平台下mongodb的分片集群(三)

程序员文章站 2022-05-08 09:41:49
...

在上两篇博客中我们分别阐述了分片集群的工作原理以及搭建过程。在本篇博客中我们主要一起分析分片集群的测试结果; 首先看分片集群的各个状态,可以看的出复制集A和B都是正常的: 一、开启分片集合 开启一个数据库上的分片,这是对任何集合进行分片的先决条

在上两篇博客中我们分别阐述了分片集群的工作原理以及搭建过程。在本篇博客中我们主要一起分析分片集群的测试结果;

首先看分片集群的各个状态,可以看的出复制集A和B都是正常的:

【MongoDB】在windows平台下mongodb的分片集群(三)

一、开启分片集合

开启一个数据库上的分片,这是对任何集合进行分片的先决条件。 假设测试数据库为slidetest.

【MongoDB】在windows平台下mongodb的分片集群(三)【MongoDB】在windows平台下mongodb的分片集群(三)

分片集合定义注意:它看起来和索引定义有几分相似之处,尤其是有那个unique键。在对一个空集合进行分片时候,mongodb会在每个分片上创建一个与分片对应的索引。可以直接连上分片,运行getIndexs()进行验证。可以登陆到3000进行查看。

【MongoDB】在windows平台下mongodb的分片集群(三)

二、写入分片集群

一旦完成集合的分片,分片集群就准备就绪了。现在可以向集群写入数据,数据将分布到各个分片上。

在4000上初始化数据:

for(var i = 0; i

查看结果:

【MongoDB】在windows平台下mongodb的分片集群(三)

接下来我们检查整个块发生了什么,可以看到有两块,并且他们的最大值不一样。

【MongoDB】在windows平台下mongodb的分片集群(三)

备注:作为BSON类型的边界,$minKey和$maxkey常用于比较操作之中。$minkey总是小雨所有BSON类型,而$maxKey总是大于所有BSON类型。。 MongoDB使用这两个类型来比较块的端点

继续插入数据,假设插入20万条记录,

mongos> sh.status()
--- Sharding Status ---
  sharding version: {
        "_id" : 1,
        "version" : 4,
        "minCompatibleVersion" : 4,
        "currentVersion" : 5,
        "clusterId" : ObjectId("545d9af5340aec0c2272afda")
}
  shards:
        {  "_id" : "shard-a",  "host" : "shard-a/WIN--20141018KO:3000,WIN--20141018KO:3001" }
        {  "_id" : "shard-b",  "host" : "shard-b/WIN--20141018KO:30100,WIN--20141018KO:30101" }
  databases:
        {  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }
        {  "_id" : "slidetest",  "partitioned" : true,  "primary" : "shard-a" }
                slidetest.spreadsheets
                        shard key: { "username" : 1, "_id" : 1 }
                        chunks:
                                shard-b 1
                                shard-a 2
                        { "username" : { "$minKey" : 1 }, "_id" : { "$minKey" : 1 } } -->> { "username" : "albertshao", "_id" : ObjectId("545df80537216b1577de0251") } on : shard-b Timestamp(2, 0)
                        { "username" : "albertshao", "_id" : ObjectId("545df80537216b1577de0251") } -->> { "username" : "albertshao", "_id" : ObjectId("545e062437216b1577de1802") } on : shard-a Timestamp(2, 2)
                        { "username" : "albertshao", "_id" : ObjectId("545e062437216b1577de1802") } -->> { "username" : { "$maxKey" : 1 }, "_id" : { "$maxKey" : 1 } } on : shard-a Timestamp(2, 3)

mongos>
通过上面可以看的出,是利用usename作为块划分键。同时也可以看的出上面总有3块,其中shard-a有两块,shard-b有一块。

我们通过changelog可以看到数据库的迁移:

mongos> db.changelog.count({what:"split"})
2
mongos> db.changelog.count({what:"moveChunk.commit"}).count()
2014-11-08T20:12:09.618+0800 TypeError: Object 1 has no method 'count'
mongos> db.changelog.find({what:"moveChunk.commit"}).count()
1
mongos> db.changelog.find({what:"moveChunk.commit"})
{ "_id" : "WIN--20141018KO-2014-11-08T11:01:40-545df8141603dfc967d0fdcd", "server" : "WIN--20141018KO", "clientAddr" : "127.0.0.1:50644", "time" : ISODate("2014-11-08T11:01:40.826Z"), "what" : "moveChunk.commit", "ns" : "slidetest.spreadsheets", "details" : { "min" : { "username" : { "$minKey" : 1 }, "_id" : { "$minKey" : 1 } }, "max" : { "username" : "albertshao", "_id" : ObjectId("545df80537216b1577de0251") }, "from" : "shard-a", "to" : "shard-b", "cloned" : NumberLong(0), "clonedBytes" : NumberLong(0), "catchup" : NumberLong(0), "steady" : NumberLong(0) } }
mongos>