Myslim, ze hezka diplomka by byla spis na tema "Kde relacni databaze selhavaji". A ty pripady tu mame, to si priznejme (pro databazisty:.... i ten vas guru Celko o tom napsal knizku)
Celkova nenormalnost mysleni "enterprise" databazistu, kdy 90% z nich si i v roce 2016 mysli, ze staci pridat index a vono to pojede.
Za me jsou relacni DB uplne v pohode, kdyz se pouzivaji pro ucel, ke kterymu byly vytvoreny. Tzn. transakcni operace nad nejakym (business logikou osetrenym) setem dat.
Zbytek je nesmysl, bohuzel valna cast programatoru povazuje RDBMS za ULOZISTE dat, to neni pravda. Uloziste je uloziste a data se do nej ukladaji, s tim, ze se tak nejak neresi jak je dostat ven. Vyborne to demonstruje ten exot, co tady na rootu pise serial o relacnich databazich a je evidentni, ze nikdy realny data nevidel.
Pokud potřebujete úložiště dat, tak ještě nutně nepotřebujete RDBMS. Po RDBMS sáhnete ve chvíli, kdy potřebujete, aby vám to hlídalo referenční integritu, nebo chcete data v databázi přímo zpracovávat apod. Pokud data potřebujete jen uložit a přečíst, tak existují lepší řešení než RDBMS, bez veškeré té režie na věci, které od toho nechcete.
Přijde mi, že nechcete připustit, že mezi databází a úložistěm je implikace, nikoliv ekvivalence.
"Samozřejmě pokud jste tedy těmi daty nemyslel třeba video a audio soubory a podobně."
Proč by nemohl být obrázek nebo video nebo hudba, do nějaké rozumné velikosti, být uloženo v DB ? Přeci to není vůbec o tom, co tam ukládám, resp. je, ale trochu jinak.
Je to o tom, jak k tomu potřebuji přistupovat, kdo to potřebuje a co všechno od toho systému potřebuje.
Když data potřebujete jen ukládat a pak přečíst, snad si vystačíte se syrovým FS. Proč mít zbytečně netriviální režii RDBMS ?
Potřebujete nějak inteligentně vyhledávat, podle nějakých metadat o těch videích, oebo opravdu potřebujete ACID ? Tohle je ta přidaná hodnota databáze, ne to, že do ní lze ukládat data, to lze dneska na milion míst.
Většinou, když jsou problémy s databázemi, tak jde a) o špatně navržené schéma (snaha o OOP) nebo použití EAV, b) použití nevhodné technologie na nevhodném místě (použití relační databáze jako zásobníku), použití relační databáze jako komunikačního systému, atd, c) nezvládnutí technologie poddimenzování, předimenzování, neřešení údržby, ... Všechny ty problémy primárně z neznalosti, a pak už se jen hasí.
Opravdu jen výjimečně se setkám s tím, že by někdo řešil problém, který by se už jinde neřešil 10x. Většina těch problémů vychází z neznalosti nebo z nerespektování technologie. A v SW je to samozřejmě o to horší, že ty zásadní chyby se nedají jednoduše opravit.
Další věcí je, že vzhledem k dnešnímu výkonu sw i hw, to paradoxně funguje i když se to voře. Teprve, když už se to hodně zvoře, tak jsou problémy (a pak už není většinou cesta zpátky). Což úplně nepřispívá ke tomu, aby vývojáři byli motivovaní se něco učit. Vždy samozřejmě existují výjimky, které potvrzují pravidlo, a znám pár firem a pár lidí, kteří se za posledních pět let hodně posunuli dopředu.
"Další věcí je, že vzhledem k dnešnímu výkonu sw i hw, to paradoxně funguje i když se to voře."
To je bohužel smutný fakt. Ono je to v ale kolikrát o to horší, že v testu je systém OK a v produkci, se zpravidla větším objemem a kvalitou dat, je to podstatně horší. A nebo to prostě funguje i na PROD do doby, než se systém přiblíží nějakému thresholdu a náhle se začne chovat sic logicky dle pravidel, tak ale hlavně jinak než doposud, což obvykle vyvolá jistou míru paniky.
Pak člověk poslouchá nářky jako "ještě před měsícem ten dotaz bežel do 5min" ... přitom skoro každý projekt má tendenci ukládat víc a víc dat a situaci za sebou naopak moc neřešit.
Zdravim,
90% nenormalnich enterprise databazistu ? to je podivne vysoke cislo. A muj zkusenosti podporeny pocit je spis takovy, ze nejde o databazisty, ale spis lidi od apliakci, ktery databazim "taky rozumi".
Dokonalym vysledkem pak je nejaky univerzalni dotaz s milionem ORu, aby to ten optimizer co mozna nejvic zmatlo. Samozrejme se ale ceka, ze DB to hrave a rychle zvladne zpracovat :)
Tohle je ale IMHO problem nekde uplne jinde, treba ve zneuzivani jednoduchosti SQL predpokladem, ze kdyz je to tak jednoduchy, nejde to preci rozbit, resp. on si to ten optimizer nejak prebere.
A bohuzel je to taky o tom, ze dostupnost klikacich nastroju a ruznych radcu postupne odvadi napr. DBA od toho, aby skutecne chapali, jak to uvnitr dane DB funguje; aspon u Oraclu tohle dost pocituju. Casto jsou tak DBA spokojeni, ze je jakz takz misto a jedou zalohy. Bohuzel diky tomu, ze spravuji mnoho databazi, nerozumi uz aplikaci a tuhle roli tak nejak prebira jina vrstva lidi, v horsim pripade prave tech aplikacnich.
Zjišťuju, že korporátní prostředí je hodně specifický - vlastně vůbec tam nejde o výkon, když je to ještě použitelné, ale o to, aby se hlavně nic nerozbilo. Přičemž se jedná o ohromný vlašťovčí hnízdo. Všechno je rigidně předepsané, není prostor pro kreativitu - takže, kde se tam může člověk něčemu novému naučit? Navíc se tam překvapivě tvrdě hraje o peníze - není moc prostoru pro optimalizaci - není to moc příjemné prostředí.
Databázová aplikace ve větší firmě hodně připomíná výrobní linku - na začátku se cpou data, na konci vypadávají výsledky. Zadat zakázky do výroby - spočítat plán. Prostoj ve výrobě je srovnatelný s prostojem v administrativě. Co se článku týká, samozřejmě kladné hodnocení, jen mi ty ohyby SQL připadají čím dál křečovitější - ve starém Paradoxu nebo Foxce by se prostě udělal lineární výpočet přes několik přechodných tabulek s mezivýsledky a cíle by bylo dosaženo. Ty konstrukce v SQL jsou zajímavé, ale to, co jeden machr dá dohromady, těžko pochopí někdo jiný.
90% SQLek jsou ofiltrované JOINy a agregace nebo ORDER BY. Ještě ve starém ANSI SQL 99 a starším se některé úlohy nedaly řešit nebo jejich řešení bylo extrémně komplikované nebo pomalé. V novém SQL se už většina běžných úloh dá vyřešit docela čitelným zápisem (a většinou je to i dostatečně rychlé).
Jinak v SQL se dá prasit stejně jako v čemkoliv jiném - 10 řádkovému programu v Lispu bude rozumět každý, 1000 řádkovému programu už asi jen guruové. Totéž platí i o SQLku. Nerekurzivní CTE mi může zavést aspoň nějakou štábní kulturu. Můžu si pomoct pohledy, můžu si pomoct uloženými procedurami. Primárně ale musím chtít psát čitelně - a pak nemůže mít nikdo problém s pochopením.
Kdybyste se k tomu vrátil, viděl byste, jaký to byl opruz. Jakýkoliv jednodušší výběr na 20 řádků, x pomocných proměnných a nakonec někdo další co to upravuje, to taky musí nejprve pochopit. Při převodu takové databáze se to vyplatí převést po tabulkách do db, a pracovat s tím pomocí SQL.