Zrobiłem małą stronę demonstracyjną i na niej przechowuję obrazy w kolumnie obrazu na serwerze sql. Mam kilka pytań ...
Czy to zły pomysł?
Czy wpłynie to na wydajność mojej witryny, gdy będzie rosła?
Alternatywą byłoby przechowywanie obrazu na dysku i przechowywanie wyłącznie odwołania do obrazu w bazie danych. To musi być powszechny dylemat wielu ludzi. Z radością powitałbym kilka rad, a gdybym mógł, z przyjemnością popełniłbym mniejszy błąd.
sql-server
image
marko
źródło
źródło
Odpowiedzi:
Istnieje naprawdę dobry artykuł firmy Microsoft Research o nazwie To Blob lub Not To Blob .
Ich wnioski po dużej liczbie testów wydajności i analiz są następujące:
jeśli twoje zdjęcia lub dokumenty mają zwykle rozmiar mniejszy niż 256 KB, przechowywanie ich w kolumnie VARBINARY bazy danych jest bardziej wydajne
jeśli twoje zdjęcia lub dokumenty mają zwykle ponad 1 MB, przechowywanie ich w systemie plików jest bardziej wydajne (a dzięki atrybutowi FILESTREAM programu SQL Server 2008 nadal są one kontrolowane transakcyjnie i stanowią część bazy danych)
pomiędzy tymi dwoma, jest to trochę podrzucenie w zależności od twojego zastosowania
Jeśli zdecydujesz się umieścić swoje zdjęcia w tabeli programu SQL Server, zdecydowanie zalecam użycie osobnej tabeli do przechowywania tych zdjęć - nie przechowuj zdjęcia pracownika w tabeli pracownika - przechowuj je w osobnej tabeli. W ten sposób stół pracownika może pozostać szczupły, wredny i bardzo wydajny, zakładając, że nie zawsze musisz wybierać zdjęcie pracownika również w ramach twoich zapytań.
W przypadku aplikacjami zapoznaj się z wprowadzeniem Pliki i architektura aplikacjami. Zasadniczo albo utworzysz bazę danych z osobną aplikacją dla dużych struktur danych od samego początku, albo dodasz dodatkową grupę plików później. Nazwijmy to „LARGE_DATA”.
Teraz, gdy masz nową tabelę do utworzenia, która musi przechowywać kolumny VARCHAR (MAX) lub VARBINARY (MAX), możesz określić tę grupę plików dla dużych danych:
Sprawdź wprowadzenie MSDN na aplikacjach internetowych i baw się z nim!
źródło
Raz wpadłem w ten dylemat i sporo szukałem w Google opinii. Odkryłem, że rzeczywiście wielu widzi lepiej zapisywanie obrazów na dysku dla większych obrazów, podczas gdy mySQL pozwala na łatwiejszy dostęp, szczególnie z języków takich jak PHP.
Znalazłem podobne pytanie
MySQL BLOB vs plik do przechowywania małych obrazów PNG?
Mój ostateczny werdykt był taki, że w przypadku takich rzeczy, jak zdjęcie profilowe, tylko mały kwadratowy obraz, który musi być tam na użytkownika, mySQL byłoby lepsze niż przechowywanie garści kciuków na dysku twardym, podczas gdy w przypadku albumów ze zdjęciami i podobnych rzeczy folderów Pliki / image są lepsze.
Mam nadzieję, że to pomoże
źródło
Wolałbym przechowywać obraz w katalogu, a następnie przechowywać odniesienie do pliku obrazu w bazie danych.
Jeśli jednak przechowujesz obraz w bazie danych, powinieneś podzielić bazę danych na partycje, aby kolumna z obrazem znajdowała się w osobnym pliku.
Możesz przeczytać więcej o korzystaniu z aplikacjami tutaj http://msdn.microsoft.com/en-us/library/ms179316.aspx .
źródło
Dlaczego warto przechowywać zdjęcia w bazie danych, a nie w katalogu na serwerze WWW.
Utworzyłeś aplikację z dużą ilością zdjęć przechowywanych w folderze na serwerze, z którego klient korzystał od lat.
Teraz przychodzą do ciebie. Serwer został zniszczony i muszą go przywrócić na nowym serwerze. Nie mają już dostępu do starego serwera. Jedyne, co mają, to kopia zapasowa bazy danych.
Masz oczywiście źródło i możesz go łatwo wdrożyć na nowym serwerze, zainstalować SqlServer i przywrócić bazę danych. Ale teraz wszystkie zdjęcia zniknęły.
Jeśli zapisałeś zdjęcia w SqlServer, wszystko będzie działało jak poprzednio.
Tylko moje 2 centy.
źródło
Podczas przechowywania obrazów w SQL Server nie używaj typu danych „image” , według MS jest on stopniowo wycofywany w nowych wersjach SQL Server. Zamiast tego użyj varbinary (max)
https://msdn.microsoft.com/en-us/library/ms187993.aspx
źródło
W 2012 r. Wydano kolejną opcję o nazwie Tabele plików: https://msdn.microsoft.com/en-us/library/ff929144.aspx
źródło
Chociaż problemy z wydajnością są ważne, prawdziwymi przyczynami, dla których należy unikać przechowywania obrazów w bazie danych, są przyczyny zarządzania bazą danych. Twoja baza danych rośnie bardzo szybko, a bazy danych kosztują znacznie więcej niż zwykłe przechowywanie plików. Tworzenie kopii zapasowych i przywracanie danych jest znacznie droższe i czasochłonne niż w przypadku przywracania kopii zapasowych plików. W skrócie, możesz przywrócić mniejszą bazę danych znacznie szybciej niż nadęty z obrazami. Porównaj 1 TB przestrzeni dyskowej na platformie Azure z bazą danych 1 TB, a zobaczysz ogromną różnicę w kosztach.
źródło
Z mojego doświadczenia wynika, że przechowywanie do adresu URL obrazów przechowywanych w innym miejscu jest najlepszym sposobem na prosty projekt.
źródło