Buduję aplikację mvc asp.net, w której użytkownicy mogą dołączać obraz do swojego profilu, ale także w innych obszarach systemu, takich jak gadżet przesyłania wiadomości na pulpicie, który wyświetla najnowsze wiadomości itp.Przechowuj zdjęcia profilów użytkowników na dysku lub w bazie danych?
Gdy użytkownik przesyła je zastanawiam się, czy lepiej byłoby przechowywać je w bazie danych lub na dysku.
databse zalety
łatwe do tworzenia kopii zapasowych całej bazy danych i zachować zawartość profil/obrazy z powiązanych tabel profil/użytkownika
kiedy zbudować usług internetowych później w dół toru, mogą po prostu wyciągnij wszystkie dane związane z profiile z jednego miejsca (bazy danych)
Systemu plików zalety
wczytywania plików z dysku jest prawdopodobnie szybciej
jakieś inne zalety?
Gdzie inne witryny przechowują tego rodzaju informacje. Czy mam rację, troszcząc się nieco o wydajność bazy danych dla czegoś takiego?
Być może istnieje sposób buforowania obrazów wyciągniętych z bazy danych przez pewien okres czasu?
Alternatywnie, co z pomysłem przechowywania tych obrazów w bazie danych, ale kopiowaniem ich na dysk tak, aby serwer WWW mógł je tam załadować? Wydaje się, że zapewnia to zarówno tworzenie kopii zapasowej, jak i wygodę Db, przy jednoczesnym zapewnieniu przewagi szybkości plików na dysku.
infrastruktura
- Witryna zostanie wdrożony do IIS na serwerze Windows 2003 uruchomionym systemie plików NTFS.
- Baza będzie SQL Server 2008
Podsumowanie
Reading wokół na wiele pokrewnych wątków tutaj na SO, wiele osób jest teraz trendy w kierunku typu SQL Server FILESTREAM. Jednak z tego, co mogłem zebrać (może się mylę), nie ma wiele korzyści, gdy pliki są dość małe. Jednak program Filestreaming znacznie poprawia wydajność, gdy pliki mają wiele MB lub więcej.
Ponieważ moje zdjęcia profilowe mają zazwyczaj około ~ 5kb, postanowiłem po prostu zostawić je w magazynie plików w bazie danych jako varbinary (max).
W środowisku ASP.NET MVC widziałem problem z wydajnością zwracający FileContentResults dla obrazów wyciągniętych z bazy danych w ten sposób. Więc zakończyłem buforowanie pliku na dysku, gdy zostanie odczytany, jeśli lokalizacja tego pliku nie zostanie znaleziona w mojej pamięci podręcznej aplikacji.
Sądzę, że wybrałem hybrydę;
- przechowywanie bazy danych, aby pieczenia zapasowych danych łatwiejszych i pliki związane są bezpośrednio do profili
- Cień kopiowanie na dysk, aby umożliwić lepsze buforowania
W dowolnym momencie można usunąć folder pamięci podręcznej na dysku , a ponieważ obrazy są ponownie zgłaszane, zostaną one ponownie skopiowane przy pierwszym trafieniu i dostarczone z tamtejszej skrzynki.
Powinieneś przeczytać: http://stackoverflow.com/questions/3748/storing-images-in-db-yea- or-nay – Anders
Przepraszamy, istnieje kilka literówek z moim pytaniem. Wpisuję to z mojego iPhone'a. Będę edytować, kiedy dojdę do komputera. –
Dzięki anders, to było dokładnie to, czego szukałem. Mnóstwo widoków i opinii w tym wątku, który łączyłeś. –