Przechowywać obrazy w bazie danych lub w plikach z łączem do bazy danych?


22

Czy właściwe jest przechowywanie plików obrazów w bazie danych? Czy lepiej byłoby przechowywać tylko ścieżkę pliku w bazie danych, zachowując sam plik na serwerze?

Czy są jakieś inne metody, aby zrobić to dobrze?

Odpowiedzi:


22

Zdecydowanie radzę przechowywać obrazy w systemie plików, a nie w bazie danych.

Przechowywanie obrazów w bazie danych ma kilka wad:

  • Baza danych może się nieoczekiwanie powiększyć. Czasami problem stanowi miejsce. Na przykład z SQLServer express masz limit 4 GB.

  • Migracje danych mogą być uciążliwe, na przykład po przejściu z SQLServer na Oracle

  • Kwerendy mogą stać się bardzo wolne i będziesz mieć duże obciążenie bazy danych

  • Interoperacyjność z innymi aplikacjami jest lepsza, jeśli obrazy znajdują się w systemie plików, a inne aplikacje używają innej bazy danych. Możesz również uzyskać do nich bezpośredni dostęp i nie potrzebujesz narzędzi bazy danych.

  • Gorsze wyniki w ogóle

  • Prawdopodobnie będziesz musiał utworzyć pliki tymczasowe podczas pobierania obrazów z bazy danych. To niepotrzebne.

Te wady znacznie przewyższają koszt utrzymania synchronizacji ścieżek do obrazów przechowywanych w bazie danych z systemem plików. Istnieje tylko kilka specjalnych przypadków, w których lepiej jest przechowywać obrazy w bazie danych.


11

Badanie SQL Server 2005 i systemu plików NTFS (Microsoft) w celu porównania wydajności CRUD: do BLOB lub nie do BLOB . Badanie przeprowadzono również w aplikacji internetowej. Wymieniłeś kolejną bazę danych (MySQL) i założę się, że nie używasz Windows Servera na swojej stronie PHP, więc byłoby interesujące, gdyby ktoś przeprowadził podobne badanie różnych technologii.

Okazuje się, że zależy to od wielkości plików. SQL Server faworyzuje (2x lepiej) obiekty BLOB o wielkości 256 KB lub mniej, a system plików preferuje pliki o wielkości 1 MB +. Systemy plików w tym badaniu lepiej radzą sobie z fragmentacją niż baza danych, więc jeśli ciągle aktualizujesz te pliki lub ten system rośnie z czasem, fragmentacja będzie większym czynnikiem, który system plików wykona lepszą robotę.

Musisz ustalić, jak odpowiedzialna jest Twoja witryna za utrzymanie tych plików. Jeśli budujesz witrynę dla agentów ds. Roszczeń ubezpieczeniowych w celu przesyłania zdjęć wypadku, lepiej kontroluj transakcje i upewnij się, że te pliki znajdują się na serwerze. Dobre bazy danych to robią za Ciebie, więc jako deweloper zwiększyłeś presję.

Podczas projektowania należy wziąć pod uwagę replikację, tworzenie kopii zapasowych, odzyskiwanie po awarii, fragmentację, pozostałą pojemność dysku i wydajność w czasie. To tylko jedno badanie poprzedniej wersji programu SQL Server i, podobnie jak inni producenci baz danych, zgaduję, że obsługa dużych plików i plików binarnych jest główną konkurencją.


Możesz również rozważyć zintegrowane rozwiązania. Na przykład na serwerze SQL istnieje FILESTREAM i Remote Blob Store .
Fernando Correia,

4

Jeśli masz mieć ogromną liczbę obrazów, przechowywanie ich w bazie danych może usunąć problemy z brakiem i-węzłów na poziomie systemu plików.

Jednak ten problem najlepiej byłoby rozwiązać, stosując bardziej odpowiedni system plików i wszelkie środki zalecane dla tego systemu plików w organizacji.

W przeciwnym razie przechowywanie obrazów w bazie danych jest całkowitym marnotrawstwem zasobów. Przechowuj ścieżkę tak, jak powiedziałeś.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.