Зберігання зображень у БД - так чи ні?


415

Тож я використовую додаток, який значно зберігає зображення в БД. Який ваш прогноз щодо цього? Я більше типу зберігати розташування у файловій системі, ніж зберігати його безпосередньо в БД.

Як ви думаєте, які плюси та мінуси?


Відповіді:


350

Я відповідаю за деякі програми, які керують багатьма зображеннями ТБ. Ми виявили, що найкраще зберігати шляхи до файлів у базі даних.

Є кілька питань:

  • Зберігання бази даних зазвичай дорожче, ніж зберігання файлової системи
  • Ви можете суперприскорити доступ до файлової системи за допомогою стандартних продуктів на полицях
    • наприклад, багато веб-серверів використовують системний виклик операційної системи sendfile (), щоб асинхронно надсилати файл безпосередньо з файлової системи в мережевий інтерфейс. Зображення, що зберігаються в базі даних, не отримують користі від цієї оптимізації.
  • такі речі, як веб-сервери тощо, не потребують спеціального кодування чи обробки для доступу до зображень у файловій системі
  • бази даних виграють там, де важлива трансакційна цілісність між зображенням і метаданими.
    • складніше керувати цілісністю між db метаданими та даними файлової системи
    • важко (в контексті веб-додатку) гарантувати, що дані були передані на диск у файловій системі

33
які продукти на полицях доступні для "надшвидкої" файлової системи?
Андрій Ронеа

22
Хоча я керую лише файлами 3 ТБ, я безумовно згоден. Бази даних - це структуровані дані, а не краплі.
derobert

7
@derobert: зовсім так, якщо ви ніколи не будете використовувати елемент даних у запиті, як умові чи підключенні, він, ймовірно, не належить до бази даних. Знову ж таки, якщо у вас є приємна функція бази даних для запиту зображень на подобу ...
Nils Weinander,

14
які продукти на полицях доступні для "надшвидкої" файлової системи?
ablmf

5
Re: "супершвидкісні" продукти: Більшість веб-серверів тепер можуть скористатися системним викликом sendfile (), щоб доставити статичні файли асинхронно клієнту. Це вивантажує в операційну систему завдання переміщення файлу з диска в мережевий інтерфейс. ОС може зробити це набагато ефективніше, працюючи в просторі ядра. Мені це здається великим виграшем для файлової системи проти db для зберігання / обслуговування зображень.
Алан Доннеллі

140

Як і в більшості питань, це не так просто, як це звучить. Бувають випадки, коли було б сенс зберігати зображення в базі даних.

  • Ви зберігаєте зображення, які динамічно змінюються, кажуть рахунки-фактури, і ви хотіли отримати рахунок-фактуру, як це було 1 січня 2007 року?
  • Уряд хоче, щоб ви зберегли 6-річну історію
  • Зображення, що зберігаються в базі даних, не потребують іншої стратегії резервного копіювання. Зображення, збережені у файловій системі
  • Простіше контролювати доступ до зображень, якщо вони знаходяться в базі даних. Непрацюючі адміністратори можуть отримати доступ до будь-якої папки на диску. Щоб витягти зображення, потрібен дійсно визначений адміністратор

З іншого боку, пов'язані проблеми

  • Потрібен додатковий код для витягування та передачі зображень
  • Затримка може бути повільнішою, ніж прямий доступ до файлів
  • Більш важке навантаження на сервер бази даних

2
Відсутність окремої стратегії резервного копіювання може бути великою справою, коли ви пишете програми, встановлені в приміщенні (наприклад, SharePoint). Коли ви створюєте резервну копію SharePoint, все є в БД, що робить це дуже просто.
Ерік Шкуновер

44
Безпека від неясності насправді не є стратегією контролю доступу!
Джон Кейдж

5
Я не думаю, що він виступає за безпеку через невідомість - він говорить, що розміщення зображень у БД додає ще один рівень безпеки. (Я думаю ... @ Кондраде, не хочеш вставляти слова в рот)
AJ.

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

Ви випадково використовуєте бібліотеку ImageResizing.Net для обробки кешування зображень SQL-> диска? Це найдосконаліший, масштабований і надійний кеш-диск, який ви можете отримати ...
Ліліт Рівер


56

Це може бути досить довгим знімком, але якщо ви використовуєте (або плануєте використовувати) SQL Server 2008, рекомендую ознайомитися з новим типом даних FileStream .

