您的位置:首页 > 数据库 > Mongodb

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

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

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



一、开启分片集合

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






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






二、写入分片集群

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

在4000上初始化数据:

for(var i = 0; i < 200; i++){db.spreadsheets.insert({"filename": "sheet-"+i,"updatedate": new Date(),"username":"albertshao","data":"abcde"*1000 })}

查看结果:




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



备注:作为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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: