Hlavní menu

Nástroje

WebKiv / UkladaniVelkychDatDoDatabaze

View (print) - Edit page | Recent changes - Page history

Updated 27 November 2009, 14:12 by PremekBrada

WebKiv.UkladaniVelkychDatDoDatabaze History

Hide minor edits - Show changes to markup

27 November 2009, 14:12 by PremekBrada -
Deleted line 7:

Základní jednotlivosti:

27 November 2009, 14:12 by PremekBrada -
Changed lines 4-5 from:
  • je to skoro jedno = klidně ho můžu dát do databáze
to:
  • je to skoro jedno = klidně ho můžu dát do databáze, té to nevadí, ale přístup k datům souborů v databázi může být pomalejší než přes filesystém
Changed lines 21-22 from:
  • přístup k datům souborů v databázi může být pomalejší než přes filesystém
to:
27 November 2009, 14:10 by PremekBrada -
Added lines 23-24:

(Pozn: Vše se týká MySql ale zřejmě platí obecně pro rozumné SQL databáze.)

Changed lines 32-34 from:

Poznámka k ukládání ve VFS: nedělat (neukládat .avi do VFS), protože na to OpenCms nemá udělané VFS tabulky - kdyžtak vytvořit vlastní tabulky pro velká data a spravovat si je "ručně".

(Pozn: Vše se týká MySql ale zřejmě platí obecně pro rozumné SQL databáze.)

to:

Poznámka k ukládání v OpenCms

Nedělat (neukládat .avi do VFS), protože na to OpenCms nemá udělané VFS tabulky - kdyžtak vytvořit vlastní tabulky pro velká data a spravovat si je "ručně".

27 November 2009, 14:10 by PremekBrada -
Changed lines 28-29 from:

Oboje viz http://www.dreamwerx.net/phpforum/?id=1

to:

Oboje viz http://www.dreamwerx.net/phpforum/?id=1.

Poznámka k ukládání ve VFS: nedělat (neukládat .avi do VFS), protože na to OpenCms nemá udělané VFS tabulky - kdyžtak vytvořit vlastní tabulky pro velká data a spravovat si je "ručně".

27 November 2009, 14:08 by PremekBrada -
Changed line 10 from:
  • do sloupečku je možné soubor z filesystému uložit přes funkci LOAD_FILE
to:
  • do BLOB sloupečku je možné soubor z filesystému uložit přes funkci LOAD_FILE
Changed line 12 from:
  • jakmile je sloupeček typu BLOB, MySql (a) tabulku vždycky ukládá na disku (bez něj to může být i v paměti), (b) z BLOBov?é položky používá prvních max_sort_length (default 1024) znaků pro ORDER BY apod řazení výsledků
to:
  • jakmile je sloupeček typu BLOB, MySql (a) tabulku vždycky ukládá na disku (bez něj to může být i v paměti), (b) z BLOBové položky používá prvních max_sort_length (default 1024) znaků pro ORDER BY apod řazení výsledků
Changed line 15 from:
  • když udělám SELECT s BLOBy? a pracuji s ním v aplikaci (přes result set), další krok iterace přes result set vždy čeká na dodání celého BLOBu což může zdržovat
to:
  • když udělám SELECT s BLOBy a pracuji s ním v aplikaci (přes result set), další krok iterace přes result set vždy čeká na dodání celého BLOBu což může zdržovat
Changed line 19 from:
  • některé filesystémy mají problém pokud mají pracovat s řádově miliony (malých) souborů; pokud mám řádově milion (malých) souborů v BLOBech?, jsou fyzicky v jednom či dvou velkých souborech příslušné tabulky
to:
  • některé filesystémy mají problém pokud mají pracovat s řádově miliony (malých) souborů; pokud mám řádově milion (malých) souborů v BLOBech, jsou fyzicky v jednom či dvou velkých souborech příslušné tabulky
27 November 2009, 14:07 by PremekBrada -
Changed lines 4-5 from:
  • je to jedno = úplně klidně ho mužu dát do databáze
to:
  • je to skoro jedno = klidně ho můžu dát do databáze
