Witam,
Dawno temu (Firebird 1.5) pisałem w pracy program którego zadaniem było przechowywanie plików (głównie JPG ~4MB). Wówczas odradzano mi trzymanie plików w bazie (BLOB), zamiast tego tylko ścieżki do katalogów w któych ów pliki były przechowywane. Powód jaki usłyszałem to "baza sie wysypie przy tak dużej ilości dużych plików". Od tamtego czasu z dystansem podchodzę do BLOB'ów, właściwie jeszcze nigdy nie miałem okazji sprawdzić ich w praktyce.
Obecnie sam piszę aplikację która będzie przechowywać pliki i postanowiłem sprawdzić jak to jest naprawdę z tymi blobami. Otóż znalazłem same superlatywy: http://www.firebirdfaq.org/faq277/
it makes it easy to do backup and restore
aviods the need to keep the database and disk directory in sync - which can be tricky if someone (beside your application) is allowed the directory access
simplifies the true client-server applications, since file transfer is done by Firebird - just like other data and you don't have to implement some other file transfer protocol (FTP, Windows networking, etc.). This is especially important if application works in distributed environment with many network layers (firewalls, switches, routing, etc.) in between.
removes the need for users to keep the file names unique
Tak więc moje pytanie brzmi. Jak sprawują się bloby na froncie? Ktoś już miał z nimi doświadczenie (najlepiej Lazarus + ZEOS). Moje obawy:
- Jak mocno, ale naprawdę, JAK MOCNO stabilna jest taka baza? Wiadomo, że baza się szybko rozpycha, nawet przy usuwaniu pliku nie znika on z bazy tylko jest oznaczany do usunięcia i fizycznie zostaje usunięty podczas robienia backupu. Co jak baza ma kilkadziesiąt GB? Ile trwa backup? Czy spada wydajność zapytań do tablic które nie mają nic wspólnego z blobami?
- Czy można taką bazę podzielić na 2? Osobna np. dla tablic zawierających tylko pliki i osobna dla pozostałych? Chodzi mi o to żeby można było dalej szybko robić backupy ważnych danych (faktury, itd) a backup plików tylko raz na jakiś czas
- Czy jest jakieś ograniczenie co do wielkości dodawanego pliku? Czy można bez obaw dodać plik który ma kilkaset MB?
- Czy można monitorować strumień danych które baza wysyła/odbiera? Chodzi mi tu o możliwość zrobienia czegoś w rodzaju paska postępu, np. jak plik ma kilkadziesiąt MB to żeby było widać ile danych pobrano/wysłano
Pozdrawiam