Moje pytanie jest dość ogólne i wiem, że może nie być odpowiedzi w 100%. Tworzę rozwiązanie internetowe ASP .NET, które będzie zawierało dużo obrazów i, miejmy nadzieję, sporo ruchu. Naprawdę chcę osiągnąć wydajność.
Czy powinienem zapisywać obrazy w bazie danych czy w systemie plików? I niezależnie od odpowiedzi, bardziej interesuje mnie, dlaczego wybrać konkretny sposób.
Wielkie dzięki, Stefan
DUPLIKAT : Przechowywanie obrazów w DB - Tak czy nie? , Jak przechowywać obrazy w systemie plików , Przechowywać niewielką liczbę obrazów: blob czy fs? i prawdopodobnie kilka innych.
KOMENTARZ: Dzięki za wiele dobrych odpowiedzi. Zdecyduję się na rozwiązanie oparte na plikach, nawet jeśli podoba mi się pomysł posiadania rozwiązania opartego w 100% na bazie danych. Wygląda na to, że są dzisiaj dobre rozwiązania, aby robić to, co chcę z bazami danych itp., Ale mam kilka powodów, aby tego nie robić.
Będę na rozwiązaniu hostowanym, mam ogromną ilość pamięci (10 GB), ale tylko 300 MB na bazę danych. Dodatkowa pamięć w bazie danych będzie dużo kosztować.
Nie jestem ekspertem od DB, a także nie kontroluję ustawień DB. Rozwiązanie oparte na bazie danych może wymagać niestandardowej konfiguracji, jak to wygląda.
Jeśli przejdziemy do uruchomienia witryny na naszym własnym serwerze, mógłbym rozważyć rozwiązanie oparte na bazie danych. dzięki, Stefan
źródło
Odpowiedzi:
Przechowuj obrazy w systemie plików i lokalizacje obrazów w bazie danych.
Czemu? Ponieważ...
źródło
W moich ostatnio opracowanych projektach zapisywałem obrazy (i wszelkiego rodzaju dokumenty binarne) jako kolumny obrazów w tabelach bazy danych.
Zaletą posiadania plików przechowywanych w bazie danych jest oczywiście to, że po usunięciu rekordu na dysku twardym nie zostaną zapisane pliki bez odniesień, ponieważ synchronizacja między bazą danych (= metadane) a dyskiem twardym (= przechowywanie plików) nie jest wbudowana i musi być programowany ręcznie.
Korzystając z dzisiejszej technologii, sugeruję przechowywanie obrazów w kolumnach FILESTREAM SQL Server 2008 (przynajmniej to mam zamiar zrobić z moim następnym projektem), ponieważ łączą one zalety przechowywania danych w bazie danych ORAZ posiadania dużych plików binarnych w osobnych plikach (w najmniej według reklam;))
źródło
Porzekadłem zawsze było „Pliki w systemie plików, metadane plików w bazie danych”
źródło
Lepiej przechowywać pliki jako pliki. Różne bazy danych obsługują dane Blob w różny sposób, więc jeśli musisz przeprowadzić migrację zaplecza, możesz mieć kłopoty.
Podczas udostępniania obrazów <img src = do pliku, który już istnieje na serwerze, prawdopodobnie będzie szybsze niż utworzenie pliku tymczasowego z pola bazy danych i wskazanie na to znacznika <img.
Znalazłem tę odpowiedź, szukając go w Google na Twoje pytanie i czytając komentarze pod adresem http://databases.aspfaq.com/database/should-i-store-images-in-the-database-or-the-filesystem.html
źródło
Zwykle lubię mieć pliki binarne w bazie danych, ponieważ:
źródło
Przechowywanie obrazów w bazie danych dodaje obciążenie bazy danych do obsługi pojedynczych obrazów i utrudnia odciążenie ich do alternatywnego magazynu (S3, Akami), jeśli osiągniesz ten poziom. Przechowywanie ich w bazie danych znacznie ułatwia przenoszenie aplikacji na inny serwer, ponieważ tylko baza danych musi teraz zostać przeniesiona.
Przechowywanie obrazów na dysku ułatwia ich przenoszenie do innego magazynu, sprawia, że obrazy stają się statycznymi elementami, dzięki czemu nie musisz martwić się o nagłówki HTTP w aplikacji internetowej, aby obrazy można było buforować. Wadą jest to, że jeśli kiedykolwiek przeniesiesz swoją aplikację na inny serwer, musisz pamiętać o przeniesieniu również obrazów; coś, o czym łatwo zapomnieć.
źródło
W przypadku aplikacji internetowych uzyskasz lepszą wydajność dzięki wykorzystaniu systemu plików do przechowywania obrazów. Pozwoli to na łatwe zaimplementowanie buforowania obrazów na wielu poziomach aplikacji. Przechowywanie obrazów w bazie danych ma pewne zalety, ale w większości przypadków są one związane z aplikacjami klienckimi.
źródło
Dodam trochę więcej do i tak już dobrych odpowiedzi. Nadal możesz czerpać korzyści z buforowania, być może zarówno z poziomu WWW, jak i poziomu bazy danych, jeśli pójdziesz ścieżką utrzymywania obrazów w bazie danych.
Myślę, że w przypadku bazy danych można to osiągnąć przez to, jak przechowujesz obrazy w odniesieniu do powiązanych z nimi danych tekstowych i czy możesz uzyskać dostęp do obrazów w określonym zapytaniu, aby baza danych mogła buforować zapytanie (choć tylko teoria nie krępuj się mnie z tej strony nuke).
Jeśli chodzi o stronę internetową, myślę, że skoro pytanie jest oznaczone tagiem asp.net, skorzystasz z procedury obsługi protokołu http do obsługi obrazów. Wtedy masz do dyspozycji wszystkie zalety platformy i możesz zachować czystość logiki domeny, wystarczy przekazać klucz do obrazu do modułu obsługi http.
źródło
Dlaczego nie wybrać indywidualnej bazy danych NoSql do przechowywania plików.
Zapewnia integralność danych, spójność danych, o czym wspomniał @chburd.
Podczas gdy ty rdbms nadal trzymaj małe.
źródło
Eclipse
) przechowywania obrazów w systemie plików i przechowywania ich metadanych w bazie danych - http://www.devmanuals.com/tutorials/java/spring/spring3/mvc /Spring3MVCImageUpload.htmlźródło