0

我们目前正在实施一个解决方案,其中我们有一个要根据以下字段分片的集合:

年份 (INT)

月 (INT)

我们预计每年为收集生成大约 2GB 的数据。

4

1 回答 1

6

如果你不介意我问,你为什么要考虑分片?2GB 应该很容易适应单个服务器。

话虽这么说,如果您肯定要对您的集合进行分片,那么选择一个足够细粒度的非增量分片键非常重要,这样就永远不会出现无法拆分块的情况。

例如,如果仅按 Month 拆分集合,则可能只有 12 个块。如果一月是插入的热门月份,则可能会出现这样的情况,即一百万条(只是为了选择任意大的数字)记录可以插入到该块中,并且永远无法拆分。

同样重要的是不要选择递增(或递减)的分片键。随着新文档被插入到集合中,每个后续文档将被添加到同一个块中,直到该块达到其大小限制并且必须拆分。然后可以将较低的块移动到不同的服务器,从而产生“瀑布”效果(一个分片不断填充块,然后移动到其他分片)。同时,所有新文档都不断被写入同一个分片,从而形成所谓的“热点”。如果插入速率足够,磁盘可能会在尝试写入新文档时达到其 IO 限制,同时将现有数据迁移到另一个分片。

Mongo“分片介绍”文档有更多关于文档如何存储在分片集合中的详细信息。 http://www.mongodb.org/display/DOCS/Sharding+Introduction

此外,Mongo 文档“选择分片键”提供了有关选择分片键时要考虑的内容的详细信息。 http://www.mongodb.org/display/DOCS/Choosing+a+Shard+Key

如果可能的话,我推荐阅读 Kristina Chodorow 的“Scaling MongoDB”。 http://shop.oreilly.com/product/0636920018308.do 这提供了一个很好的分片介绍以及我上面提到的选择分片键的注意事项和注意事项的更详细说明。

以下是其他用户就分片和选择 Shard Keys 提出的一些问题的链接。(您可能认识一些链接和一些作者)希望这些资源能够提高您对分片如何工作的理解,如果您仍然决定对您的集合进行分片,请允许您选择一个有效的分片键。

“分片不平衡” - http://groups.google.com/group/mongodb-user/browse_thread/thread/1328250382087448

“为此数据集设计分片索引的最佳方法是什么” - http://groups.google.com/group/mongodb-user/browse_thread/thread/5bda4a39d9be54f5

“低基数分片键” - http://groups.google.com/group/mongodb-user/browse_thread/thread/3c96d1c254f113b1

“片键分析” - http://groups.google.com/group/mongodb-user/browse_thread/thread/9cf0b8657d4515e2

于 2012-04-05T16:12:31.267 回答