Обслуговування зображень із SQL-сервера проти файлової системи проти S3 тощо


12

У моєму додатку (класичний asp yay!) Розміщено близько 2,1 мільйонів зображень при 25 ГБ, і це лише 90 днів даних, і я хотів би пройти як мінімум 365. Мені потрібно взяти це під контроль і я розглядаю всі варіанти. Які ваші думки щодо плюсів і мінусів наступних практик:

  • Плюси SQL Server: Просте резервне копіювання мінусів: Продуктивність?
  • Плюси файлової системи: Мінуси швидкості: надмірність, резервне копіювання відбувається повільно (зараз досліджується синтетичні повні резервні копії, замість чого це може покращити)
  • S3 і подібні плюси: пропускна здатність зміщена з мого центру обробки даних на Amazon, практично необмежену кількість пам’яті. Мінуси: вартість, аналіз витрат є складним (оцінка 80% моєї пропускної здатності - це зображення для цілей рентабельності інвестицій).

Хтось ще займається проблемою багатомільйонного зображення і як ви вирішили це?


4
Не робити, не не не не зберігати в базі даних зображення (краплі). Ми зробили цю помилку багато років тому і з того часу платимо за неї. База даних чудово підходить для метаданих.
Марк Хендерсон

Дивіться мій пост про тип даних FILESTREAM - це може змінити вашу думку.
Dan Diplo

Відповіді:


6

У нас немає мільйонів зображень, але вони мають сотні тисяч, і ми використовуємо гібридний підхід - mysql для метаданих, зображення, що зберігаються на локальному диску для резервного копіювання, і пересуваються на Amazon s3, де вони подаються користувачам. Ми не мали проблем з Amazon та доступністю. Перехід до хмарочосу - це в наших планах, просто потрібно знайти час.

Ця дискусія може бути корисною для вашого рішення:
http://ask.metafilter.com/59635/Millions-of-images

Я б пішов з метаданими на SQL-сервер та файлами у файловій системі (або s3 або cloudfront). Але найкраща відповідь залежить від деяких інших моделей використання:

  • чи часто змінюються зображення
  • чи можете ви подавати зображення безпосередньо з файлової системи (тобто img src="...") чи вам потрібно, щоб вони контролювали доступ. Якщо остання, то найкраще вирішити базу даних
  • ви подаєте невелику кількість зображень більшу частину часу (останні 10%) чи розповсюдження порівняно поширене.

Резервне копіювання мільйонів зображень буде складним, незалежно від того, як ви їх влаштовуєте - це просто багато даних. Я хотів би знайти хороший тематичний приклад щодо резервного копіювання крапок на SQL сервері, перш ніж я взявся за рішення. (Ось стаття, яка може бути корисною: http://www.databasejournal.com/features/mssql/article.php/3738276/Storing-Images-and-BLOB-files-in-SQL-Server-Part-4.htm )


Резервне копіювання буде складним, але, принаймні, із резервними копіями на рівні файлів вам (як правило) не доведеться відновлювати всю резервну копію лише для відновлення однієї записи / зображення. IMO, файлова система за замовчуванням, якщо база даних не дає вам те, що ви не можете зробити інакше. +1
JasonBirch

Файлові системи призначені для зберігання файлів - ви можете знайти файлові системи, призначені для ефективного зберігання мільйонів файлів. Бази даних розроблені для таких речей, як ваші метадані - запити та відповідність. Якщо у вас дуже мало зображень, це, мабуть, найкращий спосіб (виключаючи хмарні рішення).
dmsnell


3

Ігноруйте людей, які говорять: " Не зберігайте зображення / двійкові дані в базі даних ", оскільки вони засновують свої відповіді на старій інформації (припускаючи, що ви будете зберігати дані в стовпці типу VarBinary). Проблеми щодо використання SQL Server для зберігання зображень тепер можна зменшити, використовуючи тип даних FILESTREAM у SQL Server 2008. По суті, тип даних FILESTREAM дозволяє поєднувати простоту зберігання даних у базі даних із продуктивністю, отриманою від обслуговування файли з зберігання файлів NTFS.

Щоб цитувати SQL Mag :

"Нова підтримка FILESTREAM SQL Server 2008 поєднує в собі перевагу доступу до LOB безпосередньо з файлової системи NTFS з референтною цілісністю та легкістю доступу, запропонованими механізмом реляційних баз даних SQL Server."

Для отримання додаткової інформації читайте цей блог від Раві С. Маніама на MSDN .


Чи взагалі міняє сховище FILESTREAM історію резервного копіювання / відновлення? Це наше найбільше підключення зараз ... якщо вони зберігаються у VarBinary, це буде відносно простою історією вперед.
Вебіді

Ні, дані FILESTREAM обробляються як будь-які інші, тому вони резервні копії в базі даних. Для цитування MSDN: "Ви можете використовувати всі моделі резервного копіювання та відновлення з даними FILESTREAM, а дані FILESTREAM резервні копії структурованих даних у базі даних." - technet.microsoft.com/en-us/library/bb933993.aspx
Dan Diplo

2

Хоча я не маю справу з багатомільйонним викликом зображень, я б використовував Amazon CloudFront. Усі файли зберігаються у відрі S3, але є серверними через систему доставки вмісту Amazon. Я б не використовував S3 поодинці.

Мій другий вибір - файлова система. Проста і легка, єдина проблема, якщо всі ці файли потраплять в один каталог, вся справа вийде з ладу.

Для мене SQL не був би варіантом для такої системи. Ви не тільки отримуєте плату за передачу пропускної здатності, але також будете платити за обробку запиту - це буде дуже залежно від хостингу, але я припускаю, що ви використовуєте виділений сервер або принаймні vps, де з вас будуть стягнуті кошти. для циклів. Тоді він сповільнить весь ваш сайт, якщо він використовує ту саму базу даних, що і сервер зображень. Якщо ні, то ви додасте всю цю складність необхідності керувати двома підключеннями до бази даних.


За моїм сценарієм, зараз усе знаходиться на власних серверах, якими я володію. Таким чином, вартість транзакцій сама по собі не існує.
Вебіді

1

Бази даних розроблені для транзакційних даних / узгодженості та безпеки.

Мультимедійні файли (зображення, аудіо, відео), як правило, створюються та можуть видалятися, але дуже рідко оновлюються. Таким чином, загалом немає необхідності підтримувати їх транзакційну відповідність іншим даним, і база даних не принесе вам ніякої реальної користі. Текстовий вміст, можливо, інша справа.

Поки у вас немає проблем із поняттям, як хтось безпосередньо перетягує ваш файл, якщо у нього є URL-адреса файлу, тоді файлова система прекрасна. Якщо ви працювали на зразок бібліотеки фотографій, де ви розраховуєте стягувати плату перед завантаженням файлу, то це, мабуть, інша справа. Тобто, щойно користувач заплатив, він може отримати URL-адресу, певну для цього користувача або дійсну лише короткий час, і програма обробляє декілька чи тимчасові URL-адреси, що вказують на одне зображення. З цим все-таки можна обробити додаток та файлову систему, але ви в кінцевому підсумку обслуговуєте засоби масової інформації через додаток, а не як пряме завантаження файлів (що в основному виключає будь-які переваги S3), і різниця між DB та файловою системою є меншою .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.