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


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

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

бенчмарк с nginx

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

5 78

5 ответов:

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

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

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

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

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

индексы : 5

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

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

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

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

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

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

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

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

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

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

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

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

надеюсь, что это помогает.