2011-12-20 22 views
6

Projektujemy aplikację .NET, która przechowuje i przeszukuje dużą liczbę obrazów (> 100 000).Dobrze jest użyć strumienia plików do przechowywania zdjęć i miniatur?

Po przesłaniu zdjęcia musimy utworzyć miniaturę i zapisać oryginalny obraz oraz miniaturę w DB (SQL Server 2008 R2).

Czytałem, że najlepszym sposobem na przechowywanie obrazów używa FILESTREAM

http://msdn.microsoft.com/en-us/library/cc949109.aspx

ale gdy obrazy są mniejsze to ineficient.

Czy warto przechowywać obrazy i miniatury przy użyciu strumienia plików? Jest lepsza alternatywa?

Odpowiedz

9

Istnieje bardzo dobra publikacja firmy Microsoft Research pod tytułem To Blob or Not To Blob, która omawia dokładnie ten temat.

Ich wniosek po dużej liczbie testów wydajnościowych oraz analiza jest taka:

  • jeśli zdjęcia lub dokumentu są zwykle poniżej 256K wielkości, przechowywanie ich w bazie danych VARBINARY kolumna jest bardziej wydajny

  • jeśli twoje zdjęcia lub dokument mają zwykle rozmiar powyżej 1 MB, przechowywanie ich w systemie plików jest bardziej wydajne (i z atrybutem SQL Server 2008 o wartości FILESTREAM, nadal podlegają one kontroli transakcji i stanowią część bazy danych)

  • pomiędzy tymi dwoma, to trochę wrzucić-up w zależności od zastosowania

Jeśli zdecydujesz się umieścić swoje zdjęcia do tabeli SQL Server, gorąco polecam korzystania osobną tabelę dla przechowywanie tych zdjęć - nie przechowuj zdjęcia pracownika w tabeli pracownika - trzymaj je w osobnym stoliku. W ten sposób tabela Employee może pozostać szczupła, średnia i bardzo wydajna, zakładając, że nie zawsze trzeba również wybierać zdjęcia pracownika jako część swoich zapytań.

Dla grup plików, sprawdź Files and Filegroup Architecture dla intro. Zasadniczo można utworzyć bazę danych z oddzielną grupa plików dla dużych struktur danych od samego początku lub dodać dodatkową grupę plików później. Nazwijmy to "LARGE_DATA".

Teraz, gdy masz nową tabelę do tworzenia, który musi przechowywać VARCHAR(MAX) lub VARBINARY(MAX) kolumn, można określić tę grupę plików dla dużych danych:

CREATE TABLE dbo.YourTable 
    (....... define the fields here ......) 
    ON Data     -- the basic "Data" filegroup for the regular data 
    TEXTIMAGE_ON LARGE_DATA -- the filegroup for large chunks of data 

Sprawdź wstęp MSDN na grupach plików, a baw się z nim!

+0

Prawdą jest, że we wszystkich zapytaniach musimy wybrać miniaturę LUB zdjęcie (miniaturę do wyszukiwania wyników i zdjęcie przy wejściu, aby wyświetlić dane obrazu). W takim przypadku musimy również rozdzielić dwa rzędy? –

2

Właściwie właściwa odpowiedź - to zależy. Jeśli obrazy są stosunkowo małe - możesz zachować je w polu varbinary (max).

Dlaczego nie FILESTREAM? - Wydajność FILESTREAM osiąga maksimum na dużych wartościach BLOB - 1Mb +

Powiązane problemy