2011-12-15 3 views
9

Я создаю систему ведения блога mongodb/nodejs (аналогично wordpress).Хранить файлы на диске или MongoDB

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

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

Мнения?

ответ

10

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

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

Ресурсы:

Is GridFS fast and reliable enough for production?
http://www.mongodb.org/display/DOCS/GridFS
http://www.coffeepowered.net/2010/02/17/serving-files-out-of-gridfs/

2

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

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

http://www.mongodb.org/display/DOCS/GridFS http://www.mongodb.org/display/DOCS/GridFS+Specification

4

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

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

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

Смежные вопросы