2012-07-11 16 views
7

Mam taki wymóg, który mówi, że aplikacja musi umożliwiać użytkownikom przesyłanie i pobieranie około 6000 plików miesięcznie (głównie pliki pdf, doc, xls).Bloby baz danych kontra przechowywane na dysku pliki

Myślałem o optymalnym rozwiązaniu tego problemu. Pytanie brzmi, czy użyję BLObów w mojej bazie danych, czy prostej hierarchii plików do zapisu/odczytu tych plików.

Architektura aplikacji oparta jest na Java 1.6, Spring 3.1 i DOJO, Informix 10.X.

Więc jestem tu po to, aby otrzymać poradę na podstawie twojego doświadczenia.

+0

Jakiej bazy danych zamierzasz użyć? –

+0

Dobrze, to Informix 10.X –

+1

Przypuszczam, że jedyną punktową bazą danych byłby dostęp do współbieżności ... Ale w każdym razie, bazy danych również używają plików (niektóre z nich najczęściej korzystają z pamięci RAM, ale po wypełnieniu buforują pliki). Bezpośrednie użycie plików zapisze zasoby DB (połączenia, zapytania itp.) – PEM

Odpowiedz

6

Jeśli masz inne dane w bazie danych w odniesieniu do tych plików, przechowywanie plików w systemie plików sprawia, że ​​jest bardziej złożona:

  1. Back-up powinny być wykonywane oddzielnie.
  2. Transakcje należy oddzielnie wdrażać (o ile to możliwe nawet w przypadku operacji na systemie plików).
  3. Kontrola integralności między bazą danych a strukturą systemu plików nie wychodzi z pudełka.
  4. Brak kaskad: usuwanie zdjęć użytkowników w wyniku usunięcia użytkownika.
  5. Najpierw należy wyszukać ścieżkę pliku z bazy danych, a następnie wybrać jedną z systemu plików.

To, co jest dobre z rozwiązaniem opartym na systemie plików, polega na tym, że czasami można uzyskać bezpośredni dostęp do plików, na przykład kopiowanie części obrazów w innym miejscu. Również przechowywanie danych binarnych może oczywiście radykalnie zmienić rozmiar bazy danych. Jednak w każdym przypadku potrzeba więcej miejsca na dysku w przypadku obu rozwiązań.

Oczywiście wszystko to może wymagać więcej zasobów DB niż obecnie dostępne. Generalnie może nastąpić znaczące obniżenie wydajności, zwłaszcza jeśli decyzja dotyczy lokalnego systemu plików i zdalnej bazy danych. W twoim przypadku (6000 plików miesięcznie) nie będzie problemu z nieprzetworzoną wydajnością, ale może być opóźnienie.

9

Kiedy pyta, co jest „najlepsze” rozwiązanie, że to dobry pomysł, aby to kryteria oceny - prędkość, koszt, prostota, konserwacji, itp

Odpowiedź Mikko Maunu dał dość dużo na pieniądze. Nie używałem Informix od 20 lat, ale większość baz danych jest nieco powolna, gdy mamy do czynienia z BLOB-em, zwłaszcza że krok na drodze do przeniesienia BLOBa do bazy danych może być powolny.

Ten problem jest coraz gorszy, ponieważ coraz więcej użytkowników uzyskuje dostęp do systemu w tym samym czasie, zwłaszcza jeśli używa aplikacji internetowej - serwer aplikacji musi dość ciężko pracować, aby pobrać i wyrzucić pliki z bazy danych, prawdopodobnie zużywa znacznie więcej pamięci dla tych próśb niż normalnie i prawdopodobnie zajmuje więcej czasu, aby ukończyć żądania związane z plikami niż dla "normalnych" stron.

Może to prowadzić do spowolnienia serwera WWW przy tylko umiarkowanym obciążeniu. Jeśli zdecydujesz się na przechowywanie dokumentów w bazie danych, zdecydowanie zaleciłbym przeprowadzenie testów wydajności, aby sprawdzić, czy masz problem - takie rozwiązanie może ujawnić błędy w konfiguracji, które w innym przypadku nie mogłyby wyjść na jaw (powolna sieć połączenie z serwerem bazy danych, niewystarczająca ilość pamięci RAM na serwerach internetowych itp.)

Aby tego uniknąć, zachowałem "master" kopie dokumentów w bazie danych, aby wszystkie zostały połączone, a ja może zadawać pytania bazy danych, takie jak "czy mam wszystkie dokumenty dla użytkownika x?".Jednak użyłem pamięci podręcznej na serwerze internetowym, aby uniknąć konieczności czytania dokumentów z bazy danych bardziej, niż było to konieczne. Działa to dobrze, jeśli masz rozwiązanie "napisz raz, czytaj wiele", takie jak system zarządzania treścią, w którym pamięć podręczna może zarobić na swoje utrzymanie.

Powiązane problemy