Хранить файлы на диске или MongoDB

Я создаю систему блогов mongodb/nodejs (аналогичную wordpress).

в настоящее время у меня есть изображения, сохраняемые на диске, и указатель, помещаемый в mongo. Мне было интересно, так как у меня есть все сеансы, хранящиеся в MongoDB, чтобы обеспечить легкую балансировку нагрузки на серверах, будет ли хранение фактических файлов в Mongo также умной идеей для простых многосерверных настроек и/или повышения производительности.

Если все хранится в БД, вы можете просто создать больше веб серверы и / или репликации mongo для горизонтального масштабирования

мнения?

3 ответов


MongoDB-хороший вариант для хранения ваших файлов (я говорю о GridFS), особенно для случая использования, который вы описали выше. Когда вы храните файлы в MongoDB (GridFS, а не документы), вы получаете все возможности репликации и шардинга бесплатно, что является удивительным.

Если вам нужно создать новый сервер, и у вас уже есть файлы в MongoDB, все, что вам нужно сделать, это включить репликацию (таким образом, масштабировать по горизонтали). Я уверен, что это может спасти вас от многих головная боль.

ресурсы:

GridFS быстро и надежно достаточно для продукции?
http://www.mongodb.org/display/DOCS/GridFS
http://www.coffeepowered.net/2010/02/17/serving-files-out-of-gridfs/


помимо GridFS, возможно, вы рассматриваете облачное развертывание. В этом случае вы можете рассмотреть возможность хранения файлов в облачном хранилище (например, в Windows Azure есть хранилище Blob). Придерживаясь Windows Azure для этого примера (так как это то, с чем я работаю), вы бы ссылались на файл по его URI учетной записи хранения. Например:

https://mystorageacct.blob.core.windows.net/mycontainer/myvideo.wmv

поскольку вы будете хранить саму базу данных MongoDB в своем собственном blob (и монтироваться как дисковый том на вашей Linux или Windows VM), вы затем можно выбрать хранение файлов в одной учетной записи хранения или в совершенно другой учетной записи хранения (с каждой учетной записью хранения 100TB до 200 Тб).


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

посмотрите на mongoDb file storage GridFS , это может решить вашу проблему хранить изображения, и обеспечивать горизонтальную масштабируемость также.

http://www.mongodb.org/display/DOCS/GridFS http://www.mongodb.org/display/DOCS/GridFS+спецификация