翻译或纠错本页面
对GridFS数据进行分片¶
在对 GridFS 存储进行分片时,需要注意以下的情况:
files 集合¶
大多数情况下不需要对 files 集合进行分片,这个集合通常很小,只包含了一些元信息.集合中也没有合适的片键可以将数据均衡地分布在集群中.如果你 必须 对 files 进行分片,可以使用 _id 字段与应用相关的字段做复合片键.
不将``files`` 分片意味着所有文件的元信息都存储在一个分片上,在生产环境中, 必须 在存储了 files 的分片上使用复制集.
chunks 集合¶
用以下命令使用 { files_id : 1 , n : 1 } 做片键为 chunks 集合分片:
db.fs.chunks.createIndex( { files_id : 1 , n : 1 } )
db.runCommand( { shardCollection : "test.fs.chunks" , key : { files_id : 1 , n : 1 } } )
也可以像这样只使用 file_id 字段进行分片:
db.runCommand( { shardCollection : "test.fs.chunks" , key : { files_id : 1 } } )
重要
在GridFS存储中,对 chunks 集合进行分片时, 只有 两个片键可以选择,``{ files_id : 1 , n : 1 }`` 与 { files_id : 1 } .
默认的 files_id 是 ObjectId , ObjectId 是递增的,因此所有新写入的数据都会存储到一个单独的分片中,如果这个分片的写负载太大,考虑换一个片键或者在 files 集合中使用不同的 _id 值.