Ukládání souborů do DB, odkazy a doplnění

Před časem jsem napsal zápisek o ukládání velkých binárních dat do (SQL) databáze. Před chvílí mi napsal kámoš programátor a toto téma mi tak připomenul. Chtěl bych doplnit nějaké odkazy na užitečné materiály a také uvést velikostní limity.

Odkazy

Limity

Abychom věděli, co si můžeme dovolit uložit a co se nám tam již nevejde, neuškodí si zopakovat limity.

Maximum size for a database? unlimited (32 TiB databases exist)
Maximum size for a table? 32 TiB
Maximum size for a row? 400 GiB
Maximum size for a field? 1 GiB
Maximum number of rows in a table? unlimited
Maximum number of columns in a table? 250-1600 (400 GiB per row)
Maximum number of indexes on a table? unlimited

Dle výše uvedeného odkazu na PostgreSQL wiki platí:

Pro BLOB platí limit 2 GiB (2^31) na jeden záznam a 4 mld. záznamů (2^32) celkem pro databázi. Celková možná velikost dat v BLOBech je tak 8 EiB (8’388’608 TiB) na jednu databázi. BLOBy jsou ukládány v systémové tabulce pg_largeobject a odkazuje se na něj pomocí OID. Není zaručená referenční integrita, proto PostgreSQL přišel s bytea, se kterým se zachází stejně, jako například s textem.

Pro bytea platí limit 1 GiB na jeden záznam a 4 mld. záznamů per table. Do jedné tabulky se tak vleze 4 EiB dat v bytea. Záznamy bytea se ukládají do TOAST a jsou komprimovány. Mohou tak snadno zabírat méně místa na disku, než by zabíraly samotné soubory.

Jen pro porovnání, ext4 má maximální velikost systému souborů 16TiB a pro XFS RedHat garantuje podporu do 100 TiB (jinak má XFS limity daleko vyšší). PostgreSQL tedy umí ukládat daleko více, než jsou běžné limity systémů souborů. Jak toho ale docílit, když máme jen ext4? Jednotlivé tabulky lze uložit do různých tablespace (jiných systémů souborů) a tedy každou tabulku mít omezenou jen velikostí systému souborů. Stejně tak lze jednotlivé databáze vytvářet na ruzných discích a získat tak paralelní výkon navíc. Ale to už je jiná story.

Příspěvek byl publikován v rubrice Databáze, PostgreSQL. Můžete si uložit jeho odkaz mezi své oblíbené záložky.

4 komentáře: Ukládání souborů do DB, odkazy a doplnění

  1. lzap napsal:

    Jak rekl kolega na letosnim summitu, podporuje se jen takova velikost, jakou pozaduje nejnarocnejsi zakaznik a je mozne to otestovat. Tzn existuje takovy hardware :-)

  2. mimi.vx napsal:

    Ext4 má limit na soubor 16TiB a filesystem 1EiB
    Brtf má limity 16EiB a 16EiB + komprimaci dat on the fly umi tez

    • Heron napsal:

      S ext4 je to komplikovanější. e4progs ve starších verzích a afaik v těch, co jsou v enterprise distrech, umějí pracovat s maximální velikostí blokového zařízení pouze do 16TiB. Ext4 samotná a i pozdější verze e4progs má limity daleko vyšší, jak jsi psal. Je však otázkou, zda je to ze strany distribucí otestované (jak píše Lzap).

  3. Pingback: Statistika stahování stránek II | Heronovo

Komentáře nejsou povoleny.