Djangomongodbengine GridFSField模型字段在哪里

2024-10-04 07:33:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个项目中使用django mongodb引擎,文档建议用户使用GridFS存储系统来存储blob,而不是使用文件系统方法。显然,这是我们首先选择使用mongodb的原因之一。不过,至少可以说,文档是稀疏的。在docs中,他们提到使用GridFSField作为blob模型字段。一个问题。。。GridFSField在哪里?在

class Better(models.Model):
    blob = GridFSField()

iPython/Django外壳:

^{pr2}$

嗯,好吧,Django!那它的定义是什么?!在


Tags: 项目django方法用户文档引擎docsmongodb
2条回答

这并不是您问题的具体答案,因为答案很可能是关于您的设置配置的。但是,由于您似乎正在查看文档示例并因此进行评估,我认为有必要提供一些关于使用GridFS的要点。在

GridFS的目的不是存储“blob”或替换“filesystem方法”的用法,正如您(或ODM文档)所述。是的,它可以这样使用,但是它存在的唯一原因是为了克服MongoDB在BSON文档存储上的16MBlimitation。在

一个常见的误解是GridFS是MongoDB的一个“特性”,但实际上它是一个在驱动程序端实现的规范,用于处理分块大文档内容。服务器端根本不存在魔法,就MongoDB的内部操作而言,这只是另一个包含字段和数据的BSON文档。在

驱动程序实现所做的是将内容分成更小的块并将内容分发到集合中的多个文档中。同样,在阅读内容时,也提供了一些方法来跟踪获取构成总内容的各种文档。简而言之,使用GridFS方法读取写入会导致通过连接到MongoDB的多个调用。在

考虑到这一点,如果您的内容实际上总是小于16MB的大小,那么您最好只在单个文档中使用编码的二进制数据,因为更新将是原子性的,结果是从每个文档的单个读取操作中更快地读取。在

因此,如果您的文档大小必须超过16MB,那么就使用GridFS。如果不只是将内容编码到一个普通的文档字段中,那就是GridFS所做的一切。在

有关更多信息,请阅读常见问题解答:

http://docs.mongodb.org/manual/faq/developers/#when-should-i-use-gridfs

您可以在django_mongodb下找到GridFSField_引擎场在

from django_mongodb_engine.fields import GridFSField
from django.db import models

class Image(models.Model):
    blob = GridFSField()

相关问题 更多 >