有效地使用MongoDB分配策略

时间:2016-09-10 05:33:51

标签: mongodb padding allocation mongodb-java

我是一些MongoDB概念的新手,比如分配策略。目前我使用的是MongoDB-3.2.2版本,我正在使用 与Windows-32位和64位相同的版本。根据Mongo文档,默认分配策略是“PowerOf2Sizes”  哪个更适合插入/更新/删除操作。我有以下要求: 我将我的日志作为一个文档存储到一个数组中。所以最初我开始在数组中插入一个日志,然后我会更新 具有no.of日志条目的文档中的相同数组。所以我在文档中插入和更新数组。 这里我使用的是32位(MMAPV1)和64位(有线老虎)引擎。

根据我对Mongo文档的理解,我不需要将任何填充因子(通过分配策略)设置为64位以避免文档移动。 我只需要为32位(MMAP v1存储引擎)设置填充因子(通过分配策略)。

任何机构都可以告诉我如何根据上述要求使用分配策略?或者我的理解是否正确?

3 个答案:

答案 0 :(得分:0)

我有一个非常好的视频来回答你的问题。这是来自MongoDb架构师,将帮助您分析您的要求

https://youtu.be/9nYFnlM4vYw


美好的一天

答案 1 :(得分:0)

在wiredTiger存储中,没有填充需要存储不是线性的,因为在MMapV1中,由于文档移动到最后(或者可用的空白区域),我们会出现碎片问题。

如果您已经知道您的文档足够大并且您不想要移动,则分配策略是插入具有大垃圾文本字段的文档,然后使用$ unset调用更新文本字段将删除垃圾文本,这样您的文档已经有更大的空间,并且随着数据的进一步增长,它的移动不太可能。

但是每个文档有16MB的限制,这是足够好的,所以为了保持健康的水平,你可以用$ slice调用$ push作为-50(左右),这将确保你的数组只有最后一个50个日志。

如果它是关于日志的,那么封顶集合是一个很好的策略,但是当每个日志都是一个单独的文档时,它就会起作用,而不是你的设计。

答案 2 :(得分:-1)

MongoDB的文件限制为16MB。因此,您的解决方案可能无法在具有良好流量的实时生产设备中运行。因为当一个prouction bug开始快速填充时,文档将会耗尽。

下面的文档将帮助您设计后端并带来可扩展性。

https://docs.mongodb.com/ecosystem/use-cases/storing-log-data/