Mají tabulkové databáze v dnešní době smysl?

bck

Re:Maji tabulkove databaze v dnesni dobe smysl?
« Odpověď #90 kdy: 11. 09. 2018, 00:15:21 »

Jednou z uplne prvnich databazi bylo IMS (a obcas se jeste pouziva), a ta uklada data (zaznamy) prave ve stromove strukture podle klice.

... Ale hlavni nevyhoda je, ze si musite vytvorit vlastni funkci (program), ktera ty zaznamy prochazi ...

ale to je také ta největší výhoda

Můžete to vysvětlit?

jeden argumentační směr je filozofický. Skutečnost, že je nutno formulovat jak data získám v sobě automaticky skrýva i 'svobodu', mít tedy možnost, to udělat sám (po svém). Lidé samozřejmě nějak automaticky považují tu 'nutnost' to napsat jako nějakou nevýhodu nebo nedokonalost takového systému a zapomínají na tu automatickou výhodu , že mají tu svobodu a nemusí se podřizovat nápadům a výtvorům ostatních. Já sie ale současně uvědomuji, ze argumentace v této filozofické rovině zejména technickou inteligenci nijak zvlášť neoslovuje a proto v následujícím ta suchá technická argumentace.

OP hovoří o tom, že je třeba psát 'programy'. To zní komplikovaně, celá problematika se ale rozpadá do 2 částí. První skupina jsou funkce, které 'čtou nebo píší data - ve skutečnosti se jedná o primitivní funkce, které přes nějaké buffery nebo sdílenou paměť 'přečtou' nebo 'zapíší'  data z/na harddisk. Jaká konkrétní data se mají číst nebo psát  se takovým funkcím sdělí přes parametry. Druhou skupinou jsou programy, které výše uvedené primitivní (datové) funkce využívají. Tato druhá část je vlastní aplikace, kde se jako obvykle formuluje, co se má s daty dít.

Ty datové funkce jsou pořád stejné, ať už je aplikační program jakýkoliv a ať už jsou data jakákoliv, aplikační část se při změně dat musí napasovat, ale to je u jakékoliv databáze ten případ.

Ta výhoda spočívá v tom, že ty datové funkce jsou primitivní (rychleji už to nejde) a mají očekávanou odezvu, ať už jsou nasazeny v aplikačním programu kdekoliv. Programátor postupuje tedy tak, že vytváří primitivní aplikační funkce (kdy každá z nich si může obstarat potřebná data s max. možnou rychlostí), které kombinuje do komplexnějších celků. Změna v aplikaci se provádí záměnou jednoduchých aplikačních funkcí -říkejme tomu modularita.

U relačních databází takto nelze postupovat.

(koukám, že už jsem u psaní toho članku)


ded.kenedyd

Re:Mají tabulkové databáze v dnešní době smysl?
« Odpověď #91 kdy: 11. 09. 2018, 02:17:43 »
Citace
Ta výhoda spočívá v tom, že ty datové funkce jsou primitivní (rychleji už to nejde) a mají očekávanou odezvu, ať už jsou nasazeny v aplikačním programu kdekoliv. Programátor postupuje tedy tak, že vytváří primitivní aplikační funkce (kdy každá z nich si může obstarat potřebná data s max. možnou rychlostí), které kombinuje do komplexnějších celků. Změna v aplikaci se provádí záměnou jednoduchých aplikačních funkcí -říkejme tomu modularita.

Mozna te to prekvapi, ale to, co popisujes je state-of-the-art vyvoje informacnich systemu prvni poloviny devedesatych let minuleho stoleti. A ti z nas, kteri to zazili, vi, ze to nefunguje. Duvod, proc se to pouzivalo vysvetlils dobre, maximalni vykon. Duvodu, proc to byla jedno velke PITA je vic. Jednak to obnaselo vyrazne vic prace, clovek si sam musel resit hromadu technickych detailu (nacitani, cachovani, apod.), implementovat vse od zacatku. Dalsi zasadni problem byl v tom, ze uz pri navrhu systemu se muselo dobre pocitat s tim, jak se bude s daty pracovat a kolik jich bude. Nejednou jsem zazil situaci, kdy byl napriklad algoritmus pro nejakou uzaverku navrzen pro mnohem mensi mnozstvi dat, a pak se po par letech provozu ukazalo, ze vypocet trva den nebo dva. Resenim bylo prepsat cely algoritmus a samozrejme souvisejici "tabulky" a na ne navazane dalsi algoritmy.

