我使用MongoDB作为一种方便的方式将数据集存储为一系列列,其中有一个文档存储给定列的值,另一个文档存储detaset的详细信息,以及映射到另一个具有关联列值的文档。随着事情的发展,我现在面临的问题是,我无法再将整个列存储在单个文档中。
我知道还有GridFS选项,唯一的缺点是我认为它将文件存储为blob意味着我会丢失随机访问列的一块或指定索引处的值,某些东西这对文档商店非常有用,但我可能没有其他选择。
所以我的问题是:GridFS是否也对文档的大小施加了上限,如果有的话,任何人都知道这是什么。我查看过hte docs但没有找到任何东西,但可能是我没有找到正确的位置或者有一个限制,但它没有很好的记录。
谢谢, Vackar
答案 0 :(得分:3)
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文档限制,那么随着文档大小的增加,这些文档也会对数据库存储和碎片产生重大影响。
适当的解决方案是重新考虑您的架构方法,以便您没有无限制的文档增长。这可能意味着展平您正在增长的“列”数组,因此它由一组文档而不是数组表示。
要求更好(和单独)的问题是如何根据预期的数据增长模式重构您的模式。