FileStream вирішує більшість проблем навколо зберігання файлів у БД:

  1. Blobs насправді зберігаються як файли в папці.
  2. Доступ до Blobs можна використовувати за допомогою підключення до бази даних або через файлову систему.
  3. Резервні копії інтегровані.
  4. Міграція "просто працює".

Однак "Прозоре шифрування даних" SQL не шифрує об'єкти FileStream, тому, якщо це врахування, вам може бути краще просто зберігати їх як варбінарні.

З статті MSDN:

Оператори Transact-SQL можуть вставляти, оновлювати, запитувати, шукати та створювати резервні копії даних FILESTREAM. Інтерфейси файлової системи Win32 забезпечують потоковий доступ до даних.
FILESTREAM використовує системний кеш NT для кешування даних файлів. Це допомагає зменшити будь-який ефект, який можуть мати дані FILESTREAM на продуктивність Database Engine. Буферний пул SQL Server не використовується; тому ця пам'ять доступна для обробки запитів.


+1 для FileStream. Він фактично зберігає краплі як файли на диску, але керує ними транзакційно.
Джон Гітцен

Крім того, SQL-сервер дозволяє крапелям FileStream отримати доступ безпосередньо з диска, так що ви можете уникнути зв'язку з БД
Джон Гітцен

Тим не менш, додано затримку між БД і веб-сервером ... І веб-серверу доведеться завантажити його в пам'ять, щоб передати його клієнту, а не мати змогу передавати його з диска, якщо ви не використовуєте кешування диска.
Річка Ліліт

39

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


35

На мій досвід, іноді найпростішим рішенням є назви зображень відповідно до первинного ключа . Тож легко знайти зображення, яке належить до певного запису, і навпаки. Але в той же час ви нічого не зберігаєте про зображення в базі даних.


Справді дуже приємно. Ваші користувачі тепер можуть легко збільшити своє ім'я файлу, щоб отримати доступ до інших файлів ...
Marijn Huizendveld

6
@Marijn: Це лише в тому випадку, якщо ви відкриєте зображення на світ.
Seun Osewa

Ми зробили щось дуже схоже з нашими зображеними документами (наш первинний ключ - це складений ключ із трьох елементів.), Але ми додали дату та час, коли документ був відсканований, щоб у нас в одному каталозі було кілька версій.
Ендрю Нілі

@Osewa, як це? Так, для прямого доступу до файлу кінцевому користувачеві знадобиться доступ до папки. У вас може виникнути процес обслуговування файлу через FTP на основі запиту, і захист буде нарівні зі сервером SQL.
Ендрю Нілі

31

Хитрість тут - не стати завзятим.

Тут слід зауважити, що ніхто в таборі файлових систем не вказав конкретну файлову систему. Чи означає це, що все від FAT16 до ZFS зручно перемагає кожну базу даних?

Ні.

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

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


6
Я не бачу, щоб хтось стверджував, що файлова система швидше, ніж БД у 100% часу (читайте відповідь Марка Гаррісона). Це трохи солом’яник. Ймовірно, є ситуації, в яких бажано не надягати ремінь безпеки, але, загалом кажучи , надягати ремінь безпеки - це гарна ідея.
Кальвін

30

У місцях, де Ви ОБОВ'ЯЗКОВО гарантуєте референтну цілісність та відповідність ACID, зберігання зображень у базі даних не потрібно.

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


7
Власне, ні, ви можете. Поки файли зображень ніколи не видаляються, не змінюються або перезаписуються, коли всі файли зображень синхронізуються перед спробою здійснення транзакцій, файлової системи немає, ви можете бути впевнені, що файли зображень та метадані синхронізовані. Для деяких додатків це занадто багато ifs, я думаю.
Seun Osewa

Я б пішов ще далі і сказав, що за допомогою файлової системи Журналінгу та деякої додаткової логіки програми можна досягти відповідності ACID. Етапи полягають у тому, щоб записати db-запис, записати файл. Якщо файл здійснює, виконайте транзакцію db.
Ендрю Нілі

28

Як говорили інші, SQL 2008 поставляється з типом Filestream, який дозволяє зберігати ім'я файлу або ідентифікатор як вказівник у db і автоматично зберігає зображення у вашій файловій системі, що є прекрасним сценарієм.

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

Таким чином ви також економите простір у вашій файловій системі, оскільки збираєтесь лише заощадити точну кількість простору або навіть ущільнити простір у файловій системі.

