Téma: ukládání dokumentů na serveru
Hlavní komunikaci klienta se serverem zprostředkovávají formuláře.
Systém by měl fungovat jako datový sklad pro dokumenty, uploadované na server společně s připojením popisných údajů-vlastní název souboru, poznámky, propojení s nabídnutým číselníkem, atd.
Popisná data dokumentu budeme ukládat do databáze, ale co se samotnými dokumenty, které můžou být také binární data-obrázky, mp3, všemožné doc, xls?
Nabízí se několik možností:
Popisná data uložíme do databáze (DB) a dokument přímo do filesystému (FS) na serveru. Součástí popisných dat v DB bude odkaz na tento dokument ve FS.
- + Dokumenty ve FS je možné sdílet a přistupovat k nim i jinak, než jen přes rozhraní systému. Třeba jen pro čtení. V Linuxu lze nastavit sdílení složky s dokumenty např. přes Sambu a klienti mají možnost otevírat soubory přímo ze serveru, což může být někdy rychlejší, než přistupovat přes browser.
- + Dokážeme tak ukládat i velké objemy dat (mnoho velkých dokumentů). Protože databáze uchovává pouze popisná data, mohla by být menší a rychlejší.
- +/- Data na dvou místech - pokud spadne DB, dokumenty máme jinde (řeší kvalitní záloha). Avšak musíme se starat o zálohu dvojí.
- - Obtížná implementace fulltextového prohledávání dokumentů. Pokud umíme pracovat s určitým typem dokumentu, pak výsledky vyhledávání zřejmě budeme muset taky ukládat do databáze. Pak by v DB byla popisná data a výsledky fulltextu. Odkaz na dokument ve FS.
- - Neustále je třeba kontrolovat konzistenci dat, pokud se smaže dokument v DB, musí se smazat i ve FS a naopak. Tohle je asi největší problém.
Vše uložíme do DB. Binární data dokumentu budou jako datový typ blob, bytea, large object, apod.
- + Vše na jednom místě. Vyřešíme tím dokonale provázání popisných dat a dat dokumentu.
- + Fulltextové prohledávání (pokud umíme s daty dokumentu nějak pracovat) bude řešit DB.
- ? Rychlost a náročnost DB. Tady opravdu netuším, jaké bude mít DB odezvy, pokud v ní budeme mít několik GB dokumentů.
Téma: Co si myslíte o jednotlivých řešeních? Napadá vás nějaký jiný, rozumný a pokud možno co nejjednodušší návrh?