2013-01-27 4 views
2

Можно создать дубликат:
database for huge files like audio and videoМожно ли хранить большие базы двоичных данных в базе данных?

Я ищу лучший (или, по крайней мере, достаточно хорошо) способ хранения больших наборов двоичных данных (изображения, видео, документы и т.д. .). Решение должно быть масштабируемым и не может застревать после X объема данных.

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

Из этого я могу видеть на http://dev.mysql.com/doc/refman/5.0/en/table-size-limit.html Таблица MySQL не может хранить более 4 ТБ за таблицу. Есть ли что-то более подходящее, например, возможно, базы данных nosql или, возможно, лучше хранить все в файлах на одном сервере и распространять их на все веб-интерфейсы?

ответ

3

Обычно вы не хотите хранить большие файлы в реляционной базе данных - это не то, для чего они предназначены. Я также посоветовал бы использовать решение NoSQL, поскольку они также обычно не предназначены для этого, хотя есть несколько исключений (см. Ниже).

Ваша последняя идея, хранящая файлы в файловой системе (обратите внимание, что это то, что файловые системы - это, предназначенные для;), скорее всего, правильный подход. Это может быть довольно трудно в зависимости от того, что ваши требования масштабируемости, но вы, вероятно, хотите, чтобы пойти с одним из следующих способов:

  • SAN. SAN обеспечивают резервированные, высокодоступные решения для хранения данных в сети. Несколько серверов могут быть подключены к хранилищу, предоставленному SAN, и обмениваются файлами между собой. Обратите внимание, что это решение, как правило, ориентировано на предприятия и довольно дорого реализуется надежно (вам потребуется как минимум физическое оборудование для него, так и RAID-контроллеры и множество дисков).

  • CDN. Сеть доставки контента - это удаленная глобально распределенная система для обслуживания файлов конечным пользователям через Интернет. Обычно вы помещаете файл в место на своем сервере, которое затем реплицируется в CDN для фактического распространения. Способ работы CDN заключается в том, что если у него нет файла, который запрашивает пользователь, он автоматически попытается извлечь его с вашего сервера; как только он имеет копию файла один раз, он кэширует файл в течение некоторого периода времени. Это может быть очень полезно, если вы обычно ограничены расходами на пропускную способность или накладные расходы на обработку из-за одновременного обслуживания огромного количества файлов.

  • Облачные предложения (Amazon S3, Rackspace Cloud Files). Они похожи на CDN, но хорошо работают с существующей облачной инфраструктурой, если это то, что вы используете. Вы отправляете запрос API облака для хранения вашего файла, а затем он становится доступным через Интернет, как с CDN. Основное различие заключается в том, что вы должны вручную обрабатывать любые запросы на хранение (создавать, удалять или обновлять).

Если количество файлов, на которых вы работаете, невелик, вы также можете воспользоваться внутренним решением. Храните файлы на двух или трех серверах (возможно, у вас есть больший набор серверов и используйте хеш-расчет для обхода, если пространство становится проблемой).Создайте небольшой API для ваших внешних серверов, чтобы запрашивать файлы с ваших серверов хранения, возвращаясь к альтернативным серверам, если они недоступны.

Одним из решений, которое я почти забыл (хотя я и не использовал его за пределами исследовательских целей), является проект Luwak от Riak. Luwak является расширением Riak, который является эффективным распределенным хранилищем ключей/значений, который обеспечивает большую поддержку файлов, разбивая большие файлы на сегменты постоянного размера и затем сохраняя эти сегменты в древовидной структуре для быстрого доступа. Это может быть что-то, на что можно смотреть, потому что это дает вам избыточность, осколки и API, которые я упоминал в последнем абзаце бесплатно.

2

Я работаю разработчиком (добровольцем) на довольно большом веб-сайте - у нас есть 2 ГБ изображений в 14000 изображений [это явно не так близко к «мировой записи»] и база данных с 150 МБ базы данных. Файлы изображений хранятся как отдельные файлы, а не как объекты базы данных, отчасти потому, что мы изменяем размер изображений для разных способов использования - миниатюры, средние и большие изображения создаются автоматически из сохраненного изображения (которое может быть больше размера «большого», который мы используем для сайт).

Хотя в SQL-базах данных можно хранить «blobs» (Binary Large Objects), я не считаю, что это лучшее решение. Сохраняя ссылку в базе данных, чтобы вы могли создать комбинацию пути/имени файла для фактического сохраненного файла [и, возможно, скрывать фактическое изображение за каким-то сценарием - php, jsp, ruby ​​или что бы вы ни пожелали), было бы лучшим решением ,

Смежные вопросы