Prave proto SQL databaze, kde je oddeleny logicky a fyzicky model dat, vyhraly nad primitivni manipulaci s daty, jakou ty popisujes.


JS

Re:Mají tabulkové databáze v dnešní době smysl?
« Odpověď #92 kdy: 11. 09. 2018, 03:14:36 »
Mozna te to prekvapi, ale to, co popisujes je state-of-the-art vyvoje informacnich systemu prvni poloviny devedesatych let minuleho stoleti. A ti z nas, kteri to zazili, vi, ze to nefunguje. [..]
Prave proto SQL databaze, kde je oddeleny logicky a fyzicky model dat, vyhraly nad primitivni manipulaci s daty, jakou ty popisujes.

Vzdyt o tom tu celou dobu mluvime..

Akorat, ze to byl state-of-the-art uz v 60. letech, kdy IMS vynalezli. A porad se to pouziva.. protoze pokud si tu praci date, ona ta IMS je opravdu dabelsky rychla.

Z meho pohledu je to uplne stejna otazka jako assembler vs. kompilatory. Nakonec kompilatory a vyssi abstrakce zvitezi, ovsem v mezidobi to bude kompromis mezi flexibilitou a rychlosti.

A konecne, ano, IMS umi sekundarni indexy, ale nechtelo se mi to rozvadet.

Jinak ani SQL a relacni databaze nemaji uplne oddeleny fyzicky a logicky model. Dokazu si predstavit databazovy system, kde je logicky vsechno jedna velka tabulka (sloupce maji typy a nazvy ale radky ne), se spoustou NULL hodnot, a databazovy system si data organizuje do tabulek ci ceho sam jak potrebuje.

n

Re:Zapouzdření C++: Co dělám špatně?
« Odpověď #93 kdy: 11. 09. 2018, 04:52:27 »
Zrovna tohle je v C++ špatně navržené. ... Ale považuji za chybu, že privátní metody a proměnné jsou vidět v hlavičkovém souboru a co hůř, jejich změna rozbije binární kompatibilitu.

To jako fakt?! Hm, dobrá sračka...

Vidim ze jsi odbornik na slovo vzatej. Jestli jsou vsechny tve nazory takhle fundovane, tak bys pomohl svetu vic, kdybys mlcel.

Re:Maji tabulkove databaze v dnesni dobe smysl?
« Odpověď #94 kdy: 11. 09. 2018, 06:06:51 »
Ta výhoda spočívá v tom, že ty datové funkce jsou primitivní (rychleji už to nejde) a mají očekávanou odezvu, ať už jsou nasazeny v aplikačním programu kdekoliv. Programátor postupuje tedy tak, že vytváří primitivní aplikační funkce (kdy každá z nich si může obstarat potřebná data s max. možnou rychlostí), které kombinuje do komplexnějších celků. Změna v aplikaci se provádí záměnou jednoduchých aplikačních funkcí -říkejme tomu modularita.

Tipoval bych, že Vám ani nevadí relační model, jako SQL. Existovaly knihovny, kde se i s relačními databázemi pracovalo podobně - v 90 letech existovalo několik knihoven, minimálně jedna od Borlandu, a co jsem se díval, tak na GitHubu jsou desítky. Tohle je věčná diskuze trvající od konce éry COBOLu, a argumenty jedné i druhé strany jsou stejné. Doporučoval bych diskuzi, obhajobu SQL od Joe Celka (což je dneska už pán v letech, který hodně hezky popsal přechod od COBOLu k SQL).

S SQL určitě ztrácíte nad procesem zpracování dat kontrolu, což pro některé vývojáře může být nepříjemné. Podobně jako je pro mne např. nepříjemné použití ORM. Zas těch přecitlivělých vývojářů je relativně málo, což dokazuje rozšíření SQL i ORM. Určitě s použitím generické databáze ztrácíte v limitních případech až řád výkonu - zvlášť pokud dokážete efektivně využít paměť - což není o SQL, ale o tom, že se používá obecné uložiště a neustále se musí mapovat na zadaný záznam, který ale není zadrátovaný do kódu.

Na stranu druhou - tento hard code přístup měl hodně strmou křivku učení, což nemuselo být zřejmé před 40 lety, kdy nebyly alternativy, a bez programátorů jste se k datům nedostal, což zase omezovalo práci s daty a prodlužovalo reálný čas dostupnosti databáze. Tehdejší databáze byly relativně efektivní (na tehdejším HW), ale musel jste počkat 2-3 dny, možná týden, než Vám programátor napsal report. To je jeden z důvodů proč vzniklo SQL - efektivitu nikdo až tak moc neřešil, ale uživatelé přes terminál mohli mít data během několika minut.

