MongoDB gridfs说最大的好处就是将大文件拆分成块,然后如果你只是想查看部分文件,就不必将整个文件加载到内存中。但我的困惑是,即使我从本地磁盘打开一个大文件,我也可以使用skip()API来加载我想要的部分文件。我根本不必加载整个文件。那么MongoDB怎么说这是优势呢?
答案 0 :(得分:3)
即使cursor.skip()方法没有返回整个文件,它也必须将其加载到内存中。它要求服务器从集合或索引的开头走,以在开始返回结果之前获得偏移或跳过位置(当集合的大小很小时,不会产生很大影响)。 随着偏移量的增加,cursor.skip()将变得更慢并且CPU密集度更高。对于较大的集合,cursor.skip()可能会成为IO绑定。
但是,GridFS不是将文件存储在单个文档中,而是将文件分成多个部分或块,并将每个块存储为单独的文档。 因此,允许用户从文件的任意部分访问信息,例如“跳过”到文件的中间(使用id或文件名),而不是CPU密集型。
<强>更新强>
关于Peter Brittain建议的内容:
有许多事情需要考虑(基础设施,假定的使用统计数据,文件大小等),而在文件系统和GridFS之间进行选择。
例如:如果你有数百万个文件,GridFS往往会 更好地处理它,您还需要考虑文件系统限制 喜欢文件/目录的最大数量等。
您可能需要考虑阅读本文: Why use GridFS over ordinary Filesystem Storage?