【问题标题】:django-mongodb-engine Where is GridFSField Model Fielddjango-mongodb-engine GridFSField 模型字段在哪里
【发布时间】:2014-03-06 09:16:05
【问题描述】:

我正在将 django-mongodb-engine 用于我正在处理的项目,文档建议用户使用 GridFS 存储系统来存储 blob,而不是使用文件系统方法。显然,这也是我们一开始选择使用 mongodb 的原因之一。一个问题,至少可以说文档是sparse。在docs 中,他们提到使用 GridFSField 作为您的 blob 模型字段。一个问题... GridFSField 在哪里?

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

iPython/Django 外壳:

from django_mongodb_engine.storage import GridFSStorage

#... define the class/exec

/usr/local/lib/python2.7/dist-packages/django/core/management/commands/shell.pyc in Better()
      1 class Better(models.Model):
----> 2         blob = GridFSField()
      3

NameError: name 'GridFSField' is not defined

嗯,好的姜戈!那它在哪里定义呢?!

【问题讨论】:

    标签: python django mongodb blob gridfs


    【解决方案1】:

    这并不是您问题的具体答案,因为该答案很可能与您的设置配置有关。但是,当您似乎正在浏览文档示例并因此进行评估时,我认为提供一些关于使用 GridFS 的观点是值得的。

    GridFS 的目的不是像您(或 ODM 文档)所说的那样存储“blob”或替换“文件系统方法”的使用。是的,它可以这样使用,但它存在的唯一原因是为了克服 16MB limitation MongoDB 在 BSON 文档存储上的问题。

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

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

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

    因此,如果您必须拥有超过 16MB 的文档,请使用 GridFS。如果不只是将内容编码到一个普通的文档字段中,那么 GridFS 就是这样做的。

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

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

    【讨论】:

    • 感谢您抽出宝贵时间提供反馈。正如您所推测的,我的数据将在 16MB 的限制下,因此我最好按照您的建议实施解决方案。但是,我仍然想知道如何实现 GridFS 解决方案以供将来参考。但是,再次感谢您提供的信息...很高兴知道。
    【解决方案2】:

    你可以在django_mongodb_engine.fields下找到GridFSField

    from django_mongodb_engine.fields import GridFSField
    from django.db import models
    
    class Image(models.Model):
        blob = GridFSField()
    

    【讨论】:

      猜你喜欢
      • 2018-03-20
      • 1970-01-01
      • 1970-01-01
      • 2020-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-14
      • 2012-05-13
      相关资源
      最近更新 更多