20

我正在记录有关 GridFS 以及在不同机器之间分片的可能性。

阅读此处的文档,建议的分片键是 chunks.files_id。此键将链接到文件集合的 _id,因此此 _id 是增量的。我保存在网格中的每个新文件都会有一个新的增量_id。

在 O'Reilly “Scaling MongoDB”一书中,不鼓励使用增量分片键以避免热点(最后一个分片将接收所有写入和读取)。

您对 GridFS 集合进行分片的建议是什么?
有人遇到过热点问题吗?

谢谢你。

4

3 回答 3

17

您应该继续分files_id片以将文件块保持在一起,但您是正确的,这将创建一个热点。如果可以,请在fs.files_id集合中为s使用 ObjectId 以外的其他内容(可能 MD5s 会比 ObjectIds 更好)。

我们将为分片添加散列,这将解决这个问题,但至少要等到 2.0。

于 2011-03-17T22:55:12.740 回答
5

您可以对 gridfs 数据进行分片,因为 gridfs 它只是两个集合:块和文件。而 gridfs 对它进行分片是非常有用和伟大的事情。关于 gridfs 分片键,选择随机或增量分片键总是不好的,因为数据不会在分片之间均匀分布。在增量分片键的情况下,所有写入都转到最后一个分片并且它增长并且一旦之间的差异变为 10 或更多块,平衡器将数据移动到另一个分片。将数据移动到另一个分片总是很困难的任务,应该尽可能避免。
因此,当您选择分片键时,您应该关心数据的均匀分布。
此外,如果你运气好,“ Scaling MongoDB ”的作者kristina(片键方面的伟大专家)会回答你的问题。
文档说,在常见情况下,您应该选择默认索引fileId:1,n:1作为分片键:

GridFS 可以通过不同的方式进行分片,具体取决于需要。基于预先存在的索引进行分片的一种常见方法是:

“文件”集合不分片。所有文件记录都将存在于 1 个分片中。强烈建议使该分片非常有弹性(至少 3 个节点副本集)“块”集合使用现有索引“files_id:1,n:1”进行分片。范围末尾的一些文件可能会将它们的块拆分到分片中,但大多数文件将完全包含在同一个分片中。

于 2011-03-17T21:38:56.643 回答
0

目前 MongoDB 1.8.1 版本仅支持对“file_id”字段进行分片,因为使用 md5 来验证上传,但它还不能跨分片工作。因此,您不能跨分片拆分单个文件。 在 google 组7上回答

于 2011-05-05T16:03:11.670 回答