步骤:
1,对数据库enableSharding
shell进入mongos节点,use admin库
执行 db.runCommand( { enablesharding : "xx库" } );或 sh.enableSharding()这一步是对数据库启用分片能力,同一个库的不同collection会分布到不同shard上
但是一个collection只会存在于一个shard上
2,对集合开启分片
在开启了数据库分片之后,可以开始集合分片
还是要在admin库下执行
db.runCommand( { shardcollection : "xx库.xx集合",key : {files_id: 1} } )有如下参数:
{ shardCollection: "<database>.<collection>", key: <shardkey>, unique: <boolean>, numInitialChunks: <integer>, collation: { locale: "simple" }, writeConcern: <document>}key :分片的片键。参数是个document。
{索引字段:1或-1或hashed}
索引要在开启分片前建好。虽然mongo说如果是空库,开启分片时会自动创建不存在的索引,但还是建议你事前手动创建好。
说明:索引字段最好是在空库的时候就建好。数据量很大的时候新建索引一定要小心,第一找业务不忙的时候做,第二千万别忘了加background参数
1:升序,-1降序,hashed:哈希分布
mongo根据这个片键把documents划分到一个个chunks(块)中
最终是这些chunks在mongo各分片间均衡分配
所以说片键的选择和chunks的分配有直接的关系
另外注意:一旦对collection执行了分片,这个片键的值就不可改了。也就是说分片策略就完全固定下来了
unique:唯一性限制,默认是false。如果是hashed片键,不支持unique
如果将unique值为true,意味着:
1,对于还没有分片的集合,如果这个集合有其他的unique索引,那么这个集合将不能进行分片
2,对于已经分片的集合,你不能在这个集合上创建其他的unique索引
numInitialChunks:在片键策略是hashed时有效。就是让mongo初始化创建好多少个chunks,然后进行均衡