Navíc i ty staré relační databáze některé úlohy z principu řešily lépe než staré síťové - a ve chvíli, kdy šla CPU výkonnostně nahoru (90 léta), tak ten direktivní přístup k datům ztratil význam. Za posledních deset let jsem u dvou uživatelů Postgresu konstatoval, že by to měli přepsat do Cčka, a databázi použít jen jako storage nebo nepoužít. Ono to SQL funguje docela hezky.


Re:Maji tabulkove databaze v dnesni dobe smysl?
« Odpověď #95 kdy: 11. 09. 2018, 08:08:27 »
Ta výhoda spočívá v tom, že ty datové funkce jsou primitivní (rychleji už to nejde) a mají očekávanou odezvu, ať už jsou nasazeny v aplikačním programu kdekoliv. Programátor postupuje tedy tak, že vytváří primitivní aplikační funkce (kdy každá z nich si může obstarat potřebná data s max. možnou rychlostí), které kombinuje do komplexnějších celků. Změna v aplikaci se provádí záměnou jednoduchých aplikačních funkcí -říkejme tomu modularita.

U relačních databází takto nelze postupovat.
Jak už napsal Pavel Stěhule, obecně to není pravda - existují relační databáze, kde lze takto postupovat. Vesměs se ale jedná o historické kousky ztracené v propasti času, nebo různé malé pokusy. A jsou k tomu dobré důvody.

Popsaný způsob programování je v podstatě klasický procedurální, imperativní, vhodný pro počítače s von-Neumannovskou architekturou (nebo podobnou). Jak se ale během času ukázalo, to je pro relační databáze (a pravděpodobně pro databáze obecně) velmi nevhodná architektura, a proto všechny dnešní SQL databáze (a mnohé noSQL, záleží na typu a kusu) obsahují VM fungující na zcela jiném principu. Teoreticky by se daly programovat přímo (assembler == "query plan"), ale bylo by to velmi nepraktické, programátoři jsou prostě vycepovaní von Neumannem. Už takhle je pro začátečníka docela záhul query plan přečíst, instinktivně tam hledá tok programu :-)

.

Re:Maji tabulkove databaze v dnesni dobe smysl?
« Odpověď #96 kdy: 11. 09. 2018, 13:11:59 »

Jednou z uplne prvnich databazi bylo IMS (a obcas se jeste pouziva), a ta uklada data (zaznamy) prave ve stromove strukture podle klice.

... Ale hlavni nevyhoda je, ze si musite vytvorit vlastni funkci (program), ktera ty zaznamy prochazi ...

ale to je také ta největší výhoda

Můžete to vysvětlit?

Obecně většinou platí, že největší výhoda je zároveň největší nevýhodou, je to jen otázka úhlu pohledu.

SQL jazyk má obrovskou výhodu, že se ve své době monopolně prosadil a standardizoval. A proto se jeho odvozeniny paradoxně používají i u nemalého množství databází, které spadají do kolonky NoSQL. Výhodou je, že lidé znají základní klíčová slova, umí používat klauzuli WHERE a že tam zrovna není JOIN nikomu nevadí.

bck

Re:Maji tabulkove databaze v dnesni dobe smysl?
« Odpověď #97 kdy: 11. 09. 2018, 18:02:49 »

Jak už napsal Pavel Stěhule, obecně to není pravda - existují relační databáze, kde lze takto postupovat. Vesměs se ale jedná o historické kousky ztracené v propasti času, nebo různé malé pokusy. A jsou k tomu dobré důvody.

ne , nejde to. Existuje jediná (rozumná) rel. databáze, která to umi = ADABAS D. A to jenom proto, že má pro přímou navigaci ne-relační rozšíření. Tato databáze se dá dnes sice ještě koupit, ale  udělal by to jen blázen. Takže prakticky to nelze a kromě této databaze to také nikdy nešlo.

Popsaný způsob programování je v podstatě klasický procedurální, imperativní, vhodný pro počítače s von-Neumannovskou architekturou (nebo podobnou). Jak se ale během času ukázalo, to je pro relační databáze (a pravděpodobně pro databáze obecně) velmi nevhodná architektura, a proto všechny dnešní SQL databáze (a mnohé noSQL, záleží na typu a kusu) obsahují VM fungující na zcela jiném principu. Teoreticky by se daly programovat přímo (assembler == "query plan"), ale bylo by to velmi nepraktické, programátoři jsou prostě vycepovaní von Neumannem. Už takhle je pro začátečníka docela záhul query plan přečíst, instinktivně tam hledá tok programu :-)

