Является ли GridFS быстрой и надежной для производства?

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

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

Тест с nginx

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

Ответ 1

Я использую gridfs для работы на одном из наших серверов, который является частью сайта сравнения цен с почетной статистикой трафика (около 25 000 посетителей в день). На сервере не так много бара, 2 гига, и даже процессор не очень быстрый (Core 2 Duo 1.8Ghz), но на сервере достаточно места для хранения: 10Tb (sata) в конфигурации raid 0. Работа, выполняемая сервером, очень проста:

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

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

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

Текущий размер хранилища: 12,5 г

Индексы: 5

Размер индекса: 849.65m

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

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

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

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