Autor Téma: Ukládání velkého množství souborů  (Přečteno 1948 krát)

Offline pospisil.lada

  • Plnoletý
  • ***
  • Příspěvků: 155
  • Karma: 2
    • Verze Delphi: D7
Ukládání velkého množství souborů
« kdy: 11-09-2012, 06:03:56 »
Prosím o radu - jak uspořádat úsporně na disku/ adresáři záznamy tak, aby k nim byl programově rychlý přístup ? (něco ve stylu archiv fotek). Konkrétně budu mít x záznamů v databázi, ke každému záznamu potřebuji uložit soubor vlastností (to mám v plánu uložit do databáze), každý záznam pak bude mít k sobě ještě max 20 jpg souborů:

databáze:
- záznam
-- vlastnost1
-- vlastnost2
--
-- vlastnostx
-- CESTA K ADRESÁŘI S JPG

DOTAZY:
- sypat jpg do jednoho adresáře? (adresář s tisící záznamy asi není to ořechové). Nebo jeden záznam = jeden adresář s 20-ti jpg? Není to špatně prakticky totéž?
- jak na pojmenování souborů?
- není rozumné pro každý záznam 1 file s balíkem jpg?

Díky.

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1412
  • Karma: 34
    • Pepak.net
Re:Ukládání velkého množství souborů
« Odpověď #1 kdy: 11-09-2012, 07:25:23 »
- sypat jpg do jednoho adresáře? (adresář s tisící záznamy asi není to ořechové). Nebo jeden záznam = jeden adresář s 20-ti jpg? Není to špatně prakticky totéž?
Teoreticky by to u modernějších souborových systémů (tzn. cokoliv kromě FAT :-)) mělo být jedno, prakticky se narazí na to, že s velkými adresáři se pracuje blbě. Stačí si už jen představit, že se pomocí FTP připojuješ k vzdálenému serveru a chceš v tom megaadresáři najít a stáhnout nějaký soubor - najít a stáhnout už půjde, ale získat seznam souborů bude dost trvat...

Obvykle se to řeší (několikaúrovňovým) rozvětvením adresáře a rozházením obrázků. To rozházení klidně může běžet i na bázi nějakého hashe (např. v každé úrovni udělám 256 adresářů 00 až FF, a na i-té úrovni zvolím adresář podle hodnoty i-tého bajtu MD5 názvu souboru).

Citace
- není rozumné pro každý záznam 1 file s balíkem jpg?
Nemyslím.

Jako úplně nejvhodnější by mi, při použití dobrého RDBMS, přišlo ukládat ty obrázky přímo do databáze. Pak se budou rychle vyhledávat, půjde dopbře ošetřit přístupová práva, nebude docházet k nekonzistencím ("databáze říká, že tu soubor je, ale on není!"), snadno se to všechno najednou zazálohuje atd.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2579
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Ukládání velkého množství souborů
« Odpověď #2 kdy: 11-09-2012, 07:57:03 »
databáze:
- záznam
-- vlastnost1
-- vlastnost2
--
-- vlastnostx
-- CESTA K ADRESÁŘI S JPG
Takovouhle flat tabulku bych nikdy nedelal, hezky bych to normalizoval vcetne vazby soubor:adresar a soubory pripojil k zaznamu nejspis vazbou m:n

DOTAZY:
- sypat jpg do jednoho adresáře? (adresář s tisící záznamy asi není to ořechové). Nebo jeden záznam = jeden adresář s 20-ti jpg? Není to špatně prakticky totéž?
- jak na pojmenování souborů?
- není rozumné pro každý záznam 1 file s balíkem jpg?
No aby se na to dalo odpovedet, musel bys definovat, jake na to  mas pozadavky a co ti vadi.  Osobne bych to zejmena pod wokny, ktere s desitkami tisici souboru docela zapasi (viz treba stara verze SVN WC), delil.

Ale jak to delit zalezi na tom, jake mas pozadavky, napr. zda ma byt mozne se v obrazkach na disku orientovat 'pesky' nebo ne apod. Pokud ne, muzes adresare pojmenovat treba GUID a plnit je po nejake max. mnozstvi souboru pojmenovanych taky treba GUID a automaticky vytvaret nove adresare pri zaplneni.


Offline leonell

  • Mladík
  • **
  • Příspěvků: 99
  • Karma: 3
Re:Ukládání velkého množství souborů
« Odpověď #3 kdy: 11-09-2012, 09:37:32 »
Záleží co tvoříš.
Pokud je to něco většího (čti - důležitá firemní aplikace s nějakým inteligentním rozpočtem) tak bych použil SQL databáze a dobře volil kterou.
Dle nastavení můžeš dosáhnout řádově rychlejších odezev než u souborového systému. Prostě proto, že to je na tyto operace optimalizované (některé servery  ukládají volitelně data na speciálně vytvořené diskové partition, i ty běžné servery pak mají velké alokované soubory o které se starají sami ). Servery mívají vlastní pluginy pro práci s obrázky, například http://publib.boulder.ibm.com/epubs/pdf/6902.pdf

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2309
  • Karma: 102
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:Ukládání velkého množství souborů
« Odpověď #4 kdy: 11-09-2012, 09:55:58 »
Citace
Jako úplně nejvhodnější by mi, při použití dobrého RDBMS, přišlo ukládat ty obrázky přímo do databáze. Pak se budou rychle vyhledávat, půjde dobře ošetřit přístupová práva, nebude docházet k nekonzistencím ("databáze říká, že tu soubor je, ale on není!"), snadno se to všechno najednou zazálohuje atd.

Souhlasím, jen pozor na limity DB.

Jinak jsem slyšel jsem velkou chválu na http://blog.synopse.info/post/2010/03/22/Synopse-Big-Table-v1.3, což je jednotka pro brutálně rychlý zápis raw dat na disk a jejich stejně rychlé čtení přes unikátní ID číslo. Zápis může být odložený. Vhodné pro různé cache náhledů obrázků, textových souborů, umožňuje sloučit mnoho souborů pro distribuci na CD atd. Nevhodné pro velké soubory - záleží jak máš ty obrázky velké.

oprava: Koukám, že je nová verze http://blog.synopse.info/post/2011/01/22/Synopse-Big-Table-1.12a podporující meta data, tj. ukládání i pomocných informací
« Poslední změna: 11-09-2012, 10:00:13 od Radek Červinka »
Embarcadero MVP - Czech republic

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2579
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Ukládání velkého množství souborů
« Odpověď #5 kdy: 11-09-2012, 10:02:50 »
Servery mívají vlastní pluginy pro práci s obrázky, například http://publib.boulder.ibm.com/epubs/pdf/6902.pdf
Clovece, INFORMIX - to jeste nekdo pouziva? Mam kamarada, ktery byl specialista na INFORMIX, pracovaval v Nemecku, Svycarsku aj. a marne shani praci...

Offline raul

  • Hrdina
  • ****
  • Příspěvků: 252
  • Karma: 14
    • Verze Delphi: FPC :D
Re:Ukládání velkého množství souborů
« Odpověď #6 kdy: 11-09-2012, 10:30:41 »
Pred asi 4 lety jsem potreboval podobne a docela pekne jsem zahltil NTFS u vice nez 50tisic souboru v adresari. Zadny list adresare se nedelal, ale jen dotaz do adresare odstrihl aplikaci, ktera k nemu pristupovala (proste vytuhla komplet). Tak jsem to udelal pres hash a viceurovnove rozhazeni a byl klid. Do DB bych to ukladal, kdyby neslo o www aplikaci, kde je zbytecne pro kazdej obrazek tahat data z DB, kdyz staci get na FS.
Lazarus 1.6.3:), FPC, Intel/Arm, Windows/Linux

Offline leonell

  • Mladík
  • **
  • Příspěvků: 99
  • Karma: 3
Re:Ukládání velkého množství souborů
« Odpověď #7 kdy: 11-09-2012, 12:01:03 »
>Clovece, INFORMIX - to jeste nekdo pouziva?

No, my jo :) Původní systém byl proti INFORMIXu a zcela jistě ještě nějakou chvíli bude,
zejména když plně postačuje ta jejich zadarmová edice.
Kamaráda asi nepotěším, protože to jsou tak malé servery, že tam IX specialista není potřeba.