Myślisz, że zarabiasz tyle, na ile zasługujesz? Zapraszamy do wzięcia udziału w anonimowej ankiecie.
2

Witam,

przygotowuję się do napisania aplikacji, która będzie musiała przechowywać duże ilości obrazów i plików (jpg, pdf-y etc.) w bazie danych. Pliki liczone będą w dziesiątkach i setkach tysięcy na przestrzeni roku. Zastanawiam się nad rozwiązaniem, przechowywania plików bezpośrednio w tabeli, ale z drugiej strony obawiam się o wielkość i wydajność bazy. Może lepszym rozwiązaniem jest trzymanie tych plików w katalogach, a w bazie linków do nich? Z linkami obawiam się problemów o zagubione pliki, błędne ścieżki i zbyt rozbudowaną strukturę katalogów.

Na początku będzie to aplikacja webowa (aspx), ale później na pewno będzie też dodatek w postaci aplikacji okienkowej.

Czy ma ktoś jakieś rady, żebym nie zrobił falstartu na samym początku?

Pozdrawiam, Kuba

flag

2 Answers

3

Jeśli głównym celem aplikacji jest przechowywanie plików i zależy Ci na tym, aby je wszystkie mieć w jednym miejscu razem z resztą danych to ok. Można je trzymać w bazie.

Jeśli natomiast aplikacja faktycznie ma zbierać duże ilości plików, ale poza tym będzie mocno wykorzystywana we wszelakich operacjach specyficznych dla aplikacji OLTP (duża ilość transakcji/operacji/itp) to nie polecam napychania bazy plikami.

Wtedy lepiej jest trzymać pliki w miejscu dobrze na to przygotowanym, czyli w systemie plików na dysku, a w bazie tylko linki do nich oraz resztę potrzebnych informacji.

Pozwoli Ci to na optymalizację działania bazy dla operacji transakcyjnych, a pliczki będziesz szybko pobierał bezpośrednio z dysku (a nie przez te wszystkie mechanizmy potrzebne do połączenia z serwerem bazy danych, itd). Szkoda zasobów.

Jeśli będzie to stało na odpowiedniej maszynie z macierzą dyskową to spokojnie można podzielić dyski tak, aby wydzielić przestrzeń na dyskach macierzy dla plików oraz osobno dla bazy danych.

Takie rozwiązanie stosuję w sumie we wszystkich swoich projektach. :)

link|flag
Wybierając rozwiązanie plików na dysku i stronie aspx nie ma problemu. Ale w jaki sposób odnosić się do nich z aplikacji okienkowej z innego komputera pracującego w sieci ? – Kuba Jan 23 at 11:34
1 
Ogólnie: Po stronie serwera serwis serwujący dany plik na żądanie (Remoting, WebService, etc), z którym łączy się aplikacja okienkowa czy aplikacja webowa. Dzięki temu można nałożyć reguły dostępu do plików na poziomie całej aplikacji. – dario-g Jan 23 at 12:10
1

W wersji 2008 SQL Servera pojawił się nowy typ danych FILESTREAM, on właśnie przechowuje pliki na dysku zarządzane przez mechanizm SQL Servera, jednak z tego co czytalem (jeszcze nie miałem czasu potestować) typ ten opłaca się stosować dla plików większych niż 1MB.

link|flag

Your Answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.