我正在记录有关 GridFS 以及在不同机器之间分片的可能性。
阅读此处的文档,建议的分片键是 chunks.files_id。此键将链接到文件集合的 _id,因此此 _id 是增量的。我保存在网格中的每个新文件都会有一个新的增量_id。
在 O'Reilly “Scaling MongoDB”一书中,不鼓励使用增量分片键以避免热点(最后一个分片将接收所有写入和读取)。
您对 GridFS 集合进行分片的建议是什么?
有人遇到过热点问题吗?
谢谢你。
您应该继续分files_id
片以将文件块保持在一起,但您是正确的,这将创建一个热点。如果可以,请在fs.files_id
集合中为s使用 ObjectId 以外的其他内容(可能 MD5s 会比 ObjectIds 更好)。
我们将为分片添加散列,这将解决这个问题,但至少要等到 2.0。
您可以对 gridfs 数据进行分片,因为 gridfs 它只是两个集合:块和文件。而 gridfs 对它进行分片是非常有用和伟大的事情。关于 gridfs 分片键,选择随机或增量分片键总是不好的,因为数据不会在分片之间均匀分布。在增量分片键的情况下,所有写入都转到最后一个分片并且它增长并且一旦之间的差异变为 10 或更多块,平衡器将数据移动到另一个分片。将数据移动到另一个分片总是很困难的任务,应该尽可能避免。
因此,当您选择分片键时,您应该关心数据的均匀分布。
此外,如果你运气好,“ Scaling MongoDB ”的作者kristina(片键方面的伟大专家)会回答你的问题。
文档说,在常见情况下,您应该选择默认索引fileId:1,n:1
作为分片键:
GridFS 可以通过不同的方式进行分片,具体取决于需要。基于预先存在的索引进行分片的一种常见方法是:
“文件”集合不分片。所有文件记录都将存在于 1 个分片中。强烈建议使该分片非常有弹性(至少 3 个节点副本集)“块”集合使用现有索引“files_id:1,n:1”进行分片。范围末尾的一些文件可能会将它们的块拆分到分片中,但大多数文件将完全包含在同一个分片中。
目前 MongoDB 1.8.1 版本仅支持对“file_id”字段进行分片,因为使用 md5 来验证上传,但它还不能跨分片工作。因此,您不能跨分片拆分单个文件。 在 google 组7上回答