Fyzické uložení dat u relačních databází

Fyzické uložení dat u relačních databází
« kdy: 06. 02. 2020, 20:16:22 »
Ahoj,
byl by někdo ochoten mi polopatě vysvětlit...
1.) Jak se data (obecně) fyzicky ukládají na disk u relačních databází? Četl jsem něco o pages, ale jsem z toho celkem jelen...
2.) Jak se ta data dohledávají na tom disku? (přes row id?)
3.) Proč to dohledávání jde rychle? Jasně, když použiji indexy, tak to půjde rychlejc, díky tomu, že se to nahraje do paměti a uspořádá do vhodné struktury, ale jak to souvisí s tím fyzickým uložením dat? Respektive jak tam asi funguje ten odkaz na ta data na ten disk?

Díky



Re:Fyzické uložení dat u relačních databází
« Odpověď #2 kdy: 06. 02. 2020, 22:39:42 »
Výborný seriál: https://www.brentozar.com/archive/category/how-to-think-like-the-sql-server-engine/

...je třeba číst odzadu. A vůbec celý  web je fakt dobrý. Je  to teda o MS SQL.

RDa

  • *****
  • 2 465
    • Zobrazit profil
    • E-mail
Re:Fyzické uložení dat u relačních databází
« Odpověď #3 kdy: 06. 02. 2020, 23:22:25 »
Kdyz se budem bavit o MySQL / MariaDB, tak si muzes vygooglit "disk format" pro MyISAM nebo InnoDB, coz jsou asi nejproflakejsi zpusoby ukladani dat. Alternativne se muzes podivat na format souboru pro PostgreSQL nebo SQLite. Kazdy engine si resi ukladani po svem... neexistuje univerzalni zpusob. A samozrejme, se muzes vzdelat na nejakem vysokoskolskem predmetu, ktery se tyka databazi... jak uz tady nekdo uvedl.. ale to je teorie a nemusi informovat o poslednich pokrocich v teto oblati.

Re:Fyzické uložení dat u relačních databází
« Odpověď #4 kdy: 06. 02. 2020, 23:28:59 »
Začnu od konce – vyhledávání pomocí indexu funguje rychleji díky tomu, že je index uspořádán tak, aby v něm bylo možné rychle hledat. Třeba v rejstříku v knize také najdete potřebné slovo rychleji než v knize samotné – protože je řazen abecedně, což vám hledání usnadní. Jestli je index v paměti nebo na disku s tím nesouvisí. Samozřejmě že hledání v indexu v paměti je rychlejší, ale je běžné, že databáze má tolik indexů nebo jsou tak velké, že se do paměti nevejdou.

Dohledávání dat přímo v tabulce nejde nijak zvlášť rychle a data nejsou ukládána nijak speciálně, aby je bylo možné rychle dohledat. Pro rychlé hledání slouží právě indexy. Data na disku by klidně mohla být uložena jednoduše jeden záznam za druhým (s proměnlivou délkou řádku), v indexu byste pak měl odkaz na místo (od začátku souboru), kde jsou data zapsaná. To, že se data ve skutečnosti obvykle zapisují jiným způsobem, je spíš optimalizace kvůli velikosti souboru. Kdyby se data zapisovala výše uvedeným způsobem, při změně záznamu by se větší záznam musel zapsat na konec souboru a po původním záznamu by zbyla díra, menší záznam by se mohl zapsat na původní místo, ale zbyla by tam díra o velikosti rozdílu starého a nového záznamu. Nebo.li by docházelo k fragmentaci souboru – vedle užitečných dat byste tam měl spoustu nevyužitých prázdných míst, která by jen nafukovala velikost souboru.


RDa

  • *****
  • 2 465
    • Zobrazit profil
    • E-mail
Re:Fyzické uložení dat u relačních databází
« Odpověď #5 kdy: 07. 02. 2020, 01:15:30 »
...Kdyby se data zapisovala výše uvedeným způsobem, při změně záznamu by se větší záznam musel zapsat na konec souboru a po původním záznamu by zbyla díra, menší záznam by se mohl zapsat na původní místo, ale zbyla by tam díra o velikosti rozdílu starého a nového záznamu. Nebo.li by docházelo k fragmentaci souboru – vedle užitečných dat byste tam měl spoustu nevyužitých prázdných míst, která by jen nafukovala velikost souboru.

Nejmenovana databaze mela maintenance prikaz vacuum urceny prave k uklizeni bordelu po vami popsanych praktikach ,)

alex6bbc

  • *****
  • 1 431
    • Zobrazit profil
    • E-mail
Re:Fyzické uložení dat u relačních databází
« Odpověď #6 kdy: 07. 02. 2020, 06:47:25 »
a jeste se data muzou ukladat na disk po radcich jak by to clovek ocekaval, pekne jeden radek za druhym.
muze se i ukladat i po sloupcich, za sebou jdou zaznamy z jednoho sloupce spolecne s nejakym id.
skoda(0), tatra(1), liaz(2), gazik(3).........; cesko(0), cesko(1), cesko(2), rusko(3).

nejdulezitejsi bude jak jsou ulozeny indexy, ktere pak ukazuji na offset zaznamu v souboru.

Re:Fyzické uložení dat u relačních databází
« Odpověď #7 kdy: 07. 02. 2020, 08:45:44 »
Nejmenovana databaze mela maintenance prikaz vacuum urceny prave k uklizeni bordelu po vami popsanych praktikach ,)
PostgreSQL neukládá záznamy způsobem, který jsme popsal. Neoptimální stav databáze vzniká i jinými způsoby. Např. i když ukládáte data s pevnou délkou záznamu, pokud smažete víc záznamů než přidáte, pořád vám vznikne v souboru díra. Navíc PostgreSQL je MVCC databáze, která i updatovaný řádek zapisuje na nové místo, aby původní řádek byl k dispozici ostatním transakcím a pro případný rollback. Fyzické uložení dat v PostgreSQL je popsané zde: Database Physical Storage.

Re:Fyzické uložení dat u relačních databází
« Odpověď #8 kdy: 07. 02. 2020, 19:12:40 »
jaký je rozdíl mezi uspořádaným indexem a clustered indexem? Oboje vypadá, že má za úkol seřadit data podle klíče?

al.da

Re:Fyzické uložení dat u relačních databází
« Odpověď #9 kdy: 07. 02. 2020, 20:26:24 »
clustered muze byt jeden a uklada data na disk podle indexu .... udelas select a zobrazi podle klice

Re:Fyzické uložení dat u relačních databází
« Odpověď #10 kdy: 08. 02. 2020, 14:25:55 »
V cetine na to tema vysla dost podrobna skripta. Pokorný, J., Žemlička, M.: Základy implementace souborů a databazi