« 1 2 »
Autor Zpráva
šufánek
Profil
Hostuju web u tohohle renomovaného hostingu, narazil jsem na technický problém. Maximální délka dotazu na databázi je 1MB. Běžně ukládám soubory do BLOBů v databázi, tak mi omezení přišlo celkem tristní. Tech support mě odbyla s tím, že jde o defaultní nastavení MySQL, a že je to běžný. (na pipni, bananu, dokonce i na webzdadma maj limit 8MB a víc) Co víc, že jsem první člověk s podobným problémem. Nikdo prý tak velké inserty do db nepotřebuje.

To mě docela zaskočilo - máte někdo názor shodný s oním mužem z tech support? Databázi používám na ukládání souborů celkem běžně, rád bych znal názory / zkušenosti ostatních - třeba i s jinýma hostingama.
souki
Profil
A proč používáš databázi na ukládání souborů? Mě to moudré nepřijde vůbec..
šufánek
Profil
je to dle mýho názoru praktičtější, než je házet do filesystému (což předpokládam považuješ za lepší ty), důvody:
-pracuje se s nima líp, je-li jich větší množství
-eliminuje to riziko duplicitních názvů
-je to bezpečnější
šufánek
Profil
ale to je trochu off-topic (i když kritiku uvítam)

šlo mi o to, jestli to skutečně nikomu nepřijde jako (zbytečně) svazující omezení..
DoubleThink
Profil *
pracuje se s nima líp, je-li jich větší množství
Ale? fakt? Pokud v nich fulltextově nevyhledáváš, tak bych na to nesázel.

eliminuje to riziko duplicitních názvů
Vidíš, a já jsem si myslel, že filesystem taky nepovoluje duplicitní názvy.

je to bezpečnější
Nemyslím si. Ne při správném nastavení práv filesystemu.
Mastodont
Profil
šufánek

Nepíšeš přesně, o jaké soubory jde, ale IMHO větší soubory do db rozhodně nepatří. Třeba ikonu uživatele mu klidně do jeho záznamu dám, ale fotky bych do db rozhodně necpal.
armin
Hosting armin.sk
Profil
šufánek: ukladat soubory do DB je nevyhodne:
1) zaloha db muze dosahovat abnormalni velikosti => nebude zalohovana
2) je to mnohem pomalejsi (mysql je taky filesystem, tak proc pouzivat neco slozitejsiho nez ciste soubory?)
3) eliminace duplicitnich souboru - to si snad delas srandu vid? Co treba ukladat soubory kde bude na zacatku 10 cislic (unixovska prezentace casu, kdy byl soubor uploadnut) a pak nazev souboru? Pochybuji ze v 1 vterine budes 2x nahravat ruzne soubory se stejnym jmenem, aby nastal problem. Navic projizdeni adresaru a nazvu souboru lze taky => neni problem zjistit zda dany soubor jiz existuje, pokud jo, tak udelas smycku menici nazev souboru dokud nedosahnes unikatni nazev - tady to bys musel resit i u databaze, ktera je pomalejsi
4) omezeni - proc si vybiras hosting dle ceny a po mesici se ptas ze zda je normalni to a to? Proc si pred porizenim hostingu nezjistis vse potrebne, zda je treba ochota to a tamto nastavit jak pozadujes a tak?

Opet debata o nicem, ale to co pises je fakt nevhodne reseni.
izsak
Profil
Výhody ukladania súborov do DB:
* Fulltextové vyhľadávanie, pokiaľ existuje stremmer (MS SQL)
* Zoraďovanie podľa názvu a iných atribútov - rýchlejšie ako pri práci s filesystémom
* Bezpečnosť - záleží ako je napísaná aplikácia - v princípe sa k súboru užívateľ nedostane jednoduchým zadaním adresy

Pochybuji ze v 1 vterine budes 2x nahravat ruzne soubory se stejnym jmenem
Systém by nemal byť navrhovaný s podobnými predpokladmi, že sa niečo nemusí stať. Hlavne keď sa podobná skutočnosť dá ošetriť. Napr. v relačnej databáze by nebol problém s duplicitou identifikátora.

