Gdzie powinny być przechowywane pliki binarne użytkowników twojej aplikacji ? W systemie operacyjnym czy bazie danych ?
Jeśli użytkownicy twojej aplikacji mają przechowywać pliki - np. dokumenty w formacie pdf lub skany, zdjęcia, dźwięki czy filmy - to gdzie najlepiej będzie je magazynować ? Czy będzie to baza danych z możliwością przechowywania BLOB'ów ? Czy raczej katalog w systemie operacyjnym, a w bazie danych będzie przechowywana jedynie ścieżka do pliku i metadane ? Co decyduje o wyborze jednego z tych rozwiązań ?
Gdy powstawały relacyjne bazy danych u ich podstaw legła potrzeba przechowywania dużej ilości danych w małych porcjach i w określonym porządku. Podczas gdy systemy plików zostały zaprojektowane do przechowywania danych w dużych porcjach i bez określonego porządku. Gdzie obecnie leży granica wielkości pliku, za którą baza danych lub system plików będzie lepszym rozwiązaniem ?
Oto lista czynników wartych rozważenia:
- łatwość implementacji - jakimi kompetencjami i narzędziami dysponuje zespół tworzący aplikację
- prostota zarządzania i defragmentacji - jak często i jakim kosztem można przenosić i defragmentować dane
- wydajność - które z rozwiązań pozwala na wydajniejszy zapis/modyfikację i odczyt danych. Czy pozwala na modyfikację fragmentu pliku/BLOB'a czy zawsze nadpisuje całość ?
- synchronizacja - jakie rozwiązanie trzeba zastosować aby mieć spójny bekap i możliwość odtworzenia plików/BLOB'ów zsynchronizowanych z metadanymi
- bezpieczeństwo - inny system przywilejów w systemie operacyjnym i bazie danych
- transakcyjność - zapis pliku w bazie danych jest fragmentem transakcji natomiast zapis w systemie operacyjnym nie jest transakcją
- pliki w bazie danych są bezpieczne przed wirusami - są zapisane w wewnętrznych strukturach bazy danych bez bezpośredniego dostępu dla innych procesów systemu operacyjnego
- dzielenie ogromnych plików (np. wideo) na mniejsze, łatwiejsze w zarządzaniu kawałki
- scalanie dużej ilości maleńkich plików w archiwa, np. TAR lub ZIP
- odporność na uszkodzenia, np. pad systemu - większość systemów plików zabepiecza jedynie swoje wewnętrzne struktury, a nie zawartość plików podczas gdy baza danych skupia się na zabezpieczeniu danych
- zapis danych - systemy plików i systemy operacyjne dostosowują kolejność zapisu bloków pliku aby zwiększyć wydajność - nie zapisują sekwencyjnie. Natomiast baza danych grupuje zmiany w blokach aby zapisywać ich większe porcje razem - zapisuje sekwencyjnie.
- replikacja - jak spójnie replikować system plików i metadane z bazy danych, np. na potrzeby wysokiej dostępności lub do systemu testowego ?
- skalowalność - setki tysięcy, miliony czy nawet miliardy rekordów w pojedynczej tabeli (szczególnie spartycjonowanej) nie są wyzwaniem dla bazy danych, podczas gdy dziesiątki tysięcy plików w systemie plików są trudne do obsłużenia dla systemu operacyjnego
- audyt - bazy danych mają wbudowane narzędzia do audytu - kiedy i w jaki sposób uzyskano dostęp do konkretnego BLOB'a
A może trzecia opcja: trzymanie najczęściej wykorzytywanych BLOB'ów w systemie operacyjnym jako pliki + ich wzorzec w bazie danych, jest najbardziej optymalna ?
#oracle #database #mysql #postgresql #sqlserver #sql #BLOB #dba4dev #marcinbadtke
@several: nie marudź już. Bardzo fajny wpis