Portál AbcLinuxu, 13. května 2025 22:00
Zdravim,
nie som prilis expert na veci okolo databaz, tak by som sa chcel spytat -- mam (server) aplikaciu, ktora komunikuje s databazou. V tejto DB musi byt o.i. ulozeny aj binarny obsah, zhruba 2-3 MB na kazdeho pouzivatela. Kedze ide o data, ktore si klient k sebe stiahne, nie je problem ich mat ulozene niekde externe a v DB mat len cestu, kde ich potom server aplikacia najde.
Chcel by som sa spytat, ma nejaky zmysel uvazovat nad BLOBom? Je mi jasne, ze cesta vnasa trochu redunancie (zmenim cestu, musim zmenit aj umiestnenie na disku), ale zase predpokladam, ze ziskanie informacie od DB o ceste a nasledne nahranie uz pomocou server aplikacie je neporovnatelne rychlejsie a menej stresujucejsie pre DB... v akych pripadoch by ste ten BLOB doporucili pouzit?
Ja som na to išiel tak, že som si povedal: chcem aby môj dump databázy mal 70 mega, alebo 70 giga? Zvíťazilo 70 mega. :) Navyše keď to je v súboroch, tak sa nad tým dajú jednoducho spúšťať ďalšie príkazy - clamscan, file, convert, a tak. Na druhej
strane vynútenie integrity dát je ta tam...
70 GB dump je neskladný. Neviem to rýchlo preniesť na devel server, lebo ten má "len" 2 MBit linku a trvá to 3 dni. Plus spravím na serveri 4 denné snapshoty a voľné miesto sa tým minulo.
Keď to je v súboroch ktoré sa príliš nemenia, tak viem preniesť zmeny cez rsync za pár minút, a pre denné zálohy mám miesto na celý rok.
Okrem toho viem fileserver oddeliť od DB serveru, až nastane ten čas, že to jeden server všetko neutiahne.
Tech 70 giga je presne ten duvod proc bys' to do DB dat mel. Pokud zalohuje data aplikace, tak bys mel zazalohovat opravdu vsechna data. Zalohy delas proto, abys' je moh pouzit pro obnovu. Kcemu ti bude dump DB s cestama k neexistujicim souborum?
Robiť zálohu 70 GB každý deň? Netúžim 2x denne bežať do serverovne (niekoľko km vzdialenej) a meniť pásku. Neviem dosť dobre urobiť rozdielový SQL dump - diff medzi dvoma súbormi väčšími už len ako 500 MB skončil zatiaľ vždy katastrofou. Preto zálohujem celý dump (70 M), a súbory potom už len inkrementálne. Pri obnove najprv obnovím DB a následne budem riešiť súbory. Radšej než oboje naraz - keď nie je DB tak sa nedá ani len prihlásiť, zatiaľčo keď nie sú súbory, tak sa dá so systémom pracovať celkom v pohode, len nie sú k dispozícii niektoré funkcie.
Aha, takze ty vlastne jenom obchazis to, ze tvoje DB neumi inkrementalni zalohy. Nebylo by jednodussi zamerit se rovnou na ty incrementalni zalohy?
Je dosť možné, že to tá DB podporuje (jedná sa o PostgreSQL), len som bol lenivý to naštudovať... V princípe môžeš mať pravdu, že mám len zlé postupy... Prišlo mi to takto jednoduchšie...
Promysli si pri svem rozhodovani taky scenar, kdy budou data distribuovana pres vice serveru (pro failover).
Práce s blobem máš jednodušší. Nemusíš generovat název souboru. Pokud mažeš fotky z databáze, nemůsíš se zajímat o mazání souboru. Pokud bys mazal z databáze záznam fotografie přes nějaké vazby (ON DELETE CASCADE, ...), tak by se zároveň mazání souborů dělalo dost blbě. Můžeš na ně aplikovat databázové práva...
V súvislosti s predchádzajúcimi komentármi by stál za zváženie kompromis: ukladania do BLOB-u, ale v oddelenej databáze. Táto sa v prípade môže dedikovať na iné železo a integritu zabezpečovať aplikačne. Zálohovať sa tým pádom môže oddelene. Záleží na tom ako DB podporuje aliasy...
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.