Является ли GridFS быстрым и надежным для производства? - PullRequest
85 голосов
/ 05 августа 2010

Я разрабатываю новый веб-сайт и хочу использовать GridFS в качестве хранилища для всех пользовательских загрузок, поскольку он предлагает много преимуществ по сравнению с обычным хранилищем файловой системы.

Тесты с GridFS, обслуживаемые nginx, указывают, чтоэто не так быстро, как обычная файловая система, обслуживаемая nginx.

Сравнительный тест с nginx

Кто-нибудь там, кто уже использует GridFS в производственной среде, или использовал бы его для нового проекта?

Ответы [ 5 ]

115 голосов
/ 12 апреля 2011

Я использую gridfs при работе на одном из наших серверов, который является частью веб-сайта сравнения цен с достойной статистикой трафика (около 25 тыс. Посетителей в день).На сервере не так много оперативной памяти, 2 гигабайта, и даже процессор не очень быстрый (Core 2 duo 1,8 ГГц), но на сервере достаточно места для хранения: 10 ТБ (sata) в конфигурации raid 0.Работа, которую выполняет сервер, очень проста:

У каждого продукта в нашем компараторе сравнения цен есть изображение (около 10 миллионов продуктов в соответствии с нашей базой данных продуктов), и задача сервера состоит в том, чтобы загрузить изображение,измените его размер, сохраните в gridfs и отправьте в браузер посетителей ... если его нет в сетке ... или ... доставьте его в браузер посетителей, если он уже сохранен в сетке.Таким образом, это можно назвать «традиционной схемой cdn».

Мы сохранили и обработали 4 миллиона изображений на этом сервере с момента его запуска и запуска.Изменение размера и сохранение данных выполняется с помощью простого сценария php ... но наверняка сценарий python или что-то вроде java может быть быстрее.

Текущий размер данных: 11.23g

CurrentРазмер хранилища: 12,5 г

Индексы: 5

Размер индекса: 849,65 м

О надежности: это очень надежно.Сервер не загружается, размер индекса в порядке, запросы быстрые

О скорости: Конечно, это не так быстро, как локальное хранилище файлов, может быть на 10% медленнее, но достаточно быстро, чтобы использоваться вв реальном времени, даже когда изображение должно быть обработано, что в нашем случае очень зависит от php.Время обслуживания и разработки также сократилось: стало так просто удалять одно или несколько изображений: просто запросите базу данных с помощью простой команды удаления.Еще одна интересная вещь: когда мы перезагружали наш старый сервер с локальным хранилищем файлов (таким образом, миллион файлов в тысячах папок), он иногда зависал на несколько часов, потому что система выполняла проверку целостности файлов (это действительно занимало часы ...).У нас больше нет этой проблемы с gridfs, теперь наши изображения хранятся в больших блоках mongodb (файлы 2gb)

Так что ... на мой взгляд ... Да, gridfs достаточно быстрый и надежный, чтобыиспользуется для производства.

12 голосов
/ 05 сентября 2010

Как уже упоминалось, она может быть не такой быстрой, как обычная файловая система, но тогда она дает вам преимущества перед обычными файловыми системами , которые, я думаю, стоит потратить на битовую скорость.

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

5 голосов
/ 25 февраля 2014

Тем не менее, на ремонт больших БД - новая система, которую мы разрабатываем, Монго не вышел из системы чисто, и восстановление GridFS 7 ТБ, похоже, займет 130 часов.

Из-за этогоЯ думаю, что я посмотрю на переход на OpenStack Swift или Ceph.Все-таки до этого было хорошо.И модуль nginx-gridfs сладок.

5 голосов
/ 26 ноября 2010

Модуль nginx-gridfs mdirolf великолепен и довольно прост в настройке. Мы используем его в производстве на paint.ly для обслуживания всех картин, и до сих пор проблем не было.

2 голосов
/ 03 февраля 2013

Я не рекомендую использовать gridfs, если вы не знаете, что делаете.GridFS - это просто слой абстракции, который разбивает файлы на куски и сохраняет файлы в двух коллекциях.Больше файлов - больше накладных расходов.Если вы ожидаете, что файлы будут примерно одинакового размера, не превышающего 32M или около того - вы на правильном пути.Не пытайтесь хранить большие файлы в gridfs.Почему?

  1. Драйверы на разных языках могут читать весь файл (например, чанки) при чтении маленькой части файла.
  2. Изменение файла может повлиять на все чанки и увеличить базу данныхload Если ваша файловая система растет, вам придется решить, что делать с gridfs.Быть осторожен!Непрерывность не гарантируется при инициализации шардинга!

Если вы думаете о том, чтобы прочитать загруженный проект, подумайте о загрузке файлов в документы напрямую (если размер не более 16 МБ) или выберите другой clusterfs и укажите имя файла / индекск вашей логике.

Надеюсь, это поможет.

...