Хранилище файлов для веб-приложений: Файловая система, БД и NoSQL. - PullRequest
31 голосов
/ 23 мая 2010

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

  • Когда мы перемещаем «папки» (как определено нашим приложением), мы также должны перемещать файлы на диске (хотя это происходит скорее из-за странных дизайнерских решений со стороны оригинальных разработчиков, чем из-за необходимости хранить вещи на файловая система).
  • Трудно писать тесты для действий файловой системы; У меня есть фиктивный класс файловой системы, который регистрирует действия, такие как перемещение, удаление и т. Д., Не выполняя их, что более или менее выполняет работу, но я не уверен на 100% в тестах.
  • Я буду добавлять некоторые другие задания, которым требуется доступ к файлам из другого сервиса для выполнения дополнительных задач (например, индексирование в Solr, генерация миниатюр, преобразование формата фильма), поэтому мне нужно получать файлы удаленно. Делать это по сетевым ресурсам кажется хитрым ...
  • Работа с разрешениями для файловой системы, как это иногда вызывало у нас проблемы в прошлом, хотя теперь, когда мы перешли на чистую среду Linux, это должно стать меньшей проблемой.

Итак, мои основные вопросы

  • Каковы недостатки хранения файлов в качестве больших двоичных объектов в MySQL?
  • Существуют ли такие же проблемы с системами NoSQL, такими как Cassandra?
  • Есть ли у кого-нибудь другие предложения, которые могут быть уместными, например, MogileFS и т.д?

Ответы [ 4 ]

7 голосов
/ 23 мая 2010

Не прямой ответ, но некоторые указатели на очень интересные и несколько похожие вопросы (да, они о каплях и изображениях, но это сопоставимо с IMO).

Каковы недостатки хранения файлов какBLOB в MySQL?

Существуют ли те же проблемы с системами NoSQL, как Cassandra?

PS: я не хочу быть убийцей, но я не думаю,что любое решение NoSQL решит вашу проблему (NoSQL просто не имеет значения для большинства предприятий).

3 голосов
/ 23 мая 2010

возможно гибридное решение.

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

любая реструктуризация «папок» может быть смоделирована в БД и разыменована из фактического расположения ОС.

2 голосов
/ 24 мая 2010

Вы можете легко хранить файлы размером до 2 ГБ в Cassandra, разделив их на столбцы по 1 МБ или около того. Это довольно часто.

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

0 голосов
/ 23 мая 2010

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

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

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

...