zde tak nějak nechápu, co jste chtěl sdělit. Jsou rel. databáze zlo, protože se musel hledat nějaký jiný způsob jejich programováni, aby to alespoň trochu fungovalo?

Re:Maji tabulkove databaze v dnesni dobe smysl?
« Odpověď #98 kdy: 11. 09. 2018, 18:26:36 »
Popsaný způsob programování je v podstatě klasický procedurální, imperativní, vhodný pro počítače s von-Neumannovskou architekturou (nebo podobnou). Jak se ale během času ukázalo, to je pro relační databáze (a pravděpodobně pro databáze obecně) velmi nevhodná architektura, a proto všechny dnešní SQL databáze (a mnohé noSQL, záleží na typu a kusu) obsahují VM fungující na zcela jiném principu. Teoreticky by se daly programovat přímo (assembler == "query plan"), ale bylo by to velmi nepraktické, programátoři jsou prostě vycepovaní von Neumannem. Už takhle je pro začátečníka docela záhul query plan přečíst, instinktivně tam hledá tok programu :-)

zde tak nějak nechápu, co jste chtěl sdělit. Jsou rel. databáze zlo, protože se musel hledat nějaký jiný způsob jejich programováni, aby to alespoň trochu fungovalo?

Se starými souborovými databázemi jako byla FoxPro, DBase se pracovalo velice podobně - v podstatě za každým reportem byl nějaký kód. SQL je ale mnohem dynamičtější - můžete vytvořit reporty, které by se v 80tých, 90tých letech možná ani udělat nedaly. Do toho pak ještě vstupuje optimalizace - ať už je to automatická volba indexu, volba pořadí JOINování, volba typů JOINování, typů agregací, atd. Moderní systémy berou v potaz velikost paměti, velikosti tabulek, efekt filtrů, efekt agregace.

Nic z toho u síťových databází nebylo - tam jste jen iteroval nad grafem - a všechno ostatní jste si zadrátoval do kódu, a co jste si nenapsal, to jste neměl.

Re:Maji tabulkove databaze v dnesni dobe smysl?
« Odpověď #99 kdy: 11. 09. 2018, 18:50:28 »
zde tak nějak nechápu, co jste chtěl sdělit. Jsou rel. databáze zlo, protože se musel hledat nějaký jiný způsob jejich programováni, aby to alespoň trochu fungovalo?
Tak trochu polopatičtěji: relační databáze jsou dobro, protože se našel způsob jejich programování který funguje velmi dobře. Neexistuje žádná alternativa, která by umožňovala byť jen srovnatelnou automatizovanou optimalizaci. Na světě není dost programátorů kteří by implementovali všechny ty SQL dotazy co po celém světě běhají (a to ani když se omezíme na ty netriviální).

j

Re:Maji tabulkove databaze v dnesni dobe smysl?
« Odpověď #100 kdy: 11. 09. 2018, 18:54:08 »
....
Spousta programatoru pouziva databaze jen jako hloupe uloziste dat, na zacatku select * from, a na konci update/insert. A  k vykonu asi toliko, ze vypocet mezd pro cca 100 lidi na i386 s nejakou tou lokalni databazi na lokalnim disku aplikaci bezici v DOSu ... byl velmi casto rychlejsi ( i radove) nez vypocet tehoz dnes, na HW disponujicim desitkami jader, stovkami GB ram a daty na na poli se stovkami tisic IOps.

Nejaka ta foxka by na soudobem HW musela doslova litat.

BTW: foxpro/dbase umoznovalo dotazovani do databaze uplne stejne (byt v jinem provedeni) jako libovolny SQL, zadny kod na ziskavani dat nebyl treba, ale z pohledu uzivatele je to uplne totez, bezny uzivatel nedostane data z foxpro, uplne stejne jako je nedostane z SQL. Proste proto, ze netusi jak by to mel udelat.

Re:Maji tabulkove databaze v dnesni dobe smysl?
« Odpověď #101 kdy: 11. 09. 2018, 18:57:18 »
zde tak nějak nechápu, co jste chtěl sdělit. Jsou rel. databáze zlo, protože se musel hledat nějaký jiný způsob jejich programováni, aby to alespoň trochu fungovalo?
A ještě trochu jinak: tato diskuse je v podstatě stejná jako ta klasická "jaký má smysl C (nebo dokonce C++), když můžu psát v assembleru a bude to pořádně optimalizované?"

Re:Maji tabulkove databaze v dnesni dobe smysl?
« Odpověď #102 kdy: 11. 09. 2018, 19:19:25 »
....
Spousta programatoru pouziva databaze jen jako hloupe uloziste dat, na zacatku select * from, a na konci update/insert. A  k vykonu asi toliko, ze vypocet mezd pro cca 100 lidi na i386 s nejakou tou lokalni databazi na lokalnim disku aplikaci bezici v DOSu ... byl velmi casto rychlejsi ( i radove) nez vypocet tehoz dnes, na HW disponujicim desitkami jader, stovkami GB ram a daty na na poli se stovkami tisic IOps.

Nejaka ta foxka by na soudobem HW musela doslova litat.

BTW: foxpro/dbase umoznovalo dotazovani do databaze uplne stejne (byt v jinem provedeni) jako libovolny SQL, zadny kod na ziskavani dat nebyl treba, ale z pohledu uzivatele je to uplne totez, bezny uzivatel nedostane data z foxpro, uplne stejne jako je nedostane z SQL. Proste proto, ze netusi jak by to mel udelat.

Dobrá tak, ten report se tam nekódoval, ale nějak parametrizoval. Už je to přez 20 let, co jsem dělal s Foxkou.

Pochybuji, že by Foxka byla na soudobém hw rychlejší - všechny optimalizace a figle, co uměla mají dnes všechny pokročilejší SQL servery. Spíš tehdejší slabší železo a i jednodušší interface neumožnili být moc kreativní. Interface musel být jednoduchý, bo se Vám na obrazovku moc toho nevešlo. Tehdy se nedaly moc stavět vzdušné zámky. Když si uživatel, nebo programátor vymyšlel blbosti, tak to prostě nefungovalo.

j

Re:Maji tabulkove databaze v dnesni dobe smysl?
« Odpověď #103 kdy: 11. 09. 2018, 21:42:03 »
...
Pochybuji, že by Foxka byla na soudobém hw rychlejší - všechny optimalizace a figle...
Pominme to, ze by to neumelo vyuzit ramku ... vice jader ... to jsou detaily, ale i tak by to bezelo mnohonasobne rychlejs. I to jedno jadro je radove vykonejsi.

Tenkrat predevsim programator vykon proste musel resit, byla to jeho primarni prace, nemoh splacat neco a spokojit se s tim, ze ono to nejak funguje. Ono to taky muselo fungovat pouzitelne rychle.

Ja treba na 8bitu resil automatizaci/rizeni RD. Ten stroj se pri tom flakal, prakticky nic nedelal, cteni radove desitek cidel, zapis na radove desitky ovladacich prvku, jestli to potrebovalo 10kB ram tak moc. A dneska se mi odvazuje nekdo tvrdit ze chip s o 5 radu vyssim vykonem to nemuze stihat ... a ze na to potrebuje gigabajty ram a mbity dat na siti.

Naprosto bezne se denne setkavam s tim, ze v aplikacich jsou do databazi selecty s joiny pres nenaindexovane a nejlepe textove pole, idealne jeste rekurzivni a pak se vsichni strasne divi, ze to dobehne ... za hodiny. Tohle kdyby nekdo udelal pred 20 lety, tak skonci obratem na dlazbe.

Re:Maji tabulkove databaze v dnesni dobe smysl?
« Odpověď #104 kdy: 11. 09. 2018, 22:06:44 »
Naprosto bezne se denne setkavam s tim, ze v aplikacich jsou do databazi selecty s joiny pres nenaindexovane a nejlepe textove pole, idealne jeste rekurzivni a pak se vsichni strasne divi, ze to dobehne ... za hodiny. Tohle kdyby nekdo udelal pred 20 lety, tak skonci obratem na dlazbe.

Já bych to zase až tak neidealizoval - první projekty jsem začal dělat po 94 - a žádná sláva to nebyla. O co jsme měli víc nadšení, o to nám víc chyběly znalosti. Vyjma pár ajťáků ze škol se všichni učili za pochodu - a skoro všude se začínalo od nuly. Když si vzpomenu na rok 2005, kdy jsem většině programátorů vysvětloval rozdíl mezi outer joinem a inner joinem, tak bych řekl, že spíš se doba o něco zlepšila. Před 30 roky jste jednak programoval, a jednak hledal kombinaci kódu, kdy sw neklekl. U MS Accessu jsem to zažíval osobně, o MSSQL jsem to slyšel z první ruky. Testy, kontroly, .. tam kde se používala PC to byl divoký západ - byly to fajn časy, ale co se týče kvality sw nebo znalosti průměrného programátora, tak bych se k tomu nevracel.