Назад | Перейти на главную страницу

Обслуживайте большое количество маленьких изображений в ext4

Я прочитал аналогичный вопрос, но все еще не понимаю, в какой ситуации.

Мой сайт позволяет пользователю загружать огромное количество больших изображений (сканировать страницы книги). Мой сервер автоматически выложит и сохранит эти изображения. Таким образом, каждая страница превратится в 10 тысяч маленьких плиток (каждое изображение имеет размер 128 пикселей * 128 пикселей, занимает 2k места). У меня около 100Гб изображений, и прямо сейчас они уже заполняют всю таблицу inode.

Вот пара моих мыслей и понимания, пожалуйста, поправьте меня, если я ошибаюсь.

  1. mysql blob

    положительная сторона: больше не нужно беспокоиться о структуре inode / каталогов.

    обратная сторона: медленное обслуживание изображений и может замедлить работу всей базы данных

  2. файловая система

    Достоинства: более быстрое обслуживание изображений

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

  3. mongoDB BinData с base64 (я не знаком с этим, но кажется хорошим вариантом)

  4. Amazon S3

    плюс: они обо всем позаботятся

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

    (ОБНОВЛЕНИЕ: я могу не разрешить использовать стороннего поставщика, но я все равно буду жить здесь, поскольку это может быть хорошим решением для других людей, согласно предложению @Niels.)

  5. Другое Magic Отличное решение.

Поэтому мне интересно, что лучше в моей ситуации и почему. Спасибо за помощь

Насколько мне известно, нет способа изменить количество inodes в существующей файловой системе.

Если вы можете воссоздать файловую систему, вы можете использовать -N возможность указать большее количество inodes для новой FS

Я бы определенно выбрал S3, если у вас нет тысяч очень активных пользователей ... И даже если вы делаете пожертвования или рекламируете, это должно покрывать расходы. Хранилище S3 действительно дешево по сравнению с вашим собственным сервером. Хранение 100 ГБ данных обойдется вам примерно в 9 долларов США в месяц при высоком уровне избыточности. Это означает зеркальное отображение по крайней мере в 4 местах хранения с гарантированной надежностью транзакций 99,9999% по цене, которая не позволит вам купить один сервер за 3 года. Трафик может быть дорогостоящим, но вы платите это с каждым провайдером колокации, так что никакой реальной разницы, если вы не доберетесь до больших чисел.

S3 - это внутренне оптимизированный строковый словарь, поэтому он способен хранить миллионы, если не миллиарды связанных файлов.

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

Кроме того, если использование полосы пропускания действительно астрономическое, рассмотрите возможность использования вашего веб-сервера в качестве «пограничного» сервера. В большинстве сценариев массового хранения 1% контента запрашивается 99% времени (например, фотографии из Facebook). Некоторые сценарии, которые будут локально отражать 1 ГБ недавно запрошенных образов и сбрасывать их к моменту последнего доступа, должны быть простыми в выполнении и, вероятно, сохранят затраты на пропускную способность S3 в пределах уровня бесплатного пользования.