Neviem či je pri rýchlosti webzdarma serverov reálne, že by sa úspešne vykonal 8MB SQL príkaz.

Odporúčal by som ukladať súbory na disk a do DB si ukladať len hlavné atribúty. V jednom stĺpci (iný ako Primary Key) by som si ešte uložiť hash napr. názvu súboru a iných atribútov a pod týmto hashom by som súbor ukladal na disk. Názov tak vždy bude obsahovať bezpečné znaky a môže byť bezproblémov uložený. Tento stĺpec by mohol byť UNIQUE INDEX.
šufánek
Profil
doblethink:
Vidíš, a já jsem si myslel, že filesystem taky nepovoluje duplicitní názvy.
jj, přesně tak. zatimco do db je klidně nacpeš - v čemž spatřuju výhodu. uznávam že neni nijak podstatná

pracuje se s nima líp, je-li jich větší množství
Ale? fakt? Pokud v nich fulltextově nevyhledáváš, tak bych na to nesázel.

Databáze si umí mnohem snáz pohlídat integritu - je robustnější vůči chybám. Zmizí-li soubor z filesystému, nezjistíš to dokud ti nepíše rozzuřenej user že mu něco nejde stáhnout. Zmizí-li soubor z dobře udělaný db, ta okamžitě pozná že je něco špatně (přebývá jí nějakej foreign key) - a problém se může řešit hned.

je to bezpečnější
Nemyslím si. Ne při správném nastavení práv filesystemu.

nj. s nastavením filesystemu si na hostingu za 1000 ročně moc nepohraju. Hlídání přístupových práv v db mi přijde mnohem pohodlnější, zvlášť máš-li třeba nějaký user groups..

Mastodont, armin jde mi o archivaci souborů obecně (i když fulltext je bonusovej argument pro db), řekněme do velikosti 8MB.
2) je to mnohem pomalejsi (mysql je taky filesystem, tak proc pouzivat neco slozitejsiho nez ciste soubory?) databaze JE rychlejsi - predne diky fyzicky organizaci dat na disku, jejich indexaci..
1) zaloha db muze dosahovat abnormalni velikosti => nebude zalohovana a budou li soubory mimo databazi, budou mensi?



izsak: více méně souhlasím, uvažoval jsem o podobným řešení, nakonec mi vyšla jako lepší alternativa migrace za jiným hostingem.
webzdarma ty dotazy kupodivu skutečně zvládá :) ne na 100%, ale na freehosting to ujde. použil jsem to jen jako příklad, jak velkej deficit tu podle mě ceskyhosting bezdůvodně má.
souki
Profil
Napadlo tě někdy ukládat si informace o souborech do DB a na disk je ukládat třeba pod id? Pak máš všechny výhody
djlj
Hosting subreg.cz
Profil
je to dle mýho názoru praktičtější, než je házet do filesystému (což předpokládam považuješ za lepší ty), důvody:
-eliminuje to riziko duplicitních názvů

zatimco do db je klidně nacpeš - v čemž spatřuju výhodu
Tak nejdřív vidíš výhodu v tom, že ti databáze umožňuje neumožnit vložit duplicitvní názvy, o den později zase vidíš výhodu v naprostém opaku…

Zmizí-li soubor z filesystému
Proč by měl mizet? Mně se teda ještě nikdy nestalo, že by soubor sám od sebe zmizel.

nj. s nastavením filesystemu si na hostingu za 1000 ročně moc nepohraju.
I na hostingu za 1000 Kč se dá pomocí php a htaccess dosáhnout toho, co požaduješ.

jde mi o archivaci souborů obecně
V tom případě je fakt lepší je ukládat do normálních souborů. Jakmile budeš mít v databázi (MySQL) stovky MB dat, tak to opravdu nebude nejrychlejší…

