Denormalizacia dat, vyhnutie sa zlozitym SQL rubrika: Programování: Ruby
Ahojte,
momentalne riesim zlozitejsi problem, mam nieco ako inzertny server, kde zorbazujem inzeraty, tie sa vsak ziskavaju relativne zlozitymi dotazmi s vela joinami atd... - inzerat totiz pozostava z 1 .. n poloziek, dalej z entit, ktora urcuje jeho typ a platnost, dajel to pozera na fakturu a jej stav su tam napojene dalsie atributy a dokopy sa jedna asi o 7 - 9 tabuliek (zalezi aj na type inzeratu...), pri zlozitejsich filtorch a sortoch sa to uz zacina celkom komplikovat a mam nutkanie to nekym posobom davat do inej tabulky, denormalizovane, kde sa to len nacita a bude v nej vsetko potrebne.
Mate s tym nejake skusenosti? Co pouzit a ako sa k tomu postavit? Spravit view v db? Alebo nova tabulka? Alebo nerelacna db? Pouzit elasticsearch?
Diky
Denormalizace je past. Co se ušetří na dotazu, to se ztratí na výrazně složitějším INSERTu, UPDATEu (a nakonec i SELECTu). Logickou denormalizací je používání pohledů - určitě doporučuji používat pohledy. Jsou to v jistém slova smyslu MAKRA, co dokážou ušetřit práci a ve většině případů mají nulovou režii. Materializované pohledy mají smysl jen při větším objemu nebo když nesedí odhady a optimizer se ztrácí. Občas může být za nečitelnými nebo překomplikovanými dotazy špatný návrh - špatná úroveň abstrakce, špatný návrh entit - nevhodná architektura. To 100% denormalizace nevyřeší.
Vyjímkou jsou analytické databáze OLAP - star schema, snow flake schéma - tam se denormalizuje maximálně - pracuje se s několika málo faktovými tabulkami - ale jedná se o úplně jiný model, do kterého se většinou přelévají data vygenerovaná z klasické normalizované OLTP databáze.
Pro zobrazení všech 5 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře