2014-02-09 56 views
0

我正在使用django-mongodb引擎來處理我正在處理的項目,文檔建議用戶使用GridFS存儲系統來存儲Blob,而不是使用文件系統方法。顯然,這是我們選擇首先使用mongodb的原因之一。一個問題,但文件是稀疏至少可以說。在docs他們提到使用GridFSField作爲你的blob模型領域。一個問題...... GridFSField在哪裏?django-mongodb-engine哪裏是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 

嗯,好吧Django的!它在哪裏定義呢?!

回答

2

這不是您的問題的具體答案,因爲答案很可能與您的設置配置有關。但是,由於您似乎正在審閱文檔示例,因此評估我認爲提供關於使用GridFS的一些觀點是值得的。

GridFS的意圖不是像您(或ODM文檔)所述的那樣存儲「blob」或替換「文件系統方法」的用法。是的,它可以這樣使用,但它存在的唯一原因是克服MongoDB在BSON文檔存儲上的16MB limitation

有一種普遍的誤解,認爲GridFS的是MongoDB中的「功能」,但它實際上是一個規範駕駛員側實現,用於處理分塊大的文檔內容。對於MongoDB的內部操作而言,服務器端的所有都沒有魔術,這只是另一個包含字段和數據的BSON文檔。

驅動程序實現正在將內容分成小塊並將內容分佈在集合中的多個文檔上。同樣在閱讀內容時,還有提供給的方法跟隨取得構成總內容的各種文件。簡而言之,的讀數爲使用GridFS方法編寫導致多個通過線路調用到MongoDB。

考慮到這一點,如果你的內容實際上將永遠是一個規模16MB下,那麼你可能會更好過只使用一個單一的文件中的編碼二進制數據,更新將是原子並且每個文檔的結果將更快地從單個讀取操作讀取。

所以,如果你必須有超過16MB的文件大小,然後使用GridFS。如果不是僅僅將內容編碼到正常的文檔字段中,因爲GridFS正在做這些事情。

欲瞭解更多信息,請閱讀常見問題解答:

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

+0

感謝您抽出寶貴的時間來提供反饋。正如你猜測的那樣,我的數據將低於16MB的限制,因此我最好根據你的建議實施解決方案。但是,我仍然想知道如何實施GridFS解決方案以供將來參考。但是,再次感謝您的信息...這是很好的知道。 – James

0

你可以找到GridFSField下django_mongodb_engine.fields

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

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