a budou li soubory mimo databazi, budou mensi?
Ne, ale pak je rychleji obnovíš. (Tedy pokud neobnovuješ databázi na hostingu pomocí konsole, což asi ne ;)).
armin
Hosting armin.sk
Profil
šufánek: ja jen tak okrajove uz: u databaze je pohodlnejsi prace se zaznamy, v zadnem pripade to vsak nemuze byt rychlejsi. Protoze co je vlastne databaze? Pouze skladiste dat (standardne ve 2 souborech je kazda mysql db ulozena). A co muze byt rychlejsi - pracovat s 1 souborem, nebo sql dotazem vyhledavat ve obrovskem kvantu dat pozadovanej obsah. Opet zde bude x dotazu ze nemam pravdu. Ja osobne bych nikdy soubory do db necpal. A co se tyce fulltextu, je to vec zkusenosti. Kdo nezvlada ani pracovat s vypisem souboru z adresare, seradit si je dle cehokoliv (nazvu, velikosti, pripony, datu vytvoreni,...), nic mu nerika ze lze i v souboru hledat pozadovany text, tak pak samo sebou ze resenim je pouze praskat veskere soubory do databaze. Howgh.
šufánek
Profil
souki : Napadlo tě někdy ukládat si informace o souborech do DB a na disk je ukládat třeba pod id? Pak máš všechny výhody
napadlo. nemám. čti výše. (bezpečnost, rychlost,fulltext,integrita)

djlj : Tak nejdřív vidíš výhodu v tom, že ti databáze umožňuje neumožnit vložit duplicitvní názvy, o den později zase vidíš výhodu v naprostém opaku…
ne, to jsem nikdy netvrdil (ale byl jsem tak pochopen). asi jsem se špatně vyjádřil. sorry.

Zmizí-li soubor z filesystému - Proč by měl mizet? Mně se teda ještě nikdy nestalo, že by soubor sám od sebe zmizel.
ne každej systém je dokonalej. neměl jsem na mysli ani tak "náhodný" mizení souborů, jako nějakou disfunkci systému která ho způsobí. jak při ladění, tak při ostrým provozu se takový věci stát můžou. Tvrdím pouze to, že databáze je vůči takovým událostem robustnější - díky snazším kontrolám integrity.


armin, djlj : ano databáze je rychlejší než klasickej filesystém, a to v případě že je potřeba k datům přistupovat nikoliv systematicky, ale chaoticky (což je náš případ - žádosti uživatelů na jednotlivé soubory jsou náhodný proces). Je tomu díky indexačním metodám a způsobu fyzické organizace dat na disku, kterou si každá rozumná databáze hlídá. Přístupový čas je rychlejší. Ne že bych soubory ukládal do db z tohoto důvodu, ale rozhodně nelze povzžovat nízkou rychlost za nevýhodu db. ba naopak.
šufánek
Profil
jinak díky za názory. nejsem ten typ co musí mít vždycky pravdu a rád se hádá se všema ostatníma. nicméně o výhodách filesystému nad databází jste mě nepřesvědčili.

jedinou výhodou filesystemu vidim v tom že funguje na ceskyhosting :) má někdo tušení proč maj tak restriktivní omezení na databázi?

připomínám, že MySQL skutečně je mimo jiné určená k archivaci "velkých" dat. K čemu by jinak byly datové typy MEDIUM BLOB a LONG BLOB (velikosti tuším že 16 MB a 4 GB)?
ronnie
Profil
ftp://ftp.research.microsoft.com/pub/tr/TR-2006-45.pdf

šufánek: je to jednoduché. Když bude mít soubor větší velikost, zabere PHP více paměti a při překroční limitu se uživateli zobrazí chybová hláška a operaci nikdy nedokončíš...proto se ukládá v db pouze odkaz...
šufánek
Profil
ronnie:
-link se zdá být broken
-vim proč mi to technicky nefunguje. řešim jen, jaký je smysl toho omezení :)
Hofy
Hosting savana.cz
Profil
Dle me je DB opravdu na neco jineho nez trezor failu.
Dotycnemu doproucuji soubory ukladat do DB a datovou strukturu beznych DB dat ukladat do TXT failu a parsovat to pres PHP. Oboji je na presdrzku.
izsak
Profil
armin
Kdo nezvlada ani pracovat s vypisem souboru z adresare, seradit si je dle cehokoliv (nazvu, velikosti, pripony, datu vytvoreni,...)

Myslíš vážne že by ti niekto na projekte zaplatil rôzne rekuznívne funkcie, sortovacie cykly a algoritmy, keď druhý programátor by len spravil ORDER BY <stlpec> ? A toto je set sakra rýchlejšie.

A čo tak limity na počet dát? Aký je limit na počet uložených súborov v priečinku a počet záznamov v DB? A naozaj bude cyklus v PHP nad desať tisícami záznamov rýchlejší, ako SELECT v databáze, ktorá je napísaná v C++ a optimalizovaná práve na toto?
(Ale netvrdím, že je nutnosť ukladať obsah súboru do DB. Iba metadáta.)

Hofy
Ako by si spravil systém, ktorý prijíma e-maily, e-mailové prílohy a faxy (obrázky prehnané cez OCR), pričom treba robiť full text vyhľadávanie v údajoch? Jedine DB, pričom obsahy súborov by boli v DB.
šufánek
Profil
Tak ještě jednou a naposled:

Výhoda ukládání metadat o souborech do db je neoddiskutovatelná a nejspíš se na ní shodnem - i kdyby mělo být jediným argumentem výše zmíněné třídění.

Když už si metadata ukládám do db, nevidím jediný důvod (V celým vlákně. Pominu-li fakt že mi Hofy rozbije držku, což je jistě pádný argument.) proč k nim nepřidat rovnou i binární data souboru.

Naopak je výhodné tak učinit ze dvou důvodů:

-Přístup k datům JE rychlejší, díky jejich "organizovanějšímu" uložení na disku. Index budovanej nad databází lze s trochou nadsázky přirovnat k vyhledávacímu indexu, který si můžou budovat WinXP. Onen krásně animovaný pejsek vám tuto možnost zajisté nabídl (omlouvám se příznivcům alternativnách OS, a všem kteří nemají slabost pro kancelářské sponky a čaroděje na koberci, díky nimž jsou WinXP ještě více user friendly). Proč to ten pejsek udělal? Protože i v Microsoftu je pár chytrých lidí, kteří ví, že index zajišťuje rychlejší vyhledávání než běžný filesystém. Navíc samotná DB hlídá fyzické uložení dat na disku - nepřipouští rozkouskování dat do cluterů disku, který jsou zrovna volný. Když už jsem u wokeních příkladů - pak je to proces analogický permanentně běžící defragmentaci, organizující navíc (u některých db) data fyzicky podle hashových signatur - což umožňuje nepřesný vyhledávání nad opravdu velkýma datama. Bohužel ani tak nádhernej systém jako XPčka nemá pro defragmentaci animovaného průvodce.
Netvrdim že zisk několika milisekund udělá rozdíl. Rozhodně ne na mým webu. Nicméně databáze v tomto případě zkrátka je lepší.

-Práce s řádkami="soubory" je snazší, než by tomu bylo s párem metadata-filesystém. Ať chcete s daty dělat téměř cokoliv, vždycky je to jeden krok (přístup do db) oproti dvěma (přístup do db k metadatům + do filesystému). Integrita metadata=data je navíc automaticky zajištěna, což je jistě u dokonalých aplikací také, ale my ostatní omylní programátoři uvítáme, odpadne-li nám tato jedna starost.

Howgh
djlj
Hosting subreg.cz
Profil
Přístupový čas je rychlejší.
rozhodně nelze povzžovat nízkou rychlost za nevýhodu db.
Tak v jedné větě o rychlosti, kterou databáze disponuje, v další větě zase o pomalosti :)). Pokud chceš v souborech fulltextově hledat (cožs teď napsal poprvé), je opravdu lepší databáze. U statických souborů je lepší je normálně uložit na disk. A pokud ti připadá jako výhoda databáze to, že při velkém počtu dat v ní je pomalejší než filesystém (alespoň já to pochopil jako odpověď na můj příspěvek), tak mi to připadá jako na hlavu postavené.
DoubleThink
Profil *
Míra fragmentace nikdy nebude zpomalovat získání souboru víc než komunikace s SQL serverem (často ještě na jiném stroji).
U větších souborů budeš narážet na paměťové omezení PHP
šufánek
Profil
djlj: asi budu muset omezit svoje přespříliš barvité vyjadřování. Takhle jsem to nemyslel. Zkus si to ještě jednou přečíst.