Крім того, ви можете вирішити зберегти за допомогою якоїсь структури або елементів, які дозволяють переглядати необроблені зображення у вашій файловій системі без будь-яких хітів db, або переносити файли масово на іншу систему, жорсткий диск, S3 або інший сценарій - оновлення місця в вашої програми, але зберігайте структуру, знову без особливого удару, намагаючись вивести зображення з вашого db, намагаючись збільшити обсяг пам’яті.

Ймовірно, це також дозволить вам кинути якийсь елемент кешування на основі часто вражених URL-адрес зображення у свій веб-движок / програму, тож ви також економите там.


27

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

Обслуговування зображень із бази даних просто, просто реалізуйте оброблювач http, який обслуговує масив байтів, повернутий із сервера БД, як двійковий потік.


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

26

Ось цікава довідка з цієї теми.

Для BLOB чи не для BLOB: велике сховище об’єктів у базі даних або файловій системі

Відповідь "Це залежить". Звичайно, це буде залежати від сервера баз даних та його підходу до блокового зберігання. Це також залежить від типу даних, що зберігаються в краплі, а також від того, яким чином доступ до цих даних.

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

Ось додатковий момент, який потрібно пам’ятати. Однією з причин, що підтримують використання бази даних для зберігання крапів, є відповідність ACID. Однак підхід, який використовували тестери у Білій книжці (опція масової реєстрації SQL Server), яка подвоювала пропускну здатність SQL Server, фактично змінила значення "D" в ACID на "d", оскільки дані про краплі не реєструвалися початкові записи для транзакції. Тому, якщо повна відповідність ACID є важливою вимогою для вашої системи, зменшіть удвічі цифри пропускної здатності SQL Server для запису бази даних при порівнянні вводу / виводу файлів з блоком вводу / виводу бази даних.


25

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

Колись загальним рішенням цього є хешування їх у збалансоване дерево підкаталогів.


Ви могли б так подумати, але питання насправді незначні; У мене є додаток з мільйонами файлів в одному каталозі, до якого звертаються сотні користувачів без проблем. Це не розумно, але це працює. Найбільша проблема - якщо ви використовуєте Explorer для перегляду каталогу, ви назавжди дивитесь ліхтариком.
SqlACID

1
Краще використовувати файлову систему, яка не має проблем з великими каталогами
Seun Osewa

8
У мене було додаток з мільйонами файлів в одному каталозі (сервер під управлінням RHEL 4) - навіть для перерахування вмісту каталогів (перенесення файлів до файлу) потрібні дні і створили вихідний файл розміром 100 Мб. Тепер вони знаходяться в базі даних. У мене є один файл, який я можу перемістити або створити резервну копію досить легко.
Річард

1
@Seun Osewa: кожна файлова система має обмеження ... і якщо ви знаєте про одну, яка не має проблем із збереженням мільйонів записів у одному каталозі, будь ласка, повідомте мене!
Гійом

1
@Seun Osewa: зараз база даних до 28 ГБ, із записами 5,4 М. Мені довелося розділити таблицю бази даних, тому у мене є кілька файлів для резервного копіювання, розміром приблизно 5 Гб. Переміщення окремих зображень на Amazon S3 зараз, тому мені залишається зберігати лише ім'я файлу в БД (а Amazon може робити резервні копії. )
Річард

22

Щось ніхто не згадував, це те, що БД гарантує атомні дії, транзакційну цілісність і має справу з одночасністю. Навіть референтна цілісність знаходиться поза вікном з файловою системою - тож як ви знаєте, що імена файлів насправді все-таки правильні?

Якщо у вас є зображення у файловій системі, і хтось читає файл, коли ви пишете нову версію або навіть видаляєте файл - що станеться?

Ми використовуємо краплі, тому що ними легше керувати (резервне копіювання, реплікація, передача). Вони добре працюють на нас.


Яка ймовірність мати два одночасних оновлення конкретного зображення?
Арафангіон

1
вам не потрібні одночасні оновлення, щоб виникли проблеми - це може бути читання та запис. У нашому випадку це майже гарантовано станеться.
Draemon

20

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

Якщо фактичне зображення, на яке вказує файловий шлях, стає недоступним, база даних мимоволі має помилку цілісності.

