技术开发 频道

基于MongoDB进行分布式数据存储的步骤

  在完成自动sharding之后,可以使用mongo看一下结果:

  > use dnt_mongodb

  switched
to db dnt_mongodb

  
> show collections

  posts1

  system.indexes

  
> db.posts1.stats()

  {

  
"sharded" : true,

  
"ns" : "dnt_mongodb.posts1",

  
"count" : 161531,

  
"size" : 195882316,

  
"avgObjSize" : 1212.6608267143768,

  
"storageSize" : 231467776,

  
"nindexes" : 1,

  
"nchunks" : 5,

  
"shards" : {

  
"shard0000" : {

  
"ns" : "dnt_mongodb.posts1",

  
"count" : 62434,

  
"size" : 54525632,

  
"avgObjSize" : 873.3323509626165,

  
"storageSize" : 65217024,

  
"numExtents" : 10,

  
"nindexes" : 1,

  
"lastExtentSize" : 17394176,

  
"paddingFactor" : 1,

  
"flags" : 1,

  
"totalIndexSize" : 2179072,

  
"indexSizes" : {

  
"_id_" : 2179072

  },

  
"ok" : 1

  },

  
"shard0001" : {

  
"ns" : "dnt_mongodb.posts1",

  
"count" : 99097,

  
"size" : 141356684,

  
"avgObjSize" : 1426.4476623913943,

  
"storageSize" : 166250752,

  
"numExtents" : 12,

  
"nindexes" : 1,

  
"lastExtentSize" : 37473024,

  
"paddingFactor" : 1,

  
"flags" : 1,

  
"totalIndexSize" : 3424256,

  
"indexSizes" : {

  
"_id_" : 3424256

  },

  
"ok" : 1

  }

  },

  
"ok" : 1

  }

  通过上面的结果,可以出现16万条记录均分在了两个sharding上,其中shard0000中有62434条,shard0001中有99097条。下面看一下这两个sharding-chunk的分布情况(图中的错误提示‘输入字符串格式不正确’主要因为运行环境与编译程序使用的环境不同,一个是64,一个是32位系统):

基于MongoDB进行分布式数据存储(1)

  可以看到数据被按区间自动分割开了,有点像sqlserver的数据分区表,只不过这是自动完成的(目前我没找到可以手工指定区间上下限的方式,如有知道的TX可以跟我说一下)。当然在本文中的测试中,共有5个chunk,其中4个位于shard0001,这种情况可以在每次测试过程中会发生变化,包括两个sharding被分配的记录数。另外就是在mongodb移动过程前后会在shard0000上生成一个文件夹,里面包括一些bson文件,名字形如(表格+日期等信息):

  post-cleanup.2010-09-07T04-13-31.1.bson

  该文件主要包括一些数据库,表结构及相关记录等信息,我想应该是用于数据恢复备份的。

0
相关文章