MongoDB分片测试
分片是mongoDB扩展的一种方式。分片分割一个collection并将不同的部分存储在不同的机器上。当一个数据库的collections相对于当前空间过大时,你需要增加一个新的机器。分片会自动的将collection数据分发到新的服务器上。
1.连接到mongos可查看系统相关信息
configsvr>showdbs configsvr>useconfig configsvr>showcollections onfigsvr>db.mongos.find() {"_id":"racdb:28885","ping":ISODate("2016-03-21T09:23:05.106Z"),"up":NumberLong(1436),"waiting":true,"mongoVersion":"3.2.3"} {"_id":"host8.localdomain:28885","ping":ISODate("2016-03-21T09:23:07.960Z"),"up":NumberLong(1427),"waiting":true,"mongoVersion":"3.2.3"} {"_id":"host9.localdomain:28885","ping":ISODate("2016-03-21T09:23:03.521Z"),"up":NumberLong(1407),"waiting":true,"mongoVersion":"3.2.3"} configsvr>db.shards.find() {"_id":"shard1","host":"shard1/host8:28017,racdb:28017"} {"_id":"shard2","host":"shard2/host8:28018,racdb:28018"} configsvr>db.databases.find() {"_id":"im_offline_msg","primary":"shard1","partitioned":true} {"_id":"testdb","primary":"shard2","partitioned":true} {"_id":"test","primary":"shard1","partitioned":true} {"_id":"blogdb","primary":"shard2","partitioned":false}
2.对数据库启用分片
2.1当前可连接到mongos查看数据库或者集合的分片情况(没有分片):
mongos>db.stats() mongos>db.tab.stats()
2.2对数据库激活分片功能:
#mongoracdb:28885 mongos>sh.enableSharding("test") #或者 #mongoracdb:28885 mongos>useadmin mongos>db.runCommand({enableSharding:"blogdb"})
2.3此时查看数据库分区情况,partitioned变为“true”。
configsvr>useconfig switchedtodbconfig configsvr>db.databases.find() {"_id":"im_offline_msg","primary":"shard1","partitioned":true} {"_id":"testdb","primary":"shard2","partitioned":true} {"_id":"test","primary":"shard1","partitioned":true} {"_id":"blogdb","primary":"shard2","partitioned":true}
启用数据库分片并没有将数据进行分开,还需要对collection进行分片。
3.对集合启用分片
启用前,有几个问题需要考虑的:
选择哪个键列作为shardkey。(更多参考:ConsiderationsforSelectingShardKeys)
如果集合中已经存在数据,在选定作为shardkey的键列必须创建索引;如果集合为空,mongodb将在激活集合分片(sh.shardCollection)时创建索引。
集合分片函数sh.shardCollection,
sh.shardCollection(".",shard-key-pattern)
mongos>sh.shardCollection("test.tab",{"_id":"hashed"})
测试插入数据:
--使用python命令 #创建python文件 $vibatch_insert.py #-*-coding:UTF-8-*- importpymongo client=pymongo.MongoClient("racdb",28885) db=client.testdb #查看testdb数据库中集合信息 print(db.collection_names()) #连接到my_collection集合 print(db.my_collection) #清空my_collection集合文档信息 db.my_collection.remove() #显示my_collection集合中文档数目 print(db.my_collection.find().count()) #插入10000条文档信息 foriinrange(10000): db.my_collection.insert({"id":i,"name":"Licz"}) #显示my_collection集合中文档数目 print('插入完毕,当前文档数目:') print(db.my_collection.find().count()) #执行插入 [mongod@racdb~]$python2.7.3batch_insert.py [u'system.indexes',u'table1',u'my_collection'] Collection(Database(MongoClient(host=['racdb:28885'],document_class=dict,tz_aware=False,connect=True),u'testdb'),u'my_collection') 0
插入完毕,当前文档数目:
10000 #或是用mongoshell插入测试数据 for(vari=1;i<=100000;i++){ db.cc.insert({"id":i,"myName":"cc"+i,"myDate":newDate()}); }
启用集合分片
mongos>showcollections mongos>db.cc.find() mongos>db.cc.createIndex({"id":"hashed"}) mongos>db.cc.getIndexes() mongos>sh.shardCollection("testdb.cc",{"id":"hashed"}) mongos>db.stats() mongos>db.cc.stats() --查看sharding状态 mongos>db.printShardingStatus();
以上内容是小编给大家介绍的MongoDB分片测试,希望对大家有所帮助!