Зважаючи на те, що зображення - це фактичні дані, які шукаються, і керувати ними можна простіше (зображення не раптом зникнуть) в одній інтегрованій базі даних, а не взаємодії з якоюсь файловою системою (якщо до файлової системи здійснюється незалежний доступ, зображення МОЖУТЬ раптово «зникати»), я б хотів їх зберігати безпосередньо як BLOB або подібні.


17

У компанії, де я працював, ми зберігали 155 мільйонів зображень у базі даних Oracle 8i (тоді 9i). 7,5 ТБ вартістю.


5
Абсолютно. Мабуть, база тепер значно більша. Наявність даних у базі даних означає, що реплікація бази даних на різних сайтах також набагато простіша.
graham.reeds

Я бачив демонстрацію Oracle, де реально монтувати файлову систему до бази даних чи щось подібне. Чи знаєте ви, чи це ви робили? (Вибачте, я незрозумілий з Oracle, тому, можливо, я кажу про сміття.)
Стю Томпсон,

Я не думаю, що це - зберігання зображень у базі даних як бази даних. База даних була агресивно налаштована - я пам'ятаю багаторазові дискусії щодо розміру зображень, що змінюються, коли поля додавалися та видалялися. Все було вирівняно межею.
graham.reeds

14

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

Як і більшість інших речей, це залежить від очікуваного розміру та бюджету.


13

Ми впровадили систему зображень документів, яка зберігає всі її зображення у полях SQL2005. На даний момент є кілька сотень ГБ, і ми спостерігаємо чудові часи відгуку та малоефективну деградацію продуктивності. Крім того, у відповідності до регуляторних норм, у нас є проміжний рівень, який архівує нещодавно опубліковані документи в оптичну систему автоматів, яка виставляє їх як стандартну файлову систему NTFS.

Ми були дуже задоволені результатами, особливо стосовно:

  1. Простота копіювання та резервного копіювання
  2. Можливість легко впровадити систему версій документа

11

Якщо це веб-додаток, тоді можуть бути переваги для зберігання зображень у сторонній мережі для зберігання даних, таких як S3 Amazon або платформа Nirvanix.


11

Припущення: Додаток увімкнено в Інтернеті / на веб-основі

Я здивований, що ніхто про це не згадував ... делегуйте це іншим, хто є фахівцями -> використовуйте стороннього постачальника хостингу зображень / файлів .

Зберігайте свої файли на платній онлайн-службі, як-от

Інші теми StackOverflow тут говорять про це .

Цей потік пояснює, чому слід використовувати стороннього хостинг-провайдера.

Це так варте того. Вони зберігають його ефективно. Немає пропускної спроможності завантажуватися з ваших серверів на запити клієнта тощо.


10

Якщо ви не на SQL Server 2008 і у вас є вагомі причини для розміщення певних файлів зображень у базі даних, ви можете скористатися підходом "обидва" та використовувати файлову систему як тимчасовий кеш і використовувати базу даних як головне сховище .

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


+1 Це також дозволяє зберігати оригінальне зображення, надаючи кешовану / оптимізовану версію, дозволяючи пізніше змінити розмір / стиснення
Deebster

7

Я не впевнений, наскільки це приклад "реального світу", але в даний час у мене є додаток, який зберігає деталі для гри в торговельну карту, включаючи зображення для карт. Наразі кількість записів для бази даних на сьогодні складає лише 2851 запис, але, враховуючи той факт, що певні картки випускаються багаторазово і мають альтернативні твори ілюстрації, насправді було більш ефективним розміром сканування "первинного квадрата" твори, а потім динамічно генерувати межі та інші ефекти для картки, коли вони вимагаються.

Оригінальний творець цієї бібліотеки зображень створив клас доступу до даних, який надає зображення на основі запиту, і це робить це досить швидко для перегляду та індивідуальної картки.

Це також полегшує розгортання / оновлення, коли випускаються нові картки, замість того, щоб накопичувати цілу папку зображень і надсилати їх по трубі та забезпечувати створення належної структури папок, я просто оновлюю базу даних і змушую користувача завантажити її знову. Цей розмір наразі до 56 Мб, що не чудово, але я працюю над функцією додаткового оновлення для майбутніх версій. Крім того, існує версія програми "без зображень", яка дозволяє тим, хто перебуває на комунальній мережі, отримати програму без затримки завантаження.

