今天讲的是分片技术.当然我们首先得了解什么是分片技术,以下几个网址大致说明了分片的技术概念,其中有一篇还包括了数据库分片(sharding)和数据库分区(Partition)的区别,大家可以先了解下.
http://blog.sina.com.cn/s/blog_541896910100n81d.html
http://blog.csdn.net/galaft/article/details/4059792
http://hi.baidu.com/1babyo/item/236ece6ef25880106995e67f
MongoDB分片技术也是一种集群,即Sharding Cluster.
要构建一个 MongoDB Sharding Cluster,需要三种角色:
Shard Server: mongod 实例,用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个relica set承担,防止主机单点故障
Config Server: mongod 实例,存储了整个 Cluster Metadata,其中包括 chunk 信息。
Route Server: mongos 实例,前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。
Sharding架构图:
下面看下具体操作.
1:开启config服务器
先前也说了,mongos要把mongod之间的配置放到config服务器里面,首先开启它,我这里就建立7777端口。
2: 开启mongos服务器
命令:mongos --dbpath C:\MongoDB --port 27017 --configdb=127.0.0.1:7777
这里要注意的是我们开启的是mongos,不是mongod,同时指定下config服务器,默认端口27017。
3:启动mongod服务器
对分片来说,也就是要添加片了,这里开启E,F盘的mongodb,端口为:2222,3333。
4: 服务配置
<1> 加入shards,如这里shard是单台服务器,用db.runCommand( { addshard : "<serverhostname>[:<port>]" } )
<2> 激活数据库分片
命令:db.runCommand( { enablesharding : "<dbname>" } );
<3> collection分片
要使单个collection也分片存储,需要给collection指定一个分片key
命令:db.runCommand( { shardcollection : "<namespace>",key : <shardkeypatternobject> });
<4> 查看效果
好了,至此我们的分片操作全部结束,接下来我们通过mongos向mongodb插入10w记录,然后通过printShardingStatus命令
查看mongodb的数据分片情况。
这里主要看三点信息:
① shards: 我们清楚的看到已经别分为两个片了,shard0000和shard0001。
② databases: 这里有个partitioned字段表示是否分区,这里清楚的看到test已经分区。
③ chunks: 这个很有意思,我们发现集合被砍成3段,分区情况为:2:1.
另外注意use test这个命令,如果不写,后面也会出现意想不到的问题.