MongoDB中shard key的选择(3)
来源:未知 责任编辑:责任编辑 发表时间:2014-02-18 03:27 点击:次
根据需求的不同,GridFS有几种不同的分片方法。基于预先存在的索引是惯用的分片办法:
1)“files”集合(Collection)不会分片,所有的文件记录都会位于一个分片上,高度推荐使该分片保持高度灵活(至少使用由3个节点构成的replica set)。
2)“chunks”集合(Collection)应该被分片,并且用索引”files_id:1”。已经存在的由MongoDB的驱动来创建的“files_id,n”索引不能用作分片Key(这个是一个分片约束,后续会被修复),所以不得不创建一个独立的”files_id”索引。使用“files_id”作为分片Key的原因是一个特定的文件的所有Chunks都是在相同的分片上,非常安全并且允许运行“filemd5”命令(要求特定的驱动)。
www.2cto.com
运行如下命令:
> db.fs.chunks.ensureIndex({files_id: 1});
> db.runCommand({ shardcollection : "test.fs.chunks", key : { files_id : 1 }})
{ "collectionsharded" : "test.fs.chunks", "ok" : 1 }
由于默认的files_id是一个ObjectId,files_id将会升序增长,因此,GridFS的全部Chunks都会被从一个单点分片上存取。如果写的负载比较高,就需要使用其他的分片Key了,或者使用其它的值(_id)来作为分片Key了。
选择分片Key的需要考虑的因素具有一定的对立性,不可能样样的具备,在实际使用过程中还是需要根据需求的不同来进行权衡,适当放弃一些。没有万能的普适分片办法,需求才是王道。
作者 fly542
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>