Це рішення на сьогодні спрацювало чудово, оскільки саме додаток орієнтовано як єдиний екземпляр на робочому столі. Є веб-сайт, на якому всі ці дані архівуються для доступу в Інтернет, але я ні в якому разі не використовував би для цього те саме рішення. Я погоджуюсь, що доступ до файлів був би кращим, оскільки він би краще масштабував частоту та обсяг запитів, що надсилаються для зображень.

Сподіваюсь, це не надто хитрощі, але я побачив цю тему і хотів надати деякі мої уявлення щодо порівняно успішної програми для малого / середнього масштабу.


Що стосується реплікації, зберігання зображень у базі даних значно перевершує ІМО.
Звуковий сигнал


7

Це залежить від кількості зображень, які ви збираєтесь зберігати, а також їх розмірів. Я використовував бази даних для зберігання зображень у минулому, і мій досвід був досить хорошим.

IMO, плюси використання бази даних для зберігання зображень,

A. Вам не потрібна структура FS для зберігання зображень
B. Індекси баз даних працюють краще, ніж дерева дерев FS, коли потрібно зберігати більшу кількість елементів
C. Розумно налаштована база даних виконує хорошу роботу при кешуванні результатів запиту
D. Резервні копії прості. Він також добре працює, якщо у вас налаштована реплікація і вміст доставляється з сервера, близького до користувача. У таких випадках явна синхронізація не потрібна.

Якщо ваші зображення будуть невеликими (скажімо, <64k), а система зберігання вашого db підтримує вбудовані (записуючі) BLOB, це ще більше покращує продуктивність, оскільки не потрібно ніяких опосередкованих дій (досягається локальність посилання).

Зберігання зображень може бути поганою ідеєю, коли ви маєте справу з невеликою кількістю зображень величезного розміру. Ще одна проблема зі збереженням зображень у db полягає в тому, що такі метадані, як створення, дати модифікації повинні оброблятися вашою програмою.


7

Нещодавно я створив додаток PHP / MySQL, який зберігає файли PDF / Word у таблиці MySQL (до цих пір становить 40 Мб на файл).

Плюси:

  • Завантажені файли реплікуються на сервер резервного копіювання разом з усім іншим, окрема стратегія резервного копіювання не потрібна (спокій).
  • Налаштування веб-сервера трохи простіше, тому що мені не потрібно мати завантаження / папку та повідомляти всі мої програми, де це.
  • Я можу використовувати транзакції для редагування для поліпшення цілісності даних - мені не потрібно турбуватися про осиротілі та відсутні файли

Мінуси:

  • mysqldump тепер займає багато часу, оскільки в одній з таблиць є 500 МБ файлових даних.
  • Загалом не дуже ефективна пам'ять / процесор порівняно з файловою системою

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


6

Своїм досвідом мені довелося керувати обома ситуаціями: зображеннями, що зберігаються в базі даних, та зображеннями у файловій системі із шлях, що зберігається у db.

Перше рішення, зображення в базі даних, є дещо «чистішим», оскільки ваш рівень доступу до даних повинен мати справу лише з об’єктами бази даних; але це добре лише тоді, коли вам доведеться мати справу з низькою кількістю.

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

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

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

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


4

Я колись працював над додатком для обробки зображень. Ми зберігали завантажені зображення в каталозі, який був на зразок / images / [сьогоднішня дата] / [номер ідентифікатора]. Але ми також витягли метадані (дані exif) із зображень і зберегли їх у базі даних, разом із часовою міткою тощо.


4

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

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


3

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

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

Схоже, краще було б вирішити посередницький скрипт, який витягує дані з веб-недоступного файлового сховища. Таким чином, зберігання БД дійсно не потрібно.


3

Слово на вулиці полягає в тому, що, якщо ви не продавець баз даних, який намагається довести, що ваша база даних може це зробити (як, скажімо, Microsoft, що вихваляється тим, що Terraserver зберігає мільярд зображень на SQL Server), це не дуже гарна ідея. Коли альтернатива - зберігання зображень на файлових серверах і шляхах у базі даних, набагато простіше, навіщо турбуватися? Польові кульки схожі на позашляхові можливості позашляховиків - більшість людей їх не використовує, ті, хто зазвичай потрапляє в біду, а є і такі, хто це робить, але тільки заради цього.


3

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

+ ves:

  • цілісність бази даних
  • це просте управління, оскільки вам не потрібно турбуватися про збереження файлової системи під час додавання чи видалення зображення

-вес:

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

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

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