что выбрать/выбрать из коллекций, т.е. фрагментов или файлов mongoDB gridFS. на основании чего мы можем это решить?

Я новичок в mongoDB и хочу использовать его для хранения файлов, то есть изображений и видео (размер может превышать 40-50 МБ). Для этого мы можем использовать mongoDB gridFS. Но в gridFS это две коллекции, то есть куски и файлы. Теперь я хочу знать, какая коллекция, то есть фрагменты или файлы, будет лучше для меня. Как или на основании чего мы это решаем.

ТРЕБОВАНИЯ:

  • хранить изображения и видео
  • видео может быть больше 40-50MB
  • частый доступ к этому медиа

person murtaza.webdev    schedule 16.09.2014    source источник
comment
Если вы хотите использовать GridFS, вам следует использовать их API более высокого уровня. Это будет управлять чанками и коллекциями файлов для вас. Если вы получите доступ к ним напрямую (и сделаете это неправильно), вы можете что-то сломать.   -  person Thilo    schedule 16.09.2014
comment
для хранения файлов (изображений / видео) у нас есть либо файлы, либо фрагменты, верно? из того какой выбрать.   -  person murtaza.webdev    schedule 16.09.2014
comment
Это не выбор. files содержит метаданные, имя файла, размер и т. д., практически любую информацию, которую вы хотите. чанки — это фактический контент, разбитый на чанки, чтобы не превысить лимит BSON. Все это обрабатывается в спецификации драйвера для прозрачного чтения/записи фрагментов. Так что это не выбор, а то, как это делается.   -  person Neil Lunn    schedule 16.09.2014
comment
Ударь меня. Я бы сделал это ответом @NeilLunn   -  person tom    schedule 16.09.2014


Ответы (1)


Возможно, здесь есть небольшая путаница в отношении того, что на самом деле представляет собой GridFS, поскольку на самом деле это не что-то что MongoDB «делает», но на самом деле это просто спецификация драйвера для хранения данных за пределами 16 МБ BSON в стандартных коллекциях.

Для этого существуют две коллекции, используемые реализациями GridFS. Один обычно называется «файлы», а другой — «фрагменты». Они имеют разные цели и не являются «выбором» того, где хранить, как вы просите.

Коллекция «файлы» предназначена для «метаданных», которые представляют собой лишь некоторую информацию о «файле», и в основном это то, что вы хотите. Это «описывает» файл и, что наиболее важно, действует как «ссылка» на _id, используемый для идентификации файла в коллекции «фрагментов». В качестве образца:

db.fs.files.findOne()
{
    "_id" : ObjectId("533b67d8afc27c15fc82caf4"),
    "filename" : "twig.pl",
    "chunkSize" : 262144,
    "uploadDate" : ISODate("2014-04-02T01:28:56.915Z"),
    "md5" : "9b10c69537126652aebc2742ca3ad69a",
    "length" : 267
}

Итак, есть _id и некоторые другие данные о файле. Это просто стандартная коллекция, и вы можете запросить ее как таковую.

Конечно, «фрагменты» на самом деле относятся к «частям» фактического «файла», и в краткой форме они будут выглядеть примерно так:

{
    "_id" : ObjectId("533b67d8c6ed8872a7fa9ff0"),
    "files_id" : ObjectId("533b67d8afc27c15fc82caf4"),
    "n" : 0,
    "data" : BinData(0,"IyEvdXNyL2Jpbi9lbnYg....")
}

И их будет столько, сколько потребуется для фактического хранения контента.

Что касается «размера» фрагментов, это, как правило, зависит от реализации драйвера, но обычно есть способ указать, что использовать, но из спецификации:

"По умолчанию GridFS ограничивает размер фрагмента до 255 КБ..."

Но, конечно, вы должны попытаться сохранить это в своей реализации. Как вы можете видеть из приведенного выше «мета» документа, спецификация заключается в том, чтобы «хранить» эту информацию с метаданными, чтобы это можно было определить при обратном чтении и «построении» своего рода дескриптора.

Таким образом, «реализация драйвера» фактически обрабатывает то, как происходят операции «чтения/записи» с фрагментами, и обычно делает что-то, чтобы представить результаты в виде своего рода «файла» или «потока». Но это всего лишь «обычные коллекции» и ничего особенного в себе. Таким образом, все обычные запросы и операции CRUD работают с этими коллекциями точно так же, как и с любыми другими.

person Neil Lunn    schedule 16.09.2014
comment
+1. И если вы можете использовать официальный драйвер с реализацией GridFS, просто используйте его. Не связывайтесь с внутренностями. - person Thilo; 17.09.2014