U statických souborů je lepší je normálně uložit na disk. Proč?

DoubleThink: ha, první rozumná kritika
U větších souborů budeš narážet na paměťové omezení PHP Ano budu. Vzhledem k tomu že provozuju server kde soubory vkládaj uživatelé přes klasický formulář, tak to omezení mam tak jako tak. Ale uznávam že obecně to problém je.

Míra fragmentace nikdy nebude zpomalovat získání souboru víc než komunikace s SQL serverem (často ještě na jiném stroji). Používáme-li výše zmíněná metadata, musí před přístupem na disk stejně ke komunikaci s SQL serverem dojít. Dotaz bude v obou případech stejně velký=rychlý. Řešíme tedy otázku, jestli trvá déle jeden přenos odpovědi na dotaz obsahující binární data, nebo přenos krátké odpovědi obsahující pouze metadata + přístupová doba k souborům.
Určitě netvrdím že i v tomto případě je moje varianta rychlejší, není ale ani nutně pomalejší. (rozdíl mezi přenosem krátký a dlouhý odpovědi na 1GB síti tak velkej nebude). Jinak je to v případě běhu obého na jednom stroji, kde bych náročnost "komunikace" jednoho jádra procesoru s druhým nepřeceňoval, a tudíž hádal že rychlejší bude DB - díky onomu přístupu na disk (resp. dvěma přístupům na disk v případě užití systému metadata + filesystém).
djlj
Hosting subreg.cz
Profil
Zkus si to ještě jednou přečíst.
Zkus se ty na druhou stranu vyjádřit srozumitelně…

Proč?
Zkus si ještě jednou přečíst můj příspěvek.
souki
Profil
šufánek
Já bych se na to podíval ještě jinak... Např databáze stahuj.cz - kolikrát potřebuješ přistoupit k metadatům a kolikrát potřebuješ i soubor?
šufánek
Profil
souki: nechápu moc kam tím míříš. To, že metadata potřebuju častěji neříká nic o tom, jakým způsobem bych měl mít uložený soubor. (Počet řádků v databázi je stejný se soubory i bez. Načítám-li pouze metadata, bude to stejně rychlé ať už jsou samotné soubory uložené jakkoliv. IMHO tedy přístupy pouze k metadatům nehrají v našem sporu roli..)
souki
Profil
šufánek
A co velikost toho řádku?
šufánek
Profil
souki - velikost řádku IMHO nehraje pro rychlost zpracování dotazu roli, jde-li o rozumný dotaz. Tedy takový, který používá k třídění nebo restrikci indexovaný pole (např SELECT WHWRE ID=X, ORDER BY TIMESTAMP..). U jiných dotazů si tím nejsem úplně jistej, ale takových by nad dobře navrženou db být moc nemělo.

..to vše samozřejmě za podmínky, že očekávaná odpověď je stejná - tedy že chceme v obou porovnávaných případech (široká vs. úzká tabulka) vrátit JENOM metadata, čili stejný počet sloupců.
souki
Profil
Ale jakmile budeš mít jeden, kde je potřeba poctivě prohledat tabulku, tak končíš. U normální DB to není až takový problém, pokud je těch dotazů jen pár za hodinu. Ale když se prochází tabulka s několikamegovými řádky, bude to horší.
Zmíněna tady byla i záloha. Metadata se budou pravděpodobně častěji měnit a je potřeba je častěji zálohovat. Vytvoření zálohy a její poslání někam je mnohme úspornější, pokud je tabulka malá než když má několik GB. Samotné soubory si potom můžeš zálohovat CRONem a klidně postupně...
šufánek
Profil
btw. není tu dodatečná změna postu považována za neetickou, že ne? (samozřejmě pokud na něj dosud nikdo nereagoval)

v tom předchozím jsem měl chybku, jen jsem ji odstranil.
souki
Profil
šufánek
není tu dodatečná změna postu považována za neetickou, že ne?
Já osobně pod post dopíšu "EDIT: jenom překlep.."
« 1 2 »
Toto téma je uzamčeno. Odpověď nelze zaslat.

0