1

我使用 MongoDB 作为将数据集存储为一系列列的便捷方式,其中有一个文档存储给定列的值,另一个文档存储 detaset 的详细信息,以及与其他文档的映射关联的列值。随着事情变得越来越大,我现在面临的问题是我不能再将整个列存储在一个文档中。

我知道还有 GridFS 选项,唯一的缺点是我相信它将文件存储为 blob,这意味着我将失去对列的一部分或指定索引处的值的随机访问,这令人难以置信从文档存储中很有用,但是我可能没有任何其他选择。

所以我的问题是:GridFS 是否也对文档的大小施加了上限,如果是的话,有人知道这是什么吗?我查看了 hte docs 并没有找到任何东西,但可能是我没有在正确的地方寻找,或者存在限制但没有很好的记录。

谢谢, 瓦卡

4

1 回答 1

4

网格文件系统

根据GridFS 文档

Instead of storing a file in an single document, GridFS divides a file
into parts, or chunks, and stores each of those chunks as a separate
document. By default GridFS limits chunk size to 256k. GridFS uses
two collections to store files. One collection stores the file chunks,
and the other stores file metadata.

GridFS 将允许您存储任意大的文件,但这对您的用例没有帮助。GridFS 中的文件实际上是一个大型二进制 blob,您不会获得结构化文档和索引的任何好处。

架构设计

您面临的基本挑战是您的模式设计方法。如果您正在创建的文档可能会超过 16Mb 的文档限制,那么随着文档大小的增加,这些也会对您的数据库存储和碎片产生重大影响。

适当的解决方案是重新考虑您的模式方法,以便您不会有无限的文档增长。这可能意味着展平您正在增长的“列”数组,以便它由文档集合而不是数组表示。

一个更好的(和单独的)问题是如何根据预期的数据增长模式重构您的模式。

于 2013-04-05T06:20:27.313 回答