Changed lines 12-13 from:
  • jakmile je sloupeček typu BLOB, MySql (a) tabulku vždycky ukládá na disku (bez něj to může být i v paměti), (b) z BLOBov?é položky používá prvních max_sort_length (default 1024) znaků pro ORDER BY

jakmile MySql dělá SELECT a v prohledávaných sloupcích je BLOB, prohledává tabulky na disku a ne v paměti => je to velmi pomalé (tohle se stane třeba když udělám SELECT FROM TABULKA_S_FILMY)

to:
  • jakmile je sloupeček typu BLOB, MySql (a) tabulku vždycky ukládá na disku (bez něj to může být i v paměti), (b) z BLOBov?é položky používá prvních max_sort_length (default 1024) znaků pro ORDER BY apod řazení výsledků
  • jakmile MySql dělá SELECT a v prohledávaných sloupcích je BLOB, prohledává tabulky na disku a ne v paměti => je to velmi pomalé (tohle se stane třeba když udělám SELECT * FROM TABULKA_S_FILMY)
Added line 17:
Changed lines 23-24 from:

Best practices pro ukládání v db:

to:

Best practices pro ukládání v db:

Added line 27:
Changed lines 30-31 from:

Vše se týká MySql ale zřejmě platí obecně pro rozumné SQL databáze.

to:

(Pozn: Vše se týká MySql ale zřejmě platí obecně pro rozumné SQL databáze.)

27 November 2009, 14:03 by PremekBrada -
Changed lines 10-14 from:
  • do sloupečku je možné soubor z filesystému uložit přes funkci "LOAD_FILE":http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_load-file
  • velikost dat, která nahrávám přes INSERT/UPDATE, je "omezená parametrem max_allowed_packet":http://dev.mysql.com/doc/refman/5.1/en/packet-too-large.html
  • jakmile je sloupeček typu BLOB, MySql (a) tabulku vždycky ukládá na disku (bez něj to může být i v paměti), (b) z BLOBov?é položky "používá prvních max_sort_length (default 1024) znaků pro ORDER BY":http://dev.mysql.com/doc/refman/5.0/en/blob.html

jakmile MySql dělá SELECT a v prohledávaných sloupcích je "BLOB, prohledává tabulky na disku a ne v paměti":http://dev.mysql.com/doc/refman/5.0/en/internal-temporary-tables.html => je to velmi pomalé (tohle se stane třeba když udělám SELECT FROM TABULKA_S_FILMY)

  • když udělám SELECT s BLOBy? a pracuji s ním v aplikaci (přes result set), další krok iterace přes "result set vždy čeká na dodání celého BLOBu?":http://onlamp.com/onlamp/2002/07/11/MySQLtips.html což může zdržovat
to:
  • do sloupečku je možné soubor z filesystému uložit přes funkci LOAD_FILE
  • velikost dat, která nahrávám přes INSERT/UPDATE, je omezená parametrem max_allowed_packet
  • jakmile je sloupeček typu BLOB, MySql (a) tabulku vždycky ukládá na disku (bez něj to může být i v paměti), (b) z BLOBov?é položky používá prvních max_sort_length (default 1024) znaků pro ORDER BY

jakmile MySql dělá SELECT a v prohledávaných sloupcích je BLOB, prohledává tabulky na disku a ne v paměti => je to velmi pomalé (tohle se stane třeba když udělám SELECT FROM TABULKA_S_FILMY)

  • když udělám SELECT s BLOBy? a pracuji s ním v aplikaci (přes result set), další krok iterace přes result set vždy čeká na dodání celého BLOBu což může zdržovat
Changed lines 19-20 from:
  • "přístup k datům souborů v databázi může být pomalejší než přes filesystém":http://blog.sitek.com.au/2008/03/comparison-between-storing-imagesfiles-in-mysql-and-on-filesystem/
to:
  • přístup k datům souborů v databázi může být pomalejší než přes filesystém
27 November 2009, 14:02 by PremekBrada -
Changed line 9 from:
  • db ukládá tyhle věci do BLOB, LARGEBLOB
to:
  • db ukládá tyhle věci do BLOB, LONGBLOB
Changed lines 11-13 from:
  • jakmile je sloupeček typu BLOB, MySql (a) tabulku vždycky ukládá na disku (bez něj to může být i v paměti), (b) z BLOBov?é položky používá prvních (default 1024) znaků pro ORDER BY

jakmile MySql dělá SELECT a v prohledávaných sloupcích je BLOB, prohledává tabulky na disku a ne v paměti => je to velmi pomalé (tohle se stane třeba když udělám SELECT FROM TABULKA_S_FILMY)

  • když udělám SELECT s BLOBy? a pracuji s ním v aplikaci (přes result set), další krok iterace přes result set vždy čeká na dodání celého BLOBu? což může zdržovat
to:
  • velikost dat, která nahrávám přes INSERT/UPDATE, je "omezená parametrem max_allowed_packet":http://dev.mysql.com/doc/refman/5.1/en/packet-too-large.html
  • jakmile je sloupeček typu BLOB, MySql (a) tabulku vždycky ukládá na disku (bez něj to může být i v paměti), (b) z BLOBov?é položky "používá prvních max_sort_length (default 1024) znaků pro ORDER BY":http://dev.mysql.com/doc/refman/5.0/en/blob.html

jakmile MySql dělá SELECT a v prohledávaných sloupcích je "BLOB, prohledává tabulky na disku a ne v paměti":http://dev.mysql.com/doc/refman/5.0/en/internal-temporary-tables.html => je to velmi pomalé (tohle se stane třeba když udělám SELECT FROM TABULKA_S_FILMY)

  • když udělám SELECT s BLOBy? a pracuji s ním v aplikaci (přes result set), další krok iterace přes "result set vždy čeká na dodání celého BLOBu?":http://onlamp.com/onlamp/2002/07/11/MySQLtips.html což může zdržovat
27 November 2009, 13:56 by PremekBrada -
Added lines 1-26:

(Dlouho to ve mě hlodalo, nejsa databázistou, po půl hodině práce s google results.) Otázka je: mám velký soubor (150MB .avi) - mám ho uložit do databáze nebo radši na disk?

Rychlá odpověď:

  • je to jedno = úplně klidně ho mužu dát do databáze

Solidní odpověď si složte z následujících faktů.

Základní jednotlivosti:

  • db ukládá tyhle věci do BLOB, LARGEBLOB
  • do sloupečku je možné soubor z filesystému uložit přes funkci "LOAD_FILE":http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_load-file
  • jakmile je sloupeček typu BLOB, MySql (a) tabulku vždycky ukládá na disku (bez něj to může být i v paměti), (b) z BLOBov?é položky používá prvních (default 1024) znaků pro ORDER BY

jakmile MySql dělá SELECT a v prohledávaných sloupcích je BLOB, prohledává tabulky na disku a ne v paměti => je to velmi pomalé (tohle se stane třeba když udělám SELECT FROM TABULKA_S_FILMY)

  • když udělám SELECT s BLOBy? a pracuji s ním v aplikaci (přes result set), další krok iterace přes result set vždy čeká na dodání celého BLOBu? což může zdržovat
  • když čtu data ze souboru a/nebo je z něj odesílám na klienta, můžu to spusit v separátním vlákně
  • když mám data filmů v db, zálohováním databáze se zálohují i filmy; když je mám na disku, musím krom databáze zálohovat i soubory
  • některé filesystémy mají problém pokud mají pracovat s řádově miliony (malých) souborů; pokud mám řádově milion (malých) souborů v BLOBech?, jsou fyzicky v jednom či dvou velkých souborech příslušné tabulky
  • když mám filmy jen v databázi, nedostanu se k nim z jiných aplikací jednoduchým přístupem do filesystemu
  • "přístup k datům souborů v databázi může být pomalejší než přes filesystém":http://blog.sitek.com.au/2008/03/comparison-between-storing-imagesfiles-in-mysql-and-on-filesystem/

Best practices pro ukládání v db:

  • oddělit "metadata" souboru od "dat" do dvou tabulek
  • pro optimalizaci zasílání dat ke klientovi a/nebo práci s nimi v aplikační logice se může hodit rozdělit je do menších (např. 64KB) bloků

Oboje viz http://www.dreamwerx.net/phpforum/?id=1

Vše se týká MySql ale zřejmě platí obecně pro rozumné SQL databáze.