Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: listoper 07. 09. 2018, 18:00:57

Název: Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: listoper 07. 09. 2018, 18:00:57
Ahoj,
nedavno(a dneska znova, abych to nasel) jsem koukal na povidani strycka Boba o S.O.L.I.D. principles:
https://www.youtube.com/watch?v=t86v3N4OshQ (https://www.youtube.com/watch?v=t86v3N4OshQ)

Vetsinu casu povida o jinych vecech, ale poutave takze dopurucuji.

Jedna z tech "jinych" veci, kterou zmini je ve strucnosti(asi od 54 minuty):
"Tabulkove databaze vznikly kvuli pomalym rotacnim diskum a v dnesni dobe kdy mame velka a rychla SSD ztraci smysl"

Mluvi o tom, ze tabulkove usporadani dat je pro programatory nepohodlne a ze stejne vetsinou z databaze data nacteme a vyrobime si z nich nejake stromy atp. se kterymi se nam dobre pracuje.

Dokonce rika: "If I were a database company right now, if I were Oracle, i'd be scared to death."

To video je 3 roky stare a ja porad vidim jak se na novych projektech Oracle nasazuje.
Vim, ze minimalne v korporatech se tabulkove databaze udrzi jeste dlouho.
Stryka Boba(kdyz odhlednu od politiky) respektuju, ale tady vaham.
Nezda se mi, ze by mel pravdu, ale na druhou stranu nenachazim argument ktery by sel proti te jeho uvaze.

Tak se chci zeptat:
Maji tabulkove databaze na novych projektech smysl?
Migroval nekdo z vas existujici reseni z oraclu nebo jine tabulkove databaze na neco jineho?
Souhlasite, ze rychlost/pomalost rotacnich disku je jediny duvod proc takove databaze existuji?

Diky za nazory
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: mmm 07. 09. 2018, 18:30:27
Od doby vzniku toho videa nosql hype castecne odeznel.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Filip Jirsák 07. 09. 2018, 18:37:13
Různé evidence (účetnictví, sklady, osoby) se tabulkově evidovaly dávno před databázemi, a ani dnes se z toho žádné stromy nevytváří. Takže bych řekl, že tabulkové databáze stále mají smysl. Ono totiž větší množství dat najednou ani moc jinak než tabulkově prezentovat nejde, takže pro lidi ta tabulková prezentace pořád bude přirozená, čemuž se pak samozřejmě podřizuje a systém evidence (její organizace – nezávislá na IT), a pak je přirozené takový systém reprezentovat v tabulkových databázích.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Miloslav Ponkrác 07. 09. 2018, 18:40:04
Lidi toho napovídají a papír/flipchart snese všechno. V každém oboru platí, že je mnoho povolaných a málo vyvolených. Tedy že přibližně jeden ze sta ví co povídá. To je nezávislé na oboru, Gaussova křivka rozložení populace platí všude.

Tabulkové databáze vznikly mimo jiné proto, že jsou rychlé a umožňují uložit extrémní množství dat. Tato technologie a způsob vznikly podložené matematikou a teorií. Nikoli proto, že existují pomalé hard disky.

Databáze umožňují zvládnout obrovské množství dat a přistupovat k nim, dělat nad nimi operace, a udržet nějaké záruky na konzistenci a přístupnost k těmto datům. Jinak řečeno, je za tím seriózní teorie.

Hurá přístupy a předpovědi jak všechno učiníme progresivní a moderní - těch je na každém rohu pytel. Nikdo nebrání strýčku Bobovi takovou databázi udělat a předvést, že bude mít lepší vlastnosti než klasická. Nicméně řeči strýčka Boba nic nestojí. Oracle zbohatl přesně tak, že udělal SQL databázi podloženou matematickou teorií a výzkumnými pracemi té doby - a finančně se mu to sakra vyplatilo.

Nebojte se, tabulkové databáze tu budou ještě za řadu desetiletí.

Pokud má strýček Bob akcie Oracle, a prodá mi je za pár šupů, protože si myslí, že zkrachuje - já ty akcie od něho rád koupím.



Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: andy 07. 09. 2018, 18:44:57
Řekl bych, že stačí si udělat takový středně velký hobby projekt, který pracuje s ukládáním dat a člověk velmi rychle zjistí, jak jsou SQL databáze fajn.... Pokud je teda využívá, spousta frameworků od toho dnes člověka odstíní (a taky to houby umí a spousta věcí, které jdou z databáze triviálně, se pak dělá strašně složitě přes framework).
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Miloslav Ponkrác 07. 09. 2018, 18:50:09
Mimochodem, řada SQL databází chodí v paměti. Někdy se prostě server nacpe takovým množství paměti, aby databázový stroj měl celou databázi načtenou v RAM jako v keši. Je to asi nejrychlejší řešení, pokud je hromada čtení. Jak to urychlí SSD? Bude rychlejší než RAM?
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: listoper 07. 09. 2018, 19:17:40
Od doby vzniku toho videa nosql hype castecne odeznel.
Myslim, ze kdyz ma nekdo takovou praxi jako on tak uz ma vuci hype imunitu.
Je to videt i v tom videu kdyz srovnava ruzne jazyky.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: BoneFlute 07. 09. 2018, 19:32:46
Částečně má pravdu.

Problém je v tom, že 1/ SQL je unifikovaný API, kterému všichni všude rozumím. A 2/ relační databáze jsou extrémně dobře odladěné.

Takže i když někdy je jejich použití na projekt poněkud neintuitivní, tak furt tak nějak není alternativa.

U NoSQL databází bych viděl výhody hlavně v tom škálování. Jinak se domnívám že ještě potřebují dozrát, než budou na stejné úrovni jako SQL.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Miloslav Ponkrác 07. 09. 2018, 19:34:50
Citace
Myslim, ze kdyz ma nekdo takovou praxi jako on tak uz ma vuci hype imunitu. Je to videt i v tom videu kdyz srovnava ruzne jazyky.

Dá se to pochopit. Čím větší senzace obchodník či školitel říká - tím více vydělá.

Já slyším rok co rok minimálně: 1) o 20 velice převratných technologiích, co všechno převálcují; 2) alespoň o 5 zavedených technologiích, co bídně zhybou. Jaká myslíte, že je statistika po dlouhé době? Velice žalostná proti předpovědím. Po všech velice převratných technologiích, co úplně změní svět, neštěkne ani pes.

Mimochodem, víte, že podle Linuse Torvaldse už je Windows mnoho let po smrti? Linus Torvalds, podle jeho slov, o zničení Windows nijak neusiloval, byl to pouze vedlejší efekt rozšíření Linuxu.

Problém je, že hype a unáhlené předpovědi už postihují dříve seriózní obory. Například vědu a fyziku, viz zpráva o částici rychlejší než světlo. Holt granty a prachy je třeba získávat uveřejňováním senzací, aby se peněženky pro vědce rychleji otevíraly. Otázkou ovšem je, jestli je toto ještě seriózní věda.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: listoper 07. 09. 2018, 19:36:35
Různé evidence (účetnictví, sklady, osoby) se tabulkově evidovaly dávno před databázemi, a ani dnes se z toho žádné stromy nevytváří. Takže bych řekl, že tabulkové databáze stále mají smysl. Ono totiž větší množství dat najednou ani moc jinak než tabulkově prezentovat nejde, takže pro lidi ta tabulková prezentace pořád bude přirozená, čemuž se pak samozřejmě podřizuje a systém evidence (její organizace – nezávislá na IT), a pak je přirozené takový systém reprezentovat v tabulkových databázích.
OK, ale...
Ta tabulkova evidence v dobach kartotek mela stejnou motivaci jako ty databaze: "Rychle se dostat k datum ktera chci".

Videl jsem v nedavne dobe dve aplikace (jedna stara 20 let, druha relativne moderni) u obou byla databaze vlastne jen datastore a synchronizace mezi nody. Jakmile se data vytahla tak se pracovalo se stromovou strukturou v pameti a v db byl lock az do doby nez se uzivatel rozhodl ukladat. Obe to jsou bankovni aplikace a podle me obe jsou ten typicky use case evidence (ucty, firmy, osoby...). Fungovalo to prekvapive dobre a je to jedna z pricin proc o tom premyslim. Kdyby se u nich zahodila ta databaze a serializovalo se to na file system treba jako xml tak by to mohlo byt i rychlejsi, protoze by se eliminoval network overhead.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: MasoxCZ 07. 09. 2018, 19:38:07
A neměl on na mysli náhodou "big data"?
Jako když budu sledovat výskyt osob na strategických uzlech infrastruktury, přičemž identifikaci budu dělat jen z obrazu kamer a dejme tomu metadat z telefonů, tak si umím představit že SQL nebude optimální nástroj. Ale nenapadá mě, proč by nemělo být vhodné u pěkně strukturovaných dat.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: listoper 07. 09. 2018, 19:41:17
Mimochodem, řada SQL databází chodí v paměti. Někdy se prostě server nacpe takovým množství paměti, aby databázový stroj měl celou databázi načtenou v RAM jako v keši. Je to asi nejrychlejší řešení, pokud je hromada čtení. Jak to urychlí SSD? Bude rychlejší než RAM?

On v tom videu vlastne rika, ze SSD je takova persistentni RAM. Nicmene.. Pokud mam tolik pameti, ze v ni vsechno udrzim, existuje duvod proc to organizovat do tabulek?
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: listoper 07. 09. 2018, 19:47:59
A neměl on na mysli náhodou "big data"?
Jako když budu sledovat výskyt osob na strategických uzlech infrastruktury, přičemž identifikaci budu dělat jen z obrazu kamer a dejme tomu metadat z telefonů, tak si umím představit že SQL nebude optimální nástroj. Ale nenapadá mě, proč by nemělo být vhodné u pěkně strukturovaných dat.

Myslim, ze nemel na mysli big data. Mluvil o tom dost obecne.
A kdyz si vezmu treba hibernate tak to je typicky priklad, ktery dela z tabulkovych dat v databazi stromecky(mozna spis obecneji - grafy). A pouziva se i na aplikace s malym mnozstvim dat. *batis vlastne taky.
Cizi klice jsou reprezentovany jako reference na jine entity...
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: aabb 07. 09. 2018, 19:51:19
Kazda z databaz je vhodna na nieco viac, na nieco menej. Vseobecne radsej pouzivam relacne (tabulkove) DB, MySQL... Pripadaju mi "najuniverzalnejsie". Hlavne na projektoch, kde sa struktura dat meni s pridavanim funkcnosti do aplikacie. Casto krat zivot prinesie situacie, kedy treba spajat "hrusky s jablkami", robit "datovu analytiku". Vela takychto "divocin" spravim v SQL na zopar riadkov. Napr. v Mongu je to na bolest hlavy s neistym vysledkom. Ale su aj situacie, kde je lepsie pouzit dokumentovu DB (Mongo, Elasticsearch, Redis,...).
Pri mensich, hobby projektoch si v 99% vystacis s relacnymi DB.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Miloslav Ponkrác 07. 09. 2018, 19:54:02
Citace
On v tom videu vlastne rika, ze SSD je takova persistentni RAM. Nicmene.. Pokud mam tolik pameti, ze v ni vsechno udrzim, existuje duvod proc to organizovat do tabulek?

Ano. Protože data mají logiku, mají určenou doménovou a referenční integritu. Mají zaručenou konzistenci dat a konzistenci operací. Máte zajištěno mnohem více.

Jaký existuje důvod organizovat data do grafů nebo objektových sítí? Jak vytvoříte nad těmito strukturami rychlé datové operace? Jaké bude API? Jak zajistíte konzistenci dat a vazeb mezi daty? Jak budete zajišťovat transakce? Jak budete vytvířet jazyk pro hledání dat pro obrovská data?

Jak říkám, nikdo nikomu nebrání, aby udělal databázi na grafových či objektových strukturách. A dotáhl to tak daleko, aby převálcoval relační databáze. Ale ony tu jsou omezující i fyzikální zákony, není to jen o tom, že dokážete co chcete.

***

Důvod organizovat do tabulek je proto, že vám jako aplikaci, která využívá služby databázového stroje není absolutně nic do toho, kde jsou data uložena. Váš to nezajímá. Jestli data jsou uložena na HDD, SDD, RAM, nebo na děrných štítcích, nebo na nové hyperpaměti 22. století - o to se nestaráte. Vy jen požadujete po databázovém stroji vrácení dat či operaci s daty. Tečka. Databázový stroj je abstrakce, kterou neřešíte. Administrátor databázového stroje pak vyřeší implementační detaily.

A až namísto SSD objeví listoper v roce 2020 super nový princip úložiště, za kterou dostane Nobelovu cenu, stále nad tím bude možné provozovat SQL databáze. Banky a korporace budou okamžitě kupovat jeho novou technologii a listoper bude miliardář. To je síla abstrakce - že SQL databáze efektivně fungují prakticky na jakémkoli úložném médiu.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Filip Jirsák 07. 09. 2018, 19:57:01
Ta tabulkova evidence v dobach kartotek mela stejnou motivaci jako ty databaze: "Rychle se dostat k datum ktera chci".
Ne vždy byla důležitá „rychlost hledání“. Třeba pro účetní záznamy je přirozené zapisovat je chronologicky tak, jak přicházejí – A to zrovna rychlosti hledání často nepomáhá. Proto se pak ty záznamy přepisovaly v jiném uspořádání – ale zase do tabulek.

Videl jsem v nedavne dobe dve aplikace (jedna stara 20 let, druha relativne moderni) u obou byla databaze vlastne jen datastore a synchronizace mezi nody. Jakmile se data vytahla tak se pracovalo se stromovou strukturou v pameti a v db byl lock az do doby nez se uzivatel rozhodl ukladat.
To, že se někde používají stromové struktury, přece ale neznamená, že se používají všude, ani že nikde nejsou data přirozeně uspořádaná do tabulek.

Obe to jsou bankovni aplikace a podle me obe jsou ten typicky use case evidence (ucty, firmy, osoby...).
To by mne zajímalo to konkrétní použití. Jasně, někdy jsou to třeba spíš dokumenty s nějakými vazbami – třeba firma, ta má nějaké vlastnosti, na firmu jsou navázaní lidé, ti mají zase nějaké vlastnosti. Ale třeba evidovat finanční transakce ve stromové struktuře mi moc smysl nedává.
Název: RAM, SSD - jsou také tabulkové databáze
Přispěvatel: Miloslav Ponkrác 07. 09. 2018, 20:13:19
Hele, proč ta RAM nebo SSD nemají tedy úložné místo organizováno do grafů či objektů, když je to tak lepší? Proč i ta RAM a SSD jedou v alokačních blocích? Není to nápověda, proč je univerzálnější a nejpoužitelnější organizovat data a datové úložiště do tabulek?

Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Mongo 07. 09. 2018, 20:17:35
Maji tabulkove databaze na novych projektech smysl?

Zavisi od projektu. Uz jen z povahy tveho dotazu vyplyva, ze si s daty neuzivas moc dlouho. Relacni DB byly, jsou a budou. Jsou pomerne lehke na pochopeni, SQL jazyk taky a kdyz se spravna cast business logiky resi uz rovnou v DB (stored procedures, olap atd.) tak na to se backendove jazyky stezi muzou chytat jak rychlosti tak pametovymi naroky. Sortnout milion radku v DB je porad levou zadni a jsou tam roky piplane algoritmy psane snad rovnou v ASM. Bavime se tedy o poradnych relacnich databazich (Oracle, MSSQL, PostgreSQL) a ne o hrackach typu MySQL ci SQLite.

Migroval nekdo z vas existujici reseni z oraclu nebo jine tabulkove databaze na neco jineho?

Jasne. Pro nektere typy ukolu - typycky nejake bezne webariny typu redakcni system jsou vyhodnejsi NoSQL reseni, nebo rovnou cloudove datove sluzby (amazon web services). Prevod takove datove struktury je pomerne primocara zalezitost a existuje milion podpurnych toolu.

Souhlasite, ze rychlost/pomalost rotacnich disku je jediny duvod proc takove databaze existuji?

To je takove tvrzeni pro tvrzeni. I kdyz dnes uz neni problem do servru narvat 512GB RAM porad nektere ulohy muzou karteziansky vybouchnout a budes swapovat do aleluja tak jako tak. Proste optimalizovat to pro pouziti na harddisku ma svoje pozitiva. Mezi nami, rychlost disku u DB je tak predposledni co te trapi. Maximalne tak pri obnove zalohy  8)

Suma sumarum, kazda aplikace ma svoje specifika. Nekde chroustas porad cisla, nekde jen drzis hierarchickou strukturu, nekde se DB pouziva v podstate jen jako uloziste ci sofistikovanejsi souborovy system. Relacni DB jsou roky overeny univerzal vhodny na skoro vsechno a jen tak nezmizi. Tim nechci rici, ze jine typy DB nejsou potreba, prave naopak, vitam je. Ale nepujdes s traktorem zavodit ani s formulou orat pole.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Pavel Stěhule 07. 09. 2018, 20:45:06
Vlastnosti rotačních disků (rychlé sekvenční čtení, pomalé čtení s náhodným přístupem) byl asi jen jeden z faktorů proč se rozšířily relační SQL databáze.

1. Relace (tabulky) jsou vlastně množiny, což je jednodušší abstrakce než stromy (grafy). 1D tabulka má tu výhodu, že se s ní dobře jednoduše mentálně pracuje. Když pracujete s fakturou, zajímají vás položky faktury a už vás nezajímají složky, kde je faktura zařazena. Pokud pracuji s fakturami, tak mne nezajímají položky faktur, atd. Relační model není tak obecný jako síťový, ale je dostatečně silný, a velice jednoduchý.

2. Relační databáze byly navrženy pro uživatele - umožňují neprogramátorům pracovat s daty. Tuto vlastnost konkurenční systémy nikdy ve větším měřítku nenabídly - a je to dáno možnostmi a názorností a jednoduchostí relačního modelu. Ono ručně pracovat se stromy pro laika není to pravé ořechové.

3. Relační model byl doplněný o SQL - opět jednoduchý, ale dostatečně silný nástroj. A standardizace, byť ne vždy dokonalá je neskutečně silný nástroj. Pokud umíte pracovat s Mongem, umíte pracovat s Mongem, ale už nikoliv s čímkoliv jiným. Pokud umíte SQL, tak vytvoříte tabulky a dotazy na Oracle, MSSQL, MySQL, Postgresu, SQLite. Na určité úrovni nemusíte řešit detaily a základy jsou stejné. Univerzální dotazovací jazyk nabídly pouze relační SQL databáze. Resp. byly pokusy i u dalších modelů, ale bez výraznějšího rozšíření.

4. Tabulka je implementačně halda. Struktura, která se jednoduše implementuje. Navíc v kombinaci s indexy, kterých můžete mít k haldě tolik kolik potřebujete můžete mít rychlý přístup přes různé atributy. Halda (případně pole) je velice efektivní struktura. Na uložení stromu potřebuje výrazně více paměti.

Ve výsledku je důležitá abstrakce a SQL. Obojí umožňuje pracovat s daty komukoliv. Jestli v reálu data budou uložená na SSD nebo v RAMce, jestli budou uložená v poli, v hash mapě nebo v nějaké stromové struktuře je úplně jedno .. v momentě, kdy bude dost RAM, abych data uložil na disk. Co vždy ale bude důležité, že kdokoliv, kdo má práva a trochu znalostí se může na data podívat z Excelu, z libovolné aplikace a není omezen programátorem.
 
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Jan Forman 07. 09. 2018, 21:38:34
Řekl bych, že částečně měl pravdu, ale mnohdy se to prostě kombinuje.
Jádro je v normální SQL databázi a je docela malé, zbytek dat je napojen do NoSQL. Hlavně je třeba si uvědomit, že takové systémy jsou docela složité na správu. Jsou vhodné jen tam, kde to má smysl.

PostgreSQL velmi slušně dohnal ORACLE
MySQL je trošku jinde obzvlášť co se clusteringu týče

Pokud se chcete zasmát, jednou jsem něco řešil a z úst ORACLE se ozvalo "no na to ORACLE DB nestačí, ale můžeme použít něco jiného" :-) MySQL NDB Cluster.
S tou implementací SQL je to pravda, protože Cassandra se taky snaží tvářit podobně, i když to prostě není SQL.

SQLite pořád bude mít smysl, Postgres taky a pak MySQL jako cluster a nebo rovnou NoSQL každé je ale dobré na něco jiného.

Narovinu ten Excel je stále také použitelný :) prostě na něco ano. Na každou práci je dobré použít vhodný nástroj. Vyložený univerzál prostě neexistuje.
Tabulky prostě byly a budou.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: listoper 07. 09. 2018, 21:54:54
Maji tabulkove databaze na novych projektech smysl?

Zavisi od projektu. Uz jen z povahy tveho dotazu vyplyva, ze si s daty neuzivas moc dlouho. ...
Definuj dlouho :-)
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Ondrej Nemecek 07. 09. 2018, 21:55:00
Ještě tu nezaznělo, že i SQL databáze se stále vyvíjejí, takže reagují na nástup SSD i na nástup NoSQL přístupů. Podívejte se na články pana Stěhule tady na rootu o novinkách v Postgres, je to dobrý příklad.

Pak existují databáze, které umožňují kombinovat sql, grafový, dokumentový a objektový přístup. Jejich prostudováním můžete také získat představu o vhodnosti či nevhodnosti jednotlivých přístupů pro daný účel.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: listoper 07. 09. 2018, 22:01:08
Vlastnosti rotačních disků (rychlé sekvenční čtení, pomalé čtení s náhodným přístupem) byl asi jen jeden z faktorů proč se rozšířily relační SQL databáze.

1. Relace (tabulky) jsou vlastně množiny, což je jednodušší abstrakce než stromy (grafy). 1D tabulka má tu výhodu, že se s ní dobře jednoduše mentálně pracuje. Když pracujete s fakturou, zajímají vás položky faktury a už vás nezajímají složky, kde je faktura zařazena. Pokud pracuji s fakturami, tak mne nezajímají položky faktur, atd. Relační model není tak obecný jako síťový, ale je dostatečně silný, a velice jednoduchý.

2. Relační databáze byly navrženy pro uživatele - umožňují neprogramátorům pracovat s daty. Tuto vlastnost konkurenční systémy nikdy ve větším měřítku nenabídly - a je to dáno možnostmi a názorností a jednoduchostí relačního modelu. Ono ručně pracovat se stromy pro laika není to pravé ořechové.

3. Relační model byl doplněný o SQL - opět jednoduchý, ale dostatečně silný nástroj. A standardizace, byť ne vždy dokonalá je neskutečně silný nástroj. Pokud umíte pracovat s Mongem, umíte pracovat s Mongem, ale už nikoliv s čímkoliv jiným. Pokud umíte SQL, tak vytvoříte tabulky a dotazy na Oracle, MSSQL, MySQL, Postgresu, SQLite. Na určité úrovni nemusíte řešit detaily a základy jsou stejné. Univerzální dotazovací jazyk nabídly pouze relační SQL databáze. Resp. byly pokusy i u dalších modelů, ale bez výraznějšího rozšíření.

4. Tabulka je implementačně halda. Struktura, která se jednoduše implementuje. Navíc v kombinaci s indexy, kterých můžete mít k haldě tolik kolik potřebujete můžete mít rychlý přístup přes různé atributy. Halda (případně pole) je velice efektivní struktura. Na uložení stromu potřebuje výrazně více paměti.

Ve výsledku je důležitá abstrakce a SQL. Obojí umožňuje pracovat s daty komukoliv. Jestli v reálu data budou uložená na SSD nebo v RAMce, jestli budou uložená v poli, v hash mapě nebo v nějaké stromové struktuře je úplně jedno .. v momentě, kdy bude dost RAM, abych data uložil na disk. Co vždy ale bude důležité, že kdokoliv, kdo má práva a trochu znalostí se může na data podívat z Excelu, z libovolné aplikace a není omezen programátorem.

Hmm tak ted nevim... :-)
Na jednu stranu jsem rad, ze se ozval odbornik.
Na druhou stranu prave kvuli tvemu hobby muze byt tvuj nazor zkresleny.

Neuvedomuju si, ze bych potkal uzivaka kterej by umel aspon zaklad SQL, nebo si napojit excel na databazi.
Mozna mam jen smulu.

Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: fortranista 07. 09. 2018, 22:19:59
Citace
Myslim, ze kdyz ma nekdo takovou praxi jako on tak uz ma vuci hype imunitu. Je to videt i v tom videu kdyz srovnava ruzne jazyky.

Dá se to pochopit. Čím větší senzace obchodník či školitel říká - tím více vydělá.

Problém je, že hype a unáhlené předpovědi už postihují dříve seriózní obory. Například vědu a fyziku, viz zpráva o částici rychlejší než světlo.

To je ale docela nefér to takto podat zrovna v tomto případě. Já tu "kauzu" sledoval dost zblízka a do hype to tlačili novináři - dost drsně (například vytrháváním vět z kontextu). Všichni vědci to brali velmi seriózně, upozorňovali na to, že je to divné, že se to musí ověřit, očekávají nějakou chybu v měření a tak. Prakticky nikdo neříkal, jaká je to revoluce a že překonali Einsteina. Bohužel novináři to dost otáčeli.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Miloslav Ponkrác 07. 09. 2018, 22:23:51
Citace
Na jednu stranu jsem rad, ze se ozval odbornik. Na druhou stranu prave kvuli tvemu hobby muze byt tvuj nazor zkresleny.

Proč by relační tabulkové databáze měly zahynout? Jednak se SQL databáze rozvíjejí. Jednak získat z relačních databází strom, graf, apod. je často spíše otázkou indexování a pak vhodného SQL dotazu.

Když chci strom/graf, tak si k tabulce X přidám druhou tabulku X_tree_index nebo X_graph_index, kde pomocí triggerů nebo ručně indexuji pár čísel, abych mohl jediným SQL dotazem načíst celou větev stromu či jiné časté operace. Mám už to jako takový "návrhový relační vzor".

Objektové databáze zase mají problém v tom, že se nikdo na světě neshodne, co vlastně objekty jsou, a jaké je to správné objektové pojetí. Pokud bude tisíc lidí mluvit o objetech, budete mít tisíc různých neslučitelných názorů, jak správně pojmout objekty. --- Pak další otázka, jak uděláte univerzální objektové API? Zase jak se kterým jazykem.

Citace
Neuvedomuju si, ze bych potkal uzivaka kterej by umel aspon zaklad SQL, nebo si napojit excel na databazi. Mozna mam jen smulu.

Ve Windows existují ODBC ovladače, a připojíte se skrze ně téměř do jakékoli databáze. Získat pak přístup z jakéhokoli program do jakékoli myslitelné databáze není problém. Jednoduchým způsobem tam můžete i svůj program napojit skoro kam chcete.

Excel má napojení na databázový zdroj přímo v hlavním menu Excelu. :-) Stačí to uživateli jen ukázat. :-) Nebo ještě lépe mu to nastavit. (I když pravda, já stále mám Microsoft Office 2003.)

Ještě užitečnější nástroj je, spíše byl, Microsoft Access. Pro zadávání dat přímo ideální.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: listoper 07. 09. 2018, 22:29:50
Citace
Na jednu stranu jsem rad, ze se ozval odbornik. Na druhou stranu prave kvuli tvemu hobby muze byt tvuj nazor zkresleny.

Proč by relační tabulkové databáze měly zahynout? ...

Vubec nerozumim tvemu zpusobu diskuze.
Název: Kauza: Částice rychlejší než světlo
Přispěvatel: Miloslav Ponkrác 07. 09. 2018, 22:34:06
Citace
To je ale docela nefér to takto podat zrovna v tomto případě. Já tu "kauzu" sledoval dost zblízka a do hype to tlačili novináři - dost drsně (například vytrháváním vět z kontextu). Všichni vědci to brali velmi seriózně, upozorňovali na to, že je to divné, že se to musí ověřit, očekávají nějakou chybu v měření a tak. Prakticky nikdo neříkal, jaká je to revoluce a že překonali Einsteina. Bohužel novináři to dost otáčeli.

Ať chcete nebo ne, je to dnešní trend - bulvarizace. Dotýká se to dokonce i vědy.

Vědu a vědce bych nehájil, oni v tom nejsou nevinně. Sama vědecká obec si zvolila, že grafomanie (počet publikací/článků + citační index) bude pro vědu a vědce více, než kvalitní vědecká práce a kvalitní věda. Jinak řečeno, sama vědecká obec bez skrupulí přijala bulvární metody a pravidla.

Vědci jsou hodnoceni podle toho, kolik toho napíší a vydají, nikoli podle kvality. Až zase uslyšíte z úst vědců třeba: "Karlova univerzita dělá nejlepší vědu, protože má nejvíce odborných článků" - tak to je přesně bulvární metrika, podle které jede dnešní vědecká obec.

Nejlepší vědec by dnes byl Honore de Balzac.

Jestliže jsou vědci tlačeni do co nejvíce písmenek, jinak mají problém a klesají v hodnocení, tak to není nic jiného než tlačení do vydávání nehotových a neověřených prací, zpráv a výstupů. Za to mohou vědci a vědecká obec sama, nikdo je do toho nenutil si to takto zavést.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Miloslav Ponkrác 07. 09. 2018, 22:35:39
Citace
Na jednu stranu jsem rad, ze se ozval odbornik. Na druhou stranu prave kvuli tvemu hobby muze byt tvuj nazor zkresleny.

Proč by relační tabulkové databáze měly zahynout? ...

Vubec nerozumim tvemu zpusobu diskuze.

1) Prvotní otázka byla o tom, že tabulkové databáze mají zahynout.

2) Do toho byla tvá pochybnost, že odborník je příliš hájí a má zkreslený názor.

I přidal jsem další argument, proč má pravdu.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Mongo 07. 09. 2018, 22:44:22
Maji tabulkove databaze na novych projektech smysl?

Zavisi od projektu. Uz jen z povahy tveho dotazu vyplyva, ze si s daty neuzivas moc dlouho. ...
Definuj dlouho :-)

pres 20 let :-D
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: listoper 07. 09. 2018, 22:53:46
Ta tabulkova evidence v dobach kartotek mela stejnou motivaci jako ty databaze: "Rychle se dostat k datum ktera chci".
Ne vždy byla důležitá „rychlost hledání“. Třeba pro účetní záznamy je přirozené zapisovat je chronologicky tak, jak přicházejí – A to zrovna rychlosti hledání často nepomáhá. Proto se pak ty záznamy přepisovaly v jiném uspořádání – ale zase do tabulek.
OK to jsem asi prilis zjednodusil.

Videl jsem v nedavne dobe dve aplikace (jedna stara 20 let, druha relativne moderni) u obou byla databaze vlastne jen datastore a synchronizace mezi nody. Jakmile se data vytahla tak se pracovalo se stromovou strukturou v pameti a v db byl lock az do doby nez se uzivatel rozhodl ukladat.
To, že se někde používají stromové struktury, přece ale neznamená, že se používají všude, ani že nikde nejsou data přirozeně uspořádaná do tabulek.
Ano,ale tady mi na prvni pohled prislo, ze by davalo smysl vyuzit databazi prave kvuli konzistenci dat a transakcim.
A zajimala by me motivace architekta k takovemu reseni. A protoze jsem videl toho Boba povidat o necem podobnem tak mi to vrta v hlave a snazim se prijit na to co bud ja nebo Bob a ty dva architekti nevidime. (BTW. jsou fakt dva ruzni, kazdy jina narodnost a kazdy v jine bance)

Obe to jsou bankovni aplikace a podle me obe jsou ten typicky use case evidence (ucty, firmy, osoby...).
To by mne zajímalo to konkrétní použití. Jasně, někdy jsou to třeba spíš dokumenty s nějakými vazbami – třeba firma, ta má nějaké vlastnosti, na firmu jsou navázaní lidé, ti mají zase nějaké vlastnosti. Ale třeba evidovat finanční transakce ve stromové struktuře mi moc smysl nedává.
Credit risk management. Nejde o nejake real time transakce, spis kalkulace rizika spojeneho s poskytnutim pujcky.
Takze se ukladaji produkty, zaruky, data o firmach, platebni historie, ...
Odhadem je tam asi 500 tabulek. 
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: listoper 07. 09. 2018, 22:57:15
Citace
Na jednu stranu jsem rad, ze se ozval odbornik. Na druhou stranu prave kvuli tvemu hobby muze byt tvuj nazor zkresleny.

Proč by relační tabulkové databáze měly zahynout? ...

Vubec nerozumim tvemu zpusobu diskuze.

1) Prvotní otázka byla o tom, že tabulkové databáze mají zahynout.

2) Do toho byla tvá pochybnost, že odborník je příliš hájí a má zkreslený názor.

I přidal jsem další argument, proč má pravdu.

1) Zahynout ne. Jen jestli maji smysl. Preziva spousta jinych nesmyslu tak proc ne databaze.
2) Myslel jsem tim nazor na schopnosti BFU pracovat s databazi. Pavel jako clovek co databazi programuje se asi setkava s jinou skupinou uzivatelu nez ja.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: listoper 07. 09. 2018, 23:00:13
Maji tabulkove databaze na novych projektech smysl?

Zavisi od projektu. Uz jen z povahy tveho dotazu vyplyva, ze si s daty neuzivas moc dlouho. ...
Definuj dlouho :-)

pres 20 let :-D

Tak to mas pravdu.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Miloslav Ponkrác 07. 09. 2018, 23:15:13
Citace
1) Zahynout ne. Jen jestli maji smysl. Preziva spousta jinych nesmyslu tak proc ne databaze.

Za SQL relační databáze s tabulkami není náhrada. Jsou velice potřebné a jejich funkcionalitu nikdo ani většinově nenahradil.

Citace
2) Myslel jsem tim nazor na schopnosti BFU pracovat s databazi. Pavel jako clovek co databazi programuje se asi setkava s jinou skupinou uzivatelu nez ja.

Já sám jsem při vývoji programů donutil spoustu lidí, ba i uklízeček, nadatlovat data do databáze. Stačilo jim ukázat otevřenou tabulku, do které to mají nasázet. Ohne problem.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Miloslav Ponkrác 07. 09. 2018, 23:16:01
...
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Kit 07. 09. 2018, 23:22:23
Tam, kde se používá kombinace SQL + ORM, by se dalo zvážit použití databáze NoSQL, nejlépe objektové. Konverze mezi relačním a objektovým modelem je totiž drahá a nedokonalá. My, kteří ORM nepoužíváme, si však budeme stále chválit a hýčkat své SQL.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Pavel Stěhule 08. 09. 2018, 06:47:25
Vlastnosti rotačních disků (rychlé sekvenční čtení, pomalé čtení s náhodným přístupem) byl asi jen jeden z faktorů proč se rozšířily relační SQL databáze.

1. Relace (tabulky) jsou vlastně množiny, což je jednodušší abstrakce než stromy (grafy). 1D tabulka má tu výhodu, že se s ní dobře jednoduše mentálně pracuje. Když pracujete s fakturou, zajímají vás položky faktury a už vás nezajímají složky, kde je faktura zařazena. Pokud pracuji s fakturami, tak mne nezajímají položky faktur, atd. Relační model není tak obecný jako síťový, ale je dostatečně silný, a velice jednoduchý.

2. Relační databáze byly navrženy pro uživatele - umožňují neprogramátorům pracovat s daty. Tuto vlastnost konkurenční systémy nikdy ve větším měřítku nenabídly - a je to dáno možnostmi a názorností a jednoduchostí relačního modelu. Ono ručně pracovat se stromy pro laika není to pravé ořechové.

3. Relační model byl doplněný o SQL - opět jednoduchý, ale dostatečně silný nástroj. A standardizace, byť ne vždy dokonalá je neskutečně silný nástroj. Pokud umíte pracovat s Mongem, umíte pracovat s Mongem, ale už nikoliv s čímkoliv jiným. Pokud umíte SQL, tak vytvoříte tabulky a dotazy na Oracle, MSSQL, MySQL, Postgresu, SQLite. Na určité úrovni nemusíte řešit detaily a základy jsou stejné. Univerzální dotazovací jazyk nabídly pouze relační SQL databáze. Resp. byly pokusy i u dalších modelů, ale bez výraznějšího rozšíření.

4. Tabulka je implementačně halda. Struktura, která se jednoduše implementuje. Navíc v kombinaci s indexy, kterých můžete mít k haldě tolik kolik potřebujete můžete mít rychlý přístup přes různé atributy. Halda (případně pole) je velice efektivní struktura. Na uložení stromu potřebuje výrazně více paměti.

Ve výsledku je důležitá abstrakce a SQL. Obojí umožňuje pracovat s daty komukoliv. Jestli v reálu data budou uložená na SSD nebo v RAMce, jestli budou uložená v poli, v hash mapě nebo v nějaké stromové struktuře je úplně jedno .. v momentě, kdy bude dost RAM, abych data uložil na disk. Co vždy ale bude důležité, že kdokoliv, kdo má práva a trochu znalostí se může na data podívat z Excelu, z libovolné aplikace a není omezen programátorem.

Hmm tak ted nevim... :-)
Na jednu stranu jsem rad, ze se ozval odbornik.
Na druhou stranu prave kvuli tvemu hobby muze byt tvuj nazor zkresleny.

Neuvedomuju si, ze bych potkal uzivaka kterej by umel aspon zaklad SQL, nebo si napojit excel na databazi.
Mozna mam jen smulu.

Já takových uživatelů potkávám desítky ročně. Nově jsem se dozvěděl, že např. s databázemi přímo pracují intenzivně testeři. Jinak, kdekoliv, kde je databáze dostupná, a jsou v ní zajímavá data, tak se data vytěžují. U jednodušších aplikací přímo. Je to otázkou oboru, velikosti firmy, kde je několik lidí, případně celé týmy v roli datových analytiků. Většina programátorů využívá možnosti dívat se na svá data, aniž by ještě měli připravenou svou aplikaci a mohli se dívat na data skrze svůj interface.

Věřím, že se můžete pohybovat v doméně, kde přímý přístup není realizovatelný (nebo snadno realizovatelný), a pak samozřejmě, takovou zkušenost nemůžete mít. Pokud Vám někde běží databáze v hostingu, tak z venku se k ní většinou nedostanete - a v momentě, kdy ztratíte svobodu, a data analyzujete jenom prostřednictvím vyexportovaným naimportovaných csv, tak Vás to rychle přestane bavit.

Alespoň okrajově sleduji výzkum v oboru databází, a už možná déle než 20 let se čeká, až se zbavíme omezení IO. První paměťové databáze jsou tu od devadesátých let. Pak se storage části databází budou přepisovat. Ale že by se opustil relační model - k tomu není důvod. Ve výzkumu to není tak vyhrocené - a je vidět prolínání některých konceptů nebo vzájemné obohacování - praxe ukázala, že držet se dogmaticky čistoty jednoho modelu není praktické (což neznamená, že je praktické dělat opičárny). SQL dnes už není čistě relační jazyk - podporuje rekurzi, analytické funkce, neatomické typy, a k nim příslušné dotazovací jazyky XPath a JSONPath. ANSI SQL 2020 by mělo integrovat GraphQL.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Pavel Stěhule 08. 09. 2018, 07:14:55
Ano,ale tady mi na prvni pohled prislo, ze by davalo smysl vyuzit databazi prave kvuli konzistenci dat a transakcim.
A zajimala by me motivace architekta k takovemu reseni. A protoze jsem videl toho Boba povidat o necem podobnem tak mi to vrta v hlave a snazim se prijit na to co bud ja nebo Bob a ty dva architekti nevidime. (BTW. jsou fakt dva ruzni, kazdy jina narodnost a kazdy v jine bance)

Nikde netvrdím, že nemůžete najít aplikaci, kde by se nerelační model, nerelační db nepoužil šikovně, nebo naopak, kde by se relační databáze použila dobře. Pro SQL existuje celá řada antipatternů, poznaných praxí, což znamená, že na velkém množství projektů se SQL relační databáze používají nevhodně. Viděl jsem hrůzné modernizace aplikací do SQL, které byly postavené na tom, že do relační databáze se uložily bloby obsahující data a databáze se zneužila jako storage.

SQL relační databáze se existují od 80 let, v masovějším nasazení od začátku devadesátých let. Doporučení na základě praxe, jak s těmito databázemi pracovat jsou k dispozici spíš tak od druhé poloviny devadesátých let. Dá se setkat s lidmi, s aplikacemi, které sice používají SQL relační databáze, ale jsou ukotvení v COBOLu, v IMS, .. Ani s jedním z těch zmíněných systémů bych dělat fakt nechtěl, ale sloužily, dodnes slouží někde přes 50 let, a vůči tomu, co bylo před těmito systémy představovaly neskutečný pokrok.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: fortranista 08. 09. 2018, 09:54:58
Je to tedy úplně OT (sorry jako), ale to video je hodně zajímavé. Ten člověk má evidentně velké zkušenosti a zejména část o tom, že C je z jeho pohledu víc OO než C++ je dost dobrá (s tím "leakem" dat do headerů v C++ má pravdu, to je dost humus).
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Kiwi 08. 09. 2018, 10:53:58
Je to tedy úplně OT (sorry jako), ale to video je hodně zajímavé. Ten člověk má evidentně velké zkušenosti a zejména část o tom, že C je z jeho pohledu víc OO než C++ je dost dobrá (s tím "leakem" dat do headerů v C++ má pravdu, to je dost humus).
C++ moc objektové není a na C se dá postavit mnohem lepší objektový jazyk než C++ - viz Objective C. Ale to ještě neznamená, že samotné C je objektové. Ostatně takový Forth, Lisp či Lua také nejsou objektové, ale snadno se v nich dá vybudovat objektová nástavba - ve všech třech případech opět lepší než C++.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: fortranista 08. 09. 2018, 11:02:23
Je to tedy úplně OT (sorry jako), ale to video je hodně zajímavé. Ten člověk má evidentně velké zkušenosti a zejména část o tom, že C je z jeho pohledu víc OO než C++ je dost dobrá (s tím "leakem" dat do headerů v C++ má pravdu, to je dost humus).
C++ moc objektové není a na C se dá postavit mnohem lepší objektový jazyk než C++ - viz Objective C. Ale to ještě neznamená, že samotné C je objektové. Ostatně takový Forth, Lisp či Lua také nejsou objektové, ale snadno se v nich dá vybudovat objektová nástavba - ve všech třech případech opět lepší než C++.

jj souhlas! on tam nerikal, ze C je OO jazyk, ale ze s C++ se to v urcitem ohledu zhorsilo (vzal napriklad zapouzdreni z vetsiho rozhledu, nez pouha pristupova prava k metodam/atributum)
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Kit 08. 09. 2018, 11:24:24
jj souhlas! on tam nerikal, ze C je OO jazyk, ale ze s C++ se to v urcitem ohledu zhorsilo (vzal napriklad zapouzdreni z vetsiho rozhledu, nez pouha pristupova prava k metodam/atributum)

Přístupová práva jsou jen jako závora tam, kde by stačil semafor. Zapouzdření je, když jsou operace s daty tam, kde jsou data.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: fortranista 08. 09. 2018, 11:29:17
jj souhlas! on tam nerikal, ze C je OO jazyk, ale ze s C++ se to v urcitem ohledu zhorsilo (vzal napriklad zapouzdreni z vetsiho rozhledu, nez pouha pristupova prava k metodam/atributum)

Přístupová práva jsou jen jako závora tam, kde by stačil semafor. Zapouzdření je, když jsou operace s daty tam, kde jsou data.

to nestaci. zapouzdreni je totiz i metoda pro ukryvani informaci nepodstatnych pro konzumenta dane tridy. A ... no vlastne toto umi jen par jazyku.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Kiwi 08. 09. 2018, 11:44:09
jj souhlas! on tam nerikal, ze C je OO jazyk, ale ze s C++ se to v urcitem ohledu zhorsilo (vzal napriklad zapouzdreni z vetsiho rozhledu, nez pouha pristupova prava k metodam/atributum)

Přístupová práva jsou jen jako závora tam, kde by stačil semafor. Zapouzdření je, když jsou operace s daty tam, kde jsou data.

to nestaci. zapouzdreni je totiz i metoda pro ukryvani informaci nepodstatnych pro konzumenta dane tridy. A ... no vlastne toto umi jen par jazyku.
IMHO to stačí. Přesně jak napsal Kit. Vrtal se někdy nějaký céčkař ve struktuře FILE? Neznám žádného, ač tomu žádný private nebrání. Snad jediný smysl by to mělo jako ochrana před omylem, kdy bych se při volání metody náhodou nechtěně trefil do nějaké vnitřnosti objektu. Ale tomu se dá předejít vhodným pojmenováním, což je jednodušší řešení než další syntaktické přislazování už tak přeslazených "běžných" "objektových" jazyků. Ono je to jako s dělícími svodily vs. plnou čarou. Na dálnici to asi smysl má, ale normální silnici by to zbytečně prodražilo a neuvěřitelně by to zkomplikovalo řešení mimořádných situací.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: fortranista 08. 09. 2018, 11:59:46
jj souhlas! on tam nerikal, ze C je OO jazyk, ale ze s C++ se to v urcitem ohledu zhorsilo (vzal napriklad zapouzdreni z vetsiho rozhledu, nez pouha pristupova prava k metodam/atributum)

Přístupová práva jsou jen jako závora tam, kde by stačil semafor. Zapouzdření je, když jsou operace s daty tam, kde jsou data.

to nestaci. zapouzdreni je totiz i metoda pro ukryvani informaci nepodstatnych pro konzumenta dane tridy. A ... no vlastne toto umi jen par jazyku.
IMHO to stačí. Přesně jak napsal Kit. Vrtal se někdy nějaký céčkař ve struktuře FILE? Neznám žádného, ač tomu žádný private nebrání. Snad jediný smysl by to mělo jako ochrana před omylem, kdy bych se při volání metody náhodou nechtěně trefil do nějaké vnitřnosti objektu. Ale tomu se dá předejít vhodným pojmenováním, což je jednodušší řešení než další syntaktické přislazování už tak přeslazených "běžných" "objektových" jazyků. Ono je to jako s dělícími svodily vs. plnou čarou. Na dálnici to asi smysl má, ale normální silnici by to zbytečně prodražilo a neuvěřitelně by to zkomplikovalo řešení mimořádných situací.

No ale to píšeš v podstatě to stejné co já :-) nikdo se asi nehrabe ve FILE structu, protože z jejich pohledu dostanou jen informaci typedef struct FILE a to je tak všechno. Když si to stejné zkusíš napsat objektově (přes class), tak uživateli cpeš i všechny interní informace v hlavičkovém souboru. to mu je 1) na nic  2) každá změna si vyžaduje překlad všech zdrojáků, co na tom headeru závisí (imho horší problém u větších projektů). Takže to je ukrývání informace, ale ne přes nějaká klíčová slova, ale vlastností jazyka-
Název: C, hackování struktury FILE
Přispěvatel: Miloslav Ponkrác 08. 09. 2018, 17:45:38
Já jsem se tedy vrtal ve FILE struktuře. Byla to jedna z prvních věcí, když jsem před 20 lety porpvé sedl k C. Dokonce jsem si napsal další funkce f*(), které v podstatě hackovaly tu strukturu. Například jsem měl funkci, která umožnila kdykoli otevřenému souboru přepínat mezi binárním a textovým režimem. Nebo možnost přehodit soubory mezi dvěma handly typu FILE *.

Podobně jsem se vrtal do čehokoli, co jsem našel v C.

Název: Objektové pojetí C/C++
Přispěvatel: Miloslav Ponkrác 08. 09. 2018, 17:52:11
Citace
C++ moc objektové není a na C se dá postavit mnohem lepší objektový jazyk než C++ - viz Objective C.

Dovolte takovou otázku: Co je to "správné objektové pojetí"?

Já když si můžu vybrat mezi C++ a ObjektiveC - tak si jednoznačně vyberu C++.

Citace
Ale to ještě neznamená, že samotné C je objektové. Ostatně takový Forth, Lisp či Lua také nejsou objektové, ale snadno se v nich dá vybudovat objektová nástavba - ve všech třech případech opět lepší než C++.

Objektové programování je paradigma, ne ten syntaktický cukr co máte v "objektovém jazyce". Objekty můžete používat klidně i ve strojovém kódu.

Nicméně pořád je tu ta otázka, co je to správné objektové pojetí?

Mám dojem, že řada lidí je dokonalými akademiky, teoretiky. A že nejlepší objekty jsou z pohledu těchto lidí ty, co jsou ještě ve snu a neexistují. Dokud to není prakticky zrealizováno - tak je to dokonalé. :-)
Název: Zapouzdření C++: Co dělám špatně?
Přispěvatel: Miloslav Ponkrác 08. 09. 2018, 18:04:05
Citace
Když si to stejné zkusíš napsat objektově (přes class), tak uživateli cpeš i všechny interní informace v hlavičkovém souboru. to mu je 1) na nic  2) každá změna si vyžaduje překlad všech zdrojáků, co na tom headeru závisí (imho horší problém u větších projektů). Takže to je ukrývání informace, ale ne přes nějaká klíčová slova, ale vlastností jazyka

Prosím vás, co dělám špatně, že už 20 let píši v C++, používám třídy, a nemám detaily o interních datech třídy v hlavičkových souborech?

Občas je to také dobré, protože když si třeba děláte přenositelnou knihovnu nad voláními API operačních systémů, tak zrovna nechcete třeba, aby ve Windows bylo v hlavičkovém souboru #include <windows.h>. Takže si třeba uděláte vysokoúrovňovou knihovnu pro práci s thready a třídy mají v interních datech tříd třeba handly na thready, semafory, mutexy a další. A přesto nejsou tyto zapsaní v hlavičkovém souboru a funguje to.

Prosím, zoufale prosím, co dělám špatně, že umím zapouzdřit v C++ data třídy lépe než strýček Bob?

Hlavně byste si měli uvědomit, že pokud něco umí C, tak C++ to umí také. Tvrzení "C umí něco lépe než C++" je dost nesoudné.

Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Radovan. 08. 09. 2018, 18:05:43
A že nejlepší objekty jsou z pohledu těchto lidí ty, co jsou ještě ve snu a neexistují.
GNU Hurd?
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: bck 08. 09. 2018, 18:11:15
už leta připravuji článek o tom, jaký je SQL ( tabulkové databáze) nesmysl, ale ještě jsem se neodvážil to panu Krčmářovi nabídnout, neb se obávam, že by to redakca nevzala z oprávněné obavy z urážlivých komentářů pod článkem a z toho vyplývajícího popotahování s úřady.

V dnešní diskuzi mne svými výroky překvapil pan Ponkrác (kterého považuji za nejchytřejšího člověka na zeměkouli - těsně před V. Klausem). Např:

'Tabulkové databáze vznikly mimo jiné proto, že jsou rychlé'

To je ta genialita některých vývojářů, že už dopředu vědí, že jejich výtvor bude rychlý. Já osobně si sice pamatuji, že relační databáze měly jeden veliký nedostatek - oproti tehdejším databázím byly pomalé. Nakonec i dnes je pan Stěhule živ z toho, že obchází firmy a zrychluje ty jejich aplikace. Samozřejmě by pan Stěhule udělal ty aplikace hned zpočátku rychlé - ale on nemůže bý u každého projektu - ledaže by si vzal k ruce pana Jirsáka.

'Důvod organizovat do tabulek je proto, že vám jako aplikaci, která využívá služby databázového stroje není absolutně nic do toho, kde jsou data uložena. Váš to nezajímá.'

Ja si od roku tak 1980 nepamatuji, že by existovala databáze, kde by aplikační prograátor musel vědet, kde jsou data uložena. Kde tohle pan Ponkrác sebral fakt nevím.

Ale musím přiznat, že i naše firma po 30 letech přešla na tabulkovou databázi. Protože ty ostatní vpodstatě vymřely.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Miloslav Ponkrác 08. 09. 2018, 18:38:00
Citace
... ale ještě jsem se neodvážil to panu Krčmářovi nabídnout, neb se obávam, že by to redakca nevzala z oprávněné obavy z urážlivých komentářů pod článkem a z toho vyplývajícího popotahování s úřady. ... V dnešní diskuzi mne svými výroky překvapil pan Ponkrác (kterého považuji za nejchytřejšího člověka na zeměkouli - těsně před V. Klausem). Např:

Pán se nám obává urážlivých komentářů - a sám rozdává ad hominem urážky napravo nalevo. :-) Takové moralisty/pokrytce mám nejraději. :-(

Citace
Ja si od roku tak 1980 nepamatuji, že by existovala databáze, kde by aplikační prograátor musel vědet, kde jsou data uložena. Kde tohle pan Ponkrác sebral fakt nevím.

Kdybyste uměl číst a chápat text v diskusi lépe než se snažit urážet, přečetl byste si na koho reaguji a proč to píši. Neb můj předřečník právě takovouto závislost na datovém úložišti navrhoval.

Obdobně bych mohl reagovat i na poznámku rychlosti. Ale proč bych měl reagovat na někoho, kdo si neuráčil přečíst ani diskusní vlákno?

Já obecně nerad reaguji na negativní oponenty, kteří sice nechápou psaný text, neumějí se orientovat v diskusi. Ale o to ochotněji a raději rozdávají urážky - i když je to úplně mimoňské. A tito pak ještě úzkostlivě zmíní, že se obávají - ó chuďátko naše malé - urážlivých komentářů pod jeho potenciálními články. :-(
Název: Re:Zapouzdření C++: Co dělám špatně?
Přispěvatel: fortranista 08. 09. 2018, 19:07:48
Citace
Když si to stejné zkusíš napsat objektově (přes class), tak uživateli cpeš i všechny interní informace v hlavičkovém souboru. to mu je 1) na nic  2) každá změna si vyžaduje překlad všech zdrojáků, co na tom headeru závisí (imho horší problém u větších projektů). Takže to je ukrývání informace, ale ne přes nějaká klíčová slova, ale vlastností jazyka

Prosím vás, co dělám špatně, že už 20 let píši v C++, používám třídy, a nemám detaily o interních datech třídy v hlavičkových souborech?


Předpokládám, že máte v hlavičkovém souboru public a protected atributy/metody a všechno ostatní v nějaké interní třídě, která je jen deklarována formou ukazatele na ní? Šlo by prosím dát příklad - možná se nebavíme o stejné věci (a nejsem strýček Bob, který to možná taky myslel jinak .-)
Název: Re:Zapouzdření C++: Co dělám špatně?
Přispěvatel: Miloslav Ponkrác 08. 09. 2018, 19:35:03
Citace
Předpokládám, že máte v hlavičkovém souboru public a protected atributy/metody a všechno ostatní v nějaké interní třídě, která je jen deklarována formou ukazatele na ní? Šlo by prosím dát příklad - možná se nebavíme o stejné věci (a nejsem strýček Bob, který to možná taky myslel jinak .-)

1) Je třeba si uvědomit, že C++ umožnuje roztáhnout implementaci třídy do libovolného množství modulů. Což je vynikající věc, která mi strašně chybí v Javě, PHP, C# a mnoha dalších jazycích. Proto je potřeba, aby v hlavičkovém souboru bylo vidět vše.

Představte si jen ti třídu Thread. Část metod třídy je platformově závislá, část metod třídy je platfrmově nezávislá. Ideální na rozdělení implementace třídy do modulů thread_common.cpp, thread_linux.cpp, thread_msw.cpp, thread_qnx.cpp, atd.

2) C++ nepotřebuje znát detaily o datech a strukturách/třídách/atd. pokud k nim přistupuje pouze přes ukazatel. To je stejné i v C.

Pokud chcete mít privátní členy třídy nerozepsané v hlavičkovém souboru, nebo to není praktické - na každé platformě je to jinak, pak máte možnost toto použít.

Kód: [Vybrat]
class Thread
{
 public:
  static Thread* getCurrentThread();

  Thread();
  virtual ~Thread();
  int getPriority();
  void setPriority(int priority);
  void isAlive();
  void start();

 protected:
  virtual void main() = 0;

 private:
  // Skrývání pomocí struktury __ThreadBlock, kterou zná jen implementace.
  // Tento způsob je pro implementaci nejpříjemnější.
  ::internal_thread::__ThreadBlock * _ThreadBlock;

  // Jiná možnost skrývání pomocí bloku paměti, jejíž význam zná jen implementace.
  char _ThreadHandle[1024];
 
  // Nebo nemusíte vůbec deklarovat ani typ interních dat.
  void * _InternalPrivateDataBlock;

  // Atd. atd. atd. - Jste omezeni jen vlastní představivostí.
};
Název: Re:Zapouzdření C++: Co dělám špatně?
Přispěvatel: Kit 08. 09. 2018, 19:47:54
1) Je třeba si uvědomit, že C++ umožnuje roztáhnout implementaci třídy do libovolného množství modulů. Což je vynikající věc, která mi strašně chybí v Javě, PHP, C# a mnoha dalších jazycích. Proto je potřeba, aby v hlavičkovém souboru bylo vidět vše.

Taková čuňárna mi v PHP rozhodně nechybí. Vadí mi i když někdo použije traity.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Pavel Stěhule 08. 09. 2018, 20:11:06
už leta připravuji článek o tom, jaký je SQL ( tabulkové databáze) nesmysl, ale ještě jsem se neodvážil to panu Krčmářovi nabídnout, neb se obávam, že by to redakca nevzala z oprávněné obavy z urážlivých komentářů pod článkem a z toho vyplývajícího popotahování s úřady.

Ten článek bych si rád přečetl - klidně mi jej můžete poslat privátně, jestli máte obavy o redakci roota. Mail na mne se válí na netu - nebo někde u piva můžeme podiskutovat a výhodách a nevýhodách RDBMS.

Je to technologie jako každá jiná, i když je hodně šikovně vymyšlená, tak to není stříbrná kulka, a jako u všeho, záleží jestli ji používá někdo, kdo je v obraze nebo není. Než jsem se dostal k vývoji Postgresu, a chca nechca přičichl k databázím víc a zevnitř, tak jsem databáze voral jako všichni ostatní. Nicméně, když člověk pochopí základy a souvislosti, tak pak to všechno začne dostávat smysl.

24.9. bude Postgres meetup - u piva můžeme dát řeč.
Název: Re:Zapouzdření C++: Co dělám špatně?
Přispěvatel: fortranista 08. 09. 2018, 20:13:39
Citace
Předpokládám, že máte v hlavičkovém souboru public a protected atributy/metody a všechno ostatní v nějaké interní třídě, která je jen deklarována formou ukazatele na ní?

2) C++ nepotřebuje znát detaily o datech a strukturách/třídách/atd. pokud k nim přistupuje pouze přes ukazatel. To je stejné i v C.

Pokud chcete mít privátní členy třídy nerozepsané v hlavičkovém souboru, nebo to není praktické - na každé platformě je to jinak, pak máte možnost toto použít.

Kód: [Vybrat]
class Thread
{
 public:
  static Thread* getCurrentThread();

  Thread();
  virtual ~Thread();
  int getPriority();
  void setPriority(int priority);
  void isAlive();
  void start();

 protected:
  virtual void main() = 0;

 private:
  // Skrývání pomocí struktury __ThreadBlock, kterou zná jen implementace.
  // Tento způsob je pro implementaci nejpříjemnější.
  ::internal_thread::__ThreadBlock * _ThreadBlock;


jj takto jsem to myslel, dík
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Miloslav Ponkrác 08. 09. 2018, 20:29:02
Citace
už leta připravuji článek o tom, jaký je SQL ( tabulkové databáze) nesmysl, ale ještě jsem se neodvážil to panu Krčmářovi nabídnout, neb se obávam, že by to redakca nevzala z oprávněné obavy z urážlivých komentářů pod článkem a z toho vyplývajícího popotahování s úřady.

Púvodní tazatel se ptal na téma, jestli jsou SQL databáze nesmysl, a jestli zahynou. O tom se tu povětšinou diskutovalo (kromě off topic témat jako C++ a PHP).

Od bck jsme se dozvěděli, že SQL dbms jsou nesmysl. Argumenty nepřinesl naprosto žádné, psal jen proto, aby mohl začít někoho urážet. Aby vydal svůj článek/argumenty potřebuje, aby mu nikdo neoponoval. To bude zcela určitě "sofistikovaně" a "precizně" "vyargumentovaný" článek o tom, proč je SQL nesmysl.

Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: BoneFlute 08. 09. 2018, 20:43:38
To je ta genialita některých vývojářů, že už dopředu vědí, že jejich výtvor bude rychlý. Já osobně si sice pamatuji, že relační databáze měly jeden veliký nedostatek - oproti tehdejším databázím byly pomalé. Nakonec i dnes je pan Stěhule živ z toho, že obchází firmy a zrychluje ty jejich aplikace. Samozřejmě by pan Stěhule udělal ty aplikace hned zpočátku rychlé - ale on nemůže bý u každého projektu - ledaže by si vzal k ruce pana Jirsáka.
Tak Pavla Stěhule bych se zastal, ten tomu aspoň rozumí a dá se s ním bavit.

Ten článek bych si rád přečetl - klidně mi jej můžete poslat privátně, jestli máte obavy o redakci roota. Mail na mne se válí na netu - nebo někde u piva můžeme podiskutovat a výhodách a nevýhodách RDBMS.
Nebyl by si sám.

24.9. bude Postgres meetup - u piva můžeme dát řeč.
Kde? Dáš link prosím?
Název: Re:Zapouzdření C++: Co dělám špatně?
Přispěvatel: Miloslav Ponkrác 08. 09. 2018, 20:48:13
Citace
Taková čuňárna mi v PHP rozhodně nechybí. Vadí mi i když někdo použije traity.

Na tom, jak správně vypadá OOP a objekty. Na tom, co je a není prasárna - se neshodne nikdo s nikým. Každý si ty správné objekty představuje úplně jinak. Je to o chuti toho kterého programátora.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Pavel Stěhule 08. 09. 2018, 21:10:05
Kde? Dáš link prosím?
https://www.meetup.com/Prague-PostgreSQL-Meetup/
Název: Re:Objektové pojetí C/C++
Přispěvatel: Kiwi 08. 09. 2018, 21:32:00
Citace
C++ moc objektové není a na C se dá postavit mnohem lepší objektový jazyk než C++ - viz Objective C.
Dovolte takovou otázku: Co je to "správné objektové pojetí"?
No přece to smalltalkovské. :) Ostatně to byl A. Kay, kdo s termínem "objektově orientované programování" přišel, a jak sám říká, "C++ jsem tím opravdu nemyslel". No a u mě to souviselo s tím, že když jsem se v 90. letech seznamoval s "novinkou", jakou bylo OOP - konkrétně na C++, pořád mi nebylo zřejmé, k čemu to je celé vlastně dobré. Spíš mi připadalo, že je to celé jen zbytečná znepřehledňující komplikace. Ten wow-efekt se dostavil, až když mi bylo doporučeno mrknout se na Smalltalk - jednoduché, až primitivní, a přitom tak neuvěřitelně mocné. Většina C++ programů, které se mi dostaly pod ruce, byly ale opravdu jen funkce naházené do tříd.

Za mě OOP = dynamické typování + velmi pozdní vazba + zprávy. Takový Oberon není ani objektový jazyk ani objektový systém, ale přesto když se C++kař koukne na jeho zdrojáky, tak by si klidně mohl myslet, že objektový je. Ale přitom je to "jen" ukázka čistého strukturovaně-modulárního návrhu..
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Xxxxxx 08. 09. 2018, 22:45:45
Nezvladli pointery v c, vymysleli picovinu jako jsou reference.
pak vymysleli smart nebo smrt pointery, hnus, left a right reference,  to je jen
unik chytrych hlav od postaty problemu, ze staci na vsecko pointer.
ja jsem pointer vytvoril, ja ho musim smazat. Totez plati v listu, ve stromu.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Někdo 08. 09. 2018, 23:44:09
Nezvladli pointery v c, vymysleli picovinu jako jsou reference.
pak vymysleli smart nebo smrt pointery, hnus, left a right reference,  to je jen
unik chytrych hlav od postaty problemu, ze staci na vsecko pointer.
ja jsem pointer vytvoril, ja ho musim smazat. Totez plati v listu, ve stromu.

A pak přišla Java kde nebezpečné pointery úplně zmizely (ne jako v C++ kde si u velkého projektu nemůžete být jistý kdo kde použije paměť nebezpečným způsobem) což umožnilo zavést garbage collector a to je konečně bezpečné, rychlé a pohodlné programování.
Název: Re:Zapouzdření C++: Co dělám špatně?
Přispěvatel: Franta <xkucf03/> 09. 09. 2018, 11:05:31
Citace
Když si to stejné zkusíš napsat objektově (přes class), tak uživateli cpeš i všechny interní informace v hlavičkovém souboru. to mu je 1) na nic  2) každá změna si vyžaduje překlad všech zdrojáků, co na tom headeru závisí (imho horší problém u větších projektů). Takže to je ukrývání informace, ale ne přes nějaká klíčová slova, ale vlastností jazyka
Prosím vás, co dělám špatně, že už 20 let píši v C++, používám třídy, a nemám detaily o interních datech třídy v hlavičkových souborech?

Zrovna tohle je v C++ špatně navržené. Ano, jde to obejít ("pimpl" idiom nebo čistě abstraktní/virtuální třídy + vytváření instancí přes tovární metodu místo přes konstruktor). 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.

Chápu, že za tím jsou zase nějaké implementační důvody jako u všeho "divného" v C++, ale z hlediska programátora se to prostě blbě používá -- resp. nakonec se to nějak dá, ale pracuje se s tím hůř než třeba v té Javě (i když nepopírám, že C++ má oproti ní zase jiné výhody).
Název: Re:Zapouzdření C++: Co dělám špatně?
Přispěvatel: Linus 09. 09. 2018, 15:03:43

Kód: [Vybrat]
class Thread
{
 public:
  static Thread* getCurrentThread();

  Thread();
  virtual ~Thread();
  int getPriority();
  void setPriority(int priority);
  void isAlive();
  void start();

 protected:
  virtual void main() = 0;

 private:
  // Skrývání pomocí struktury __ThreadBlock, kterou zná jen implementace.
  // Tento způsob je pro implementaci nejpříjemnější.
  ::internal_thread::__ThreadBlock * _ThreadBlock;

  // Jiná možnost skrývání pomocí bloku paměti, jejíž význam zná jen implementace.
  char _ThreadHandle[1024];
 
  // Nebo nemusíte vůbec deklarovat ani typ interních dat.
  void * _InternalPrivateDataBlock;

  // Atd. atd. atd. - Jste omezeni jen vlastní představivostí.
};

A kde je to skrytí? Že se všechny interní atributy a funkce spojí do jediného NEskrytého prvku a všechno ostatní ve třídě se zkomplikuje? Tento trik je tady od začátku C++ a samozřejmě to moc neskrývá, prostě jen trik na obejití "céčkoidní" vlastnosti C++.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: bck 09. 09. 2018, 21:26:10
Tak Pavla Stěhule bych se zastal, ten tomu aspoň rozumí a dá se s ním bavit.

souhlas, jestli má výpověď měla vyvolat opačný pocit, tak se omlouvám.
Ten článek bych si rád přečetl - klidně mi jej můžete poslat privátně, jestli máte obavy o redakci roota. Mail na mne se válí na netu - nebo někde u piva můžeme podiskutovat a výhodách a nevýhodách RDBMS.
.....
Nebyl by si sám.

Otázkou je, zda má takový článek ovšem dnes smysl. Většina lidí ani dnes neví, že existovalo i něco jiného než relační databáze a dnes neexistuje nějaká jiná možnost. Nepočítám do toho ty módní NoSQL výkřiky, které trpí už tím, že neexistuje jednotný dotazovací jazyk.

S Pavlem a dalšími bych se jistě dohodl na tom (a Pavel to zde již kolikraát uvedl), že existují případy, kdy je nasazení RDBMS nevhodné, jenom bych si tipnul, že já bych to viděl asi u 80 % případů v IT a Pavel tak u 20 %. Ale i kdybychom se dohodli na těch mých procentech, co to změní? - nasadit se stejně musí nějaká RDBMS. Nakonec jak jsem psal, my to děláme teď také (dříve jsme nasazovali síťovou databázi).

Další problém je v tom, že většina lidí má pouze zkušenosti s úlohami projektového charakteru. Jen málokdo kdy dělal produkty, které  používají databáze.  Teď nemám na mysli ale ORM-Frameworks. T.zn., diskutující nebo čtenáři zpočátku vůbec nemohou rozumnět, o čem autor mluvi.

Ale jestli se k tomu někdy doberu něco sepsat, tak samozřejmě využiji Pavlovy nabídky mu to poslat, aby mi sdělil co si o tom myslí. 
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: lt 09. 09. 2018, 21:57:08
Souhlasite, ze rychlost/pomalost rotacnich disku je jediny duvod proc takove databaze existuji?
Zakladny omyl je, ze SSD su rychle. Nie su, SSDka su brutalne pomale, ak sa vezme v uvahu rychlost, akou dnes operuje pamat a to, akym sposobom SSD funguju, hlavne pri zapise.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Krysa11 09. 09. 2018, 23:49:22
NoSQL nebo NOSQL : někde to znamená "nejen SQL" někde to jde zase proti principu SQL, takže "ne-SQL" už v tom je rozpor. Většina těch nových databází, se kterými jsem se prakticky setkal (Mongo, Neo4j) SQL dotazování nemá vůbec. Vytváří vlastně nový jazyk pro dotazování. Podobně jako například QueryDSL. Mongo je vlastně javascript. Je to každý pes jiná ves. Ono vytvořit obecný objektově dotazový jazyk jaksi nejde, protože "objekt" je ideální pojem, který každý jednotlivý programátor, tým, projekt, implementuje jinak s ohledem na svoje potřeby a specifický pohled na konkrétní problematiku.

Ten nový dotazovací jazyk je tedy podřízen nejen konkrétnímu programovacímu jazyku, ale mnoha dalším věcem, často s návazností na nutnost mnoho funkcí implementovat na úrovni programové logiky. NoSQL databáze mají vždy velmi specifické užití - zatímco tabulka je real-world fenomén, který pochopí mnohem širší populace neprogramátorů, tak pod slovem graf si většina lidí představí klikatou čáru (která je na pravé straně víc nahoře než na levé) a světe div se, neabsolvovali ani první semestr diskrétní matematiky. Pod slovem dokument si většina lidí představí word. Tabulku jim vysvětlíte, mj. protože ten excel to vystijuje celkem dobře. Spousta neprogramátorů je ráda, že má data uložené ve formátu, který jsou schopni alespoň částečně pochopit. A pak jim tam uděláte ranec ManyToMany, ale i na to jim můžete udělat views, atd.
SQL RDMS jsou přesně na tohle dělané, i když manažeři se většinou SQL navzdory očekávání většinou nenaučili. Navíc jsou zavedené, optimalizované a neskutečně vymakané.
Začínajícímu programátorovi bych určitě poradil založit svoje snažení na SQL RDMS + ORM + Jazyk vlastního výběru (Java); to otevře cestu do světa.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: SB 10. 09. 2018, 13:57:05
...Vseobecne radsej pouzivam relacne (tabulkove) DB, MySQL... Pripadaju mi "najuniverzalnejsie". Hlavne na projektoch, kde sa struktura dat meni s pridavanim funkcnosti do aplikacie...

Vzhledem k tomu, že RDB jsou schématové, jdou změny v struktuře dat přesně proti podstatě RDB.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: SB 10. 09. 2018, 14:04:23
On v tom videu vlastne rika, ze SSD je takova persistentni RAM. Nicmene.. Pokud mam tolik pameti, ze v ni vsechno udrzim, existuje duvod proc to organizovat do tabulek?

DB vám může zajistit např. persistenci či transakce (ty ale stejně budete muset zohlednit v práci s daty), ale na to nepotřebujete zrovna RDB. Samotné uspořádání do tabulek je pak nadbytečné, protože musíte zbytečně překládat data.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: SB 10. 09. 2018, 14:22:49
Citace
On v tom videu vlastne rika, ze SSD je takova persistentni RAM. Nicmene.. Pokud mam tolik pameti, ze v ni vsechno udrzim, existuje duvod proc to organizovat do tabulek?

Ano. Protože data mají logiku, mají určenou doménovou a referenční integritu. Mají zaručenou konzistenci dat a konzistenci operací. Máte zajištěno mnohem více.

Jaký existuje důvod organizovat data do grafů nebo objektových sítí? Jak vytvoříte nad těmito strukturami rychlé datové operace? Jaké bude API? Jak zajistíte konzistenci dat a vazeb mezi daty? Jak budete zajišťovat transakce? Jak budete vytvířet jazyk pro hledání dat pro obrovská data?

Jak říkám, nikdo nikomu nebrání, aby udělal databázi na grafových či objektových strukturách. A dotáhl to tak daleko, aby převálcoval relační databáze. Ale ony tu jsou omezující i fyzikální zákony, není to jen o tom, že dokážete co chcete.

***

Důvod organizovat do tabulek je proto, že vám jako aplikaci, která využívá služby databázového stroje není absolutně nic do toho, kde jsou data uložena. Váš to nezajímá. Jestli data jsou uložena na HDD, SDD, RAM, nebo na děrných štítcích, nebo na nové hyperpaměti 22. století - o to se nestaráte. Vy jen požadujete po databázovém stroji vrácení dat či operaci s daty. Tečka. Databázový stroj je abstrakce, kterou neřešíte. Administrátor databázového stroje pak vyřeší implementační detaily.

Ale hovno, data musejí řešit logiku, integritu i konzistenci v doméně v aplikaci, to, že si je zaděláte navíc v RDB, neznamená, že se na ně můžete jinde vyfláknout.

Jednoduchost a rychlost procházení grafy.
Např. hashováním, stromy, ... - obdobně jako v oné DB.
API k vnějším systémům? Jaké si ho navrhnete, každopádně NEZÁVISLOU na způsobu uložení!!!
Pravidly a odkazy.
Držením historie dat (kterou stejně budete v obchodních aplikacích potřebovat).
Nebudete, stačí vám programovací jazyk, ve kterém pracujete.

S fyzikálními zákony to nemá co do činění, jde o výhodnost uspořádání dat.

Mícháte do sebe abstrakce na různých úrovních. Samozřejmě, že je vám u pr-dele, jak si DB ukládá data, ale už vám není u prde-le, zda vám z DB vypadne relace, dokument, blob, či něco jiného, to je KURVA rozdíl a jiný způsob práce!
Název: Re:RAM, SSD - jsou také tabulkové databáze
Přispěvatel: SB 10. 09. 2018, 14:30:08
Hele, proč ta RAM nebo SSD nemají tedy úložné místo organizováno do grafů či objektů, když je to tak lepší? Proč i ta RAM a SSD jedou v alokačních blocích? Není to nápověda, proč je univerzálnější a nejpoužitelnější organizovat data a datové úložiště do tabulek?

Nejenže nejsou organizovány do grafů, ale dokonce obsahují pouze primitivní, lineární, binární paměťové jednotky!!! :O (To je překvapení!) Veškerá abstrakce nad nimi (formáty a uspořádání dat) je umístěna a řešena v paměti počítače. Ne že by to nešlo strčit do disků, ale je to jednodušší.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: JS 10. 09. 2018, 14:30:56
Ale třeba evidovat finanční transakce ve stromové struktuře mi moc smysl nedává.

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

Ma to vyhodu - je to brutalne rychle a efektivni. Ale hlavni nevyhoda je, ze si musite vytvorit vlastni funkci (program), ktera ty zaznamy prochazi (treba IMS databaze rozlisuje jestli chcete zaznamy take sekvencne prochazet nebo najit vzdy jen jeden konkretni atd.). A pokud chcete hledat podle jinych klicu - vesmes to znamena zmenit databazi a programy, co delaji ty dotazy.

Eventualne z toho vznikl relacni model a SQL, ktery prinasi mnohem vyssi flexibilitu (na poradi klicu ani zpusobu dotazu nezalezi) za cenu ztraty vykonu (optimalizator musi umet zpracovat libovolny dotaz, databaze neni nutne optimalizovana na konkretni dotazy).

Jinak k dotazu - myslim, ze vyvoj pujde dal podobnym smerem. SQL zahrne specialni pozadavky jako limitni pripad a rozsiri tim svoji flexibilitu. Coz se ostatne v pripade tech nerelacnich databazi uz dost deje.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: SB 10. 09. 2018, 14:52:40
...Relacni DB byly, jsou a budou. Jsou pomerne lehke na pochopeni, SQL jazyk taky...

A vůbec ne. Rozklad entit a jejich společných podentit do vzájemně oddělených (a ještě k tomu typizovaných) tabulek je nepřirozený, jejich následné opětovné spojování nadbytečné.

...a kdyz se spravna cast business logiky resi uz rovnou v DB (stored procedures, olap atd.)...

To ale nijak nesouvisí s typem DB.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: SB 10. 09. 2018, 15:07:20
Proč by relační tabulkové databáze měly zahynout?

Není třeba, aby zahynuly, ale aby se necpaly všude. RDB nejsou univerzálním nástrojem!

Jednak získat z relačních databází strom, graf, apod. je často spíše otázkou indexování a pak vhodného SQL dotazu.

Když chci strom/graf, tak si k tabulce X přidám druhou tabulku X_tree_index nebo X_graph_index, kde pomocí triggerů nebo ručně indexuji pár čísel, abych mohl jediným SQL dotazem načíst celou větev stromu či jiné časté operace. Mám už to jako takový "návrhový relační vzor".

Dobře jste si teď nasral do bot. Víte, jak se ukládá a čte strom v dokumentové DB?
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: bck 10. 09. 2018, 15:12:07

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

... A pokud chcete hledat podle jinych klicu - vesmes to znamena zmenit databazi a programy, co delaji ty dotazy.

já jsem myslel, že IMS podporuje sekundární indexy?

Jinak k dotazu - myslim, ze vyvoj pujde dal podobnym smerem. SQL zahrne specialni pozadavky jako limitni pripad a rozsiri tim svoji flexibilitu. Coz se ostatne v pripade tech nerelacnich databazi uz dost deje.

to podle mne záleží na tom, jak se rozšíří 'průmysl 4.0'. Jestli to půjde tak, jak si to představují jeho protagonisté, tak pak v takovem prostředí hraí RDBMS minimální roli
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Pavel Stěhule 10. 09. 2018, 15:29:23

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?
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: SB 10. 09. 2018, 15:35:44
A pak přišla Java kde nebezpečné pointery úplně zmizely (ne jako v C++ kde si u velkého projektu nemůžete být jistý kdo kde použije paměť nebezpečným způsobem) což umožnilo zavést garbage collector a to je konečně bezpečné, rychlé a pohodlné programování.

Jen bych upozornil, že Java vznikla v nějakém 95. (nemluvě o kvalitě). Např. Smalltalk jako jazyk bez pointerů vyšel v roce 1980, což je ještě PŘED vznikem bastardu C++, takže představa, že OOL potřebuje pro programovou manipulaci s objekty pointery, byla tou dobou již překonaná!
Název: Re:Zapouzdření C++: Co dělám špatně?
Přispěvatel: SB 10. 09. 2018, 15:38:44
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...
Název: Re:Zapouzdření C++: Co dělám špatně?
Přispěvatel: MarSik 10. 09. 2018, 16:02:09
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...

Ono to má technický důvod. Ty struktury mají fixní velikost, takže se rozjedou pointer offsety pro přístup k atributům. Pokud to ABI musí být stabilní, je potřeba to rozdělit na stabilní "proxy" interface a privátní data s negarantovanou strukturou.
Název: Re:Zapouzdření C++: Co dělám špatně?
Přispěvatel: JSH 10. 09. 2018, 16:46:00
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...
No tak kdyby C++ zavedlo stejná omezení jako má Java, tak by ta binární kompatibilita šla jednoduše. Objekty alokované po jednom na haldě, takže volající nemusí znát jejich velikost. Všechny metody virtuální, takže žádné inlinování. Akorát ta cena za to je docela drsná.
V situacích, kdy se c++ obvykle používá, má občas neakceptovatelnou cenu i samotný objektový návrh.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: JardaMira 10. 09. 2018, 18:52:05
Tak se chci zeptat:
Maji tabulkove databaze na novych projektech smysl?
Migroval nekdo z vas existujici reseni z oraclu nebo jine tabulkove databaze na neco jineho?
Souhlasite, ze rychlost/pomalost rotacnich disku je jediny duvod proc takove databaze existuji?
Diky za nazory

Protoze jsem tu videl jen skepticke reakce a pak offtopic diskuzi, zkusim neco jineho:

Radu let jsem pouzival pro male projekty MySQL. Funkcni, hezke nastroje k organizaci, interface do ruznych jazyku. Co pul roku mam zvyk se jen tak podivat na neco noveho. Tehdy to bylo MongoDB. Slozita neintuitivni instalace a zprovoznovani (2016), ale nakonec zafungovalo. Napsal jsem si skript na zapis/cteni. A nedavno jsem (hard) preinstaloval na Ubu1804 a mel zasadni problem s prevodem dat.

Vysledne dojmy?  : Uz bych nemenil.

Takze tak. Minusy? Nenasel jsem zadnej skvelej program na udrzbu (jako mysql-workbench apod). Ale nechybi mi, na vsechno mam jeden skript.
Název: Re:Zapouzdření C++: Co dělám špatně?
Přispěvatel: Franta <xkucf03/> 10. 09. 2018, 19:03:49
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...

Ono to má technický důvod. Ty struktury mají fixní velikost, takže se rozjedou pointer offsety pro přístup k atributům. Pokud to ABI musí být stabilní, je potřeba to rozdělit na stabilní "proxy" interface a privátní data s negarantovanou strukturou.

Jenže jak to udělat, abych mohl rozhraní rozšiřovat a nerozbil při tom binární kompatibilitu? I když mám čistě abstraktní/virtuální třídu, tak do ní nemohu jen tak přidat metodu.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Pavel Stěhule 10. 09. 2018, 19:11:46
Tak se chci zeptat:
Maji tabulkove databaze na novych projektech smysl?
Migroval nekdo z vas existujici reseni z oraclu nebo jine tabulkove databaze na neco jineho?
Souhlasite, ze rychlost/pomalost rotacnich disku je jediny duvod proc takove databaze existuji?
Diky za nazory

Protoze jsem tu videl jen skepticke reakce a pak offtopic diskuzi, zkusim neco jineho:

Radu let jsem pouzival pro male projekty MySQL. Funkcni, hezke nastroje k organizaci, interface do ruznych jazyku. Co pul roku mam zvyk se jen tak podivat na neco noveho. Tehdy to bylo MongoDB. Slozita neintuitivni instalace a zprovoznovani (2016), ale nakonec zafungovalo. Napsal jsem si skript na zapis/cteni. A nedavno jsem (hard) preinstaloval na Ubu1804 a mel zasadni problem s prevodem dat.

Vysledne dojmy?  : Uz bych nemenil.
  • Zalozeni nove tabulky (tady collection) nevyzaduje zadnou specialni akci
  • V pythonu je pymongo: ovladani se neda s mysql srovnavat, vsechno je jako DICT 
  •   Pouzivam 100x intenzivneji nez kdysi mysql, takze mam kolem milionu zaznamu, zapisuji kazdych 10 sec. a nevidim latenci 
  •   Menim tabulku za behu, proste zacnu pridavat dalsi parametr. 
  •   Mam dost ridkou tabulku, vetsina parametru je Nan, navazujici pymongo a pyplot jsou v pohode. 
  •   Clovek muze nechat bezet stejne MongoDB na vice strojich najednou, cimz ma duplicitu a pojisteni proti vypadku (ale nezkousel jsem) 
  •   ... a nakonec - MongoDB neni ta nejrychlejsi a nejlepsi NoSQL databaze na trhu.....   

Takze tak. Minusy? Nenasel jsem zadnej skvelej program na udrzbu (jako mysql-workbench apod). Ale nechybi mi, na vsechno mam jeden skript.

1M zaznamů máte celkem nebo za těch 10 sec?
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: JSH 10. 09. 2018, 19:19:22
Tak se chci zeptat:
Maji tabulkove databaze na novych projektech smysl?
Migroval nekdo z vas existujici reseni z oraclu nebo jine tabulkove databaze na neco jineho?
Souhlasite, ze rychlost/pomalost rotacnich disku je jediny duvod proc takove databaze existuji?
Diky za nazory

Protoze jsem tu videl jen skepticke reakce a pak offtopic diskuzi, zkusim neco jineho:

Radu let jsem pouzival pro male projekty MySQL. Funkcni, hezke nastroje k organizaci, interface do ruznych jazyku. Co pul roku mam zvyk se jen tak podivat na neco noveho. Tehdy to bylo MongoDB. Slozita neintuitivni instalace a zprovoznovani (2016), ale nakonec zafungovalo. Napsal jsem si skript na zapis/cteni. A nedavno jsem (hard) preinstaloval na Ubu1804 a mel zasadni problem s prevodem dat.

Vysledne dojmy?  : Uz bych nemenil.
  • Zalozeni nove tabulky (tady collection) nevyzaduje zadnou specialni akci
  • V pythonu je pymongo: ovladani se neda s mysql srovnavat, vsechno je jako DICT 
  •   Pouzivam 100x intenzivneji nez kdysi mysql, takze mam kolem milionu zaznamu, zapisuji kazdych 10 sec. a nevidim latenci 
  •   Menim tabulku za behu, proste zacnu pridavat dalsi parametr. 
  •   Mam dost ridkou tabulku, vetsina parametru je Nan, navazujici pymongo a pyplot jsou v pohode. 
  •   Clovek muze nechat bezet stejne MongoDB na vice strojich najednou, cimz ma duplicitu a pojisteni proti vypadku (ale nezkousel jsem) 
  •   ... a nakonec - MongoDB neni ta nejrychlejsi a nejlepsi NoSQL databaze na trhu.....   

Takze tak. Minusy? Nenasel jsem zadnej skvelej program na udrzbu (jako mysql-workbench apod). Ale nechybi mi, na vsechno mam jeden skript.
Přiznám se, že nevím co si z tohohle příspěvku odnést. Jak se ta databáze vůbec používá? Jestli na veškerou údržbu stačí jeden script tak to IMO nezní moc komplikovaně.
- O MySQL se běžně povídá, že je to spíš parodie na databázi. Rozhodně to není dobrý reprezentant toho, co SQL databáze umí.
- Jeden zápis za 10s (zápis čeho?) nemusí znamenat nic. 10 milionů záznamů taky nemusí být nic (pokud jsem to pochopil jako 10M záznamů celkem).
- A ty zásadní problémy s převodem dat zní jako hodně velké minus.
Název: Re:Zapouzdření C++: Co dělám špatně?
Přispěvatel: JSH 10. 09. 2018, 19:30:06
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...

Ono to má technický důvod. Ty struktury mají fixní velikost, takže se rozjedou pointer offsety pro přístup k atributům. Pokud to ABI musí být stabilní, je potřeba to rozdělit na stabilní "proxy" interface a privátní data s negarantovanou strukturou.

Jenže jak to udělat, abych mohl rozhraní rozšiřovat a nerozbil při tom binární kompatibilitu? I když mám čistě abstraktní/virtuální třídu, tak do ní nemohu jen tak přidat metodu.
Do třídy se dají na konec přidávat další metody bez rozbití kompatibility. Nevím, jestli je to teoreticky OK, ale prakticky to funguje. Samozřejmě, že to rozhodí metody přidané v odvozených třídách.
Nebo je taky možné jít cestou, jakou používá Microsoft v D3D - Interfacy verzovat a staré verze držet v původní podobě.
Pro účely zpětné kompatibility se taky zavedly inline namespace. Překladač vidí všechny namespacy s číslem verze, takže manglované názvy jsou pořád stejné. Pokud se zvedne verze, tak se vytvoří nový namespace s vyšším číslem verze a ty předchozí se nechají být. A v headeru se do neverzovaného namespace nainlinuje ten s nejvyšší verzí, takže při překladu se automaticky používá nejnovější verze.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Kit 10. 09. 2018, 19:39:50
Pokud někdo používá SQL + ORM, tak to k NoSQL přímo vybízí, protože ORM neskutečně degradují relační databáze. Zapomeňte na ORM. Pokud neumíte přemýšlet relačně, jděte do NoSQL.
Název: Re:Zapouzdření C++: Co dělám špatně?
Přispěvatel: BoneFlute 10. 09. 2018, 20:18:59
Pro účely zpětné kompatibility se taky zavedly inline namespace. Překladač vidí všechny namespacy s číslem verze, takže manglované názvy jsou pořád stejné. Pokud se zvedne verze, tak se vytvoří nový namespace s vyšším číslem verze a ty předchozí se nechají být. A v headeru se do neverzovaného namespace nainlinuje ten s nejvyšší verzí, takže při překladu se automaticky používá nejnovější verze.

Tohle mě zajímá. To jsi v reálu někde viděl? Kde?
Název: Re:Zapouzdření C++: Co dělám špatně?
Přispěvatel: MartinBeran 10. 09. 2018, 21:11:55
Pro účely zpětné kompatibility se taky zavedly inline namespace. Překladač vidí všechny namespacy s číslem verze, takže manglované názvy jsou pořád stejné. Pokud se zvedne verze, tak se vytvoří nový namespace s vyšším číslem verze a ty předchozí se nechají být. A v headeru se do neverzovaného namespace nainlinuje ten s nejvyšší verzí, takže při překladu se automaticky používá nejnovější verze.

Tohle mě zajímá. To jsi v reálu někde viděl? Kde?

Tohle používá např. standardní knihovna libc++. Místo
Kód: [Vybrat]
namespace std { ... } tam je
Kód: [Vybrat]
namespace std { inline namespace __1 { ... } } Celé je to ještě zabalené v makrech, jméno inline namespace __1 pochází z makra _LIBCPP_ABI_VERSION.
Název: Re:Zapouzdření C++: Co dělám špatně?
Přispěvatel: Franta <xkucf03/> 10. 09. 2018, 21:28:05
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...

Ono to má technický důvod. Ty struktury mají fixní velikost, takže se rozjedou pointer offsety pro přístup k atributům. Pokud to ABI musí být stabilní, je potřeba to rozdělit na stabilní "proxy" interface a privátní data s negarantovanou strukturou.

Jenže jak to udělat, abych mohl rozhraní rozšiřovat a nerozbil při tom binární kompatibilitu? I když mám čistě abstraktní/virtuální třídu, tak do ní nemohu jen tak přidat metodu.
Do třídy se dají na konec přidávat další metody bez rozbití kompatibility. Nevím, jestli je to teoreticky OK, ale prakticky to funguje. Samozřejmě, že to rozhodí metody přidané v odvozených třídách.

Tohle jsem si zkoušel -- při přidání metody mezi ostatní se to rozbije (původní kód volá jinou metodu -- a pokud mají stejnou signaturu, tak to nespadne, ale dělá to něco jiného, než by mělo), zatímco když novou metodu přidám nakonec, tak se nic nerozbije. Ale pak jsem četl, že toto chování není zaručené a nelze se na něj spoléhat.

Interfacy verzovat a staré verze držet v původní podobě.
Pro účely zpětné kompatibility se taky zavedly inline namespace. Překladač vidí všechny namespacy s číslem verze, takže manglované názvy jsou pořád stejné. Pokud se zvedne verze, tak se vytvoří nový namespace s vyšším číslem verze a ty předchozí se nechají být. A v headeru se do neverzovaného namespace nainlinuje ten s nejvyšší verzí, takže při překladu se automaticky používá nejnovější verze.

To číslování tříd rozhraní se používá i jinde, i v Javě (setkal jsem se s tím např. v jednom Apachím projektu). Je to takovém ultimátní řešení, ale ne úplně elegantní. Řeší to i zdrojákovou kompatibilitu API. Na úrovni ABI kompatibility mi ale přijde škoda, když se s tím jazyk/platforma nedokáže vyrovnat a neumožňuje prosté přidávání metod, aniž by se rozbilo volání těch původních.


Abych dal konkrétní příklad: máme rozhraní, které bude implementovat někdo cizí a my ho budeme volat (tzn. SPI). V tomto rozhraní je metoda, které předáváme nějaká data. Protože těch parametrů je víc, předáváme je ve formě objektu/struktury. V budoucnu můžou přibýt nová doplňková data, které implementátor rozhraní může ale nemusí využít (číst je). V dalších verzích mu tam dáme prostě něco navíc, co by se mu mohlo hodit. Přirozenou cestou by bylo přidat do této třídy/struktury nové členy či get metody. Tuhle třídu stejně nikdo nedědí (instance vytváříme vždy my a předáváme je tomu SPI), takže nehrozí kolize jmen.



 
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Franta <xkucf03/> 10. 09. 2018, 21:36:59
Pokud někdo používá SQL + ORM, tak to k NoSQL přímo vybízí, protože ORM neskutečně degradují relační databáze. Zapomeňte na ORM. Pokud neumíte přemýšlet relačně, jděte do NoSQL.

Pokud někdo nezvládá ani poměrně jednoduchý a intuitivní koncept jako jsou relační databáze, tak bych ani nechtěl vidět, co spáchá s NoSQL databází a už vůbec bych po něm ten kód a data nechtěl spravovat.

Přijde mi to asi jako radit někomu, kdo nezvládá Javu, aby šel psát v Perlu.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: bck 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)
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: ded.kenedyd 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.

Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: JS 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ázev: Re:Zapouzdření C++: Co dělám špatně?
Přispěvatel: n 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.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Pavel Stěhule 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.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Kamil Podlešák 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 :-)
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: . 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í.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: bck 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?
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Pavel Stěhule 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.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Kamil Podlešák 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í).
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: j 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.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Kamil Podlešák 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é?"
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Pavel Stěhule 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.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: j 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.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Pavel Stěhule 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.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: bck 11. 09. 2018, 22:38:19
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.

To je divné, ty síťové a hierarchicke databáze maji predikovatelne odezvy a to jedine, co se s poctem dat zvysuje je prumerna doba vyhledani prvku v tom stromu a to se ridi podle tech znamych vzorecku s temi logaritmy.

Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Kit 11. 09. 2018, 22:58:25
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.
To je divné, ty síťové a hierarchicke databáze maji predikovatelne odezvy a to jedine, co se s poctem dat zvysuje je prumerna doba vyhledani prvku v tom stromu a to se ridi podle tech znamych vzorecku s temi logaritmy.

Pokud máš v databázi uloženo třeba 1000 záznamů, tak zřejmě do té databáze bylo 1000 dotazů. Pro správně použitou relační databázi je to jen jeden dotaz. Navíc může být tím jedním dotazem provedena celá transakce.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: agent 11. 09. 2018, 23:03:13
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.
Tak nějak naivně předpokládám, že tohle je normální i dneska.
Neřeším a nesnažím se optimalizovat jen reporty, které vrací výsledky v jednotkách sekund. Pokud musím čekat minutu na normální report, je to určitě chyba a problém k řešení.
A pokud jde o nějaké dotazy ve vytíženější části aplikace, kde jich můžou běhat i desítky za sekundu, tak musí být odezva DB v milisekundách (ale to už je o návrhu, ne jen o optimalizaci). 
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: bck 11. 09. 2018, 23:15:50
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é?"

aha, tak teď si myslím, že začínám chápat to nedorozumnění.

Takže, nejde o tu rychlost, jde jen a pouze o tu modularitu. Z hlediska modularity je assembler a C rovnocené řešení, protože mohu s oběma stejně dobře rozdělit problém na menší části. Jestliže ale začnu míchat imperativní jazyky s deklarativním dotazováním  dat, nastane ten známý impedance missmatch a jeho výsledkem je, že mohu modularitu zapomenout.

Kdybych se pokusi dosáhnout modularitu za pomoci RDBMS prostředků (tedy s deklarativním SQL jazykem), tak pak bych do sebemnší funkce zapsal nějaký select-statement. Taková funkce by formálně splňovala ten information hiding princip, prakticky je to ale nepoužitelné. Taková funkce může bý samozřejmě použita jakkoliv - tedy v nějaké smyčce se 100 tisic voláni. A v tu chvíli je to pomalé, nepoužitelné a tím jsme u té rychlosti , která zdánlivě zapříčiní ten problém s tou modularitou - ve skutečnosti je to ta SQL.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Kit 12. 09. 2018, 00:02:43
Kdybych se pokusi dosáhnout modularitu za pomoci RDBMS prostředků (tedy s deklarativním SQL jazykem), tak pak bych do sebemnší funkce zapsal nějaký select-statement. Taková funkce by formálně splňovala ten information hiding princip, prakticky je to ale nepoužitelné. Taková funkce může bý samozřejmě použita jakkoliv - tedy v nějaké smyčce se 100 tisic voláni. A v tu chvíli je to pomalé, nepoužitelné a tím jsme u té rychlosti , která zdánlivě zapříčiní ten problém s tou modularitou - ve skutečnosti je to ta SQL.

Takže pokud v aplikaci chci tu funkci zavolat v cyklu 100000×, tak jsem nepochopil, jak se s relační databází pracuje. Musím zavolat jinou funkci, která provede jen jeden db dotaz na těch 100000 záznamů s případnou agregací.

Bohužel se k té "jiné funkci" mnoho vývojářů nedopracuje. Místo pochopení SQL pak hledají řešení v NoSQL.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: bck 12. 09. 2018, 00:06:31

Tipoval bych, že Vám ani nevadí relační model, jako SQL.

Přesně.

Na stranu druhou - tento hard code přístup měl hodně strmou křivku učení,

to teď nevím co přesně myslíte, ale já jsem se těch 5 funkcí, co čtou a manipulují ta data naučil za 5 minut a od té doby to používám.

ale musel jste počkat 2-3 dny, možná týden, než Vám programátor napsal report.

tak tu dobu jsem už nezažil, za mne už byly ty reporty součástí nějaké aplikace. Ale je pravda, že tak do roku 1975 to tak bylo.


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.

já vím, ze tohle se vykládá a my to nyní také zákazníkům vyprávíme, že mají tu možnost. Ale z vlastní zkušenosti vím, zrovna tak jako někteří diskutující zde, že to není tak horké.

Jasně, dnes jsou ty RDBMS to jediné, s čím je možné k zákazníkovi přijít. Přesto nechápu, jak mohli inženýři dovolit, aby se tak rozmohlo.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Zlatovlaska 12. 09. 2018, 01:19:45
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./quote]

Hnidopich NOTE.

SQL vzniklo v IBM jako nahrada za konkurencni dotazovaci jazyk QUEL od Stonebrakera (autor postgresu). SQL = SeQUEL to QUEL. Ten nakonec ve svych databazich nahradil quel sqlkem ne proto, ze bylo lepsi, ale ze bylo pouzivanejsi. To jen diky tomu, ze za nim stala IBM.

Doporucuju shlidnout nejaky video kde to Stonebraker vysvetluje. Treba jeho turing award speech.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Pavel Stěhule 12. 09. 2018, 05:36:53

aha, tak teď si myslím, že začínám chápat to nedorozumnění.

Takže, nejde o tu rychlost, jde jen a pouze o tu modularitu. Z hlediska modularity je assembler a C rovnocené řešení, protože mohu s oběma stejně dobře rozdělit problém na menší části. Jestliže ale začnu míchat imperativní jazyky s deklarativním dotazováním  dat, nastane ten známý impedance missmatch a jeho výsledkem je, že mohu modularitu zapomenout.

Kdybych se pokusi dosáhnout modularitu za pomoci RDBMS prostředků (tedy s deklarativním SQL jazykem), tak pak bych do sebemnší funkce zapsal nějaký select-statement. Taková funkce by formálně splňovala ten information hiding princip, prakticky je to ale nepoužitelné. Taková funkce může bý samozřejmě použita jakkoliv - tedy v nějaké smyčce se 100 tisic voláni. A v tu chvíli je to pomalé, nepoužitelné a tím jsme u té rychlosti , která zdánlivě zapříčiní ten problém s tou modularitou - ve skutečnosti je to ta SQL.

Jasně, a to je přesně to, co byste neměl v SQL dělat - tam platí, co můžete udělat jednou hromadnou operací, tak byste měl udělat jednou hromadnou operací. Pokud byste chtěl zapouzdřit nějaké dotazy, tak od toho tu jsou pohledy. Modularita v SQL db pro přístup v databázi se nedá udělat na aplikační straně funkcemi.

Porušení tohoto pravidla vede k tomu, že uživatelé mají pocit, že relační db jsou pomalé - už od dob COBOLu - a v každé best practices k SQL db se to dočtete na prvním místě. Tak jak v COBOLu, v IMS budu muset psát jiným stylem (což mi ani nezbyde, protože tam mám jiné vyjadřovací možnosti), tak v SQL se zase píše jiným způsobem než v těchto databázích. To je opravdu diskuze, která se vede od dob COBOLu a pro to, abyste mohl efektivně s SQL pracovat, tak musíte pochopit, že existují hromadné operace, a pohledy. Pokud to pochopíte, tak ok, pokud ne, tak pak vlastně tu databázi používáte tím nejhorším možným způsobem.

A i když ji už používáte tím nejhorším možným způsobem - pokud se použijí prepared statements a máte indexy, tak i při tom ISAM přístupu se dostanete k časům pod 1ms, což si myslím, že na těch starých mašinách jste neměli. Jenomže, pokud čtu 1000 řádků po jednom, tak jsem možná na 100ms, možná na vteřině. Pokud to udělám hromadnou operací, tak jsem na 1-10ms. Samozřejmě záleží jestli ještě do toho mám síťový traffic nebo nemám. Mám zákazníka u kterého reporty trvají minuty, bo jsou napsány funkcionálně - což je to nejhorší, co může být. Když je napíšu čistě, tak trvají několik málo vteřin - protože optimalizátor dostane prostor k optimalizaci. Ale tohle je blbost těch programátorů, kteří ignorovali fakt, že už nedělají v ISAM db, ale v Oracle.

Každá technologie má něco, co musíte respektovat, a pokud to nechcete nebo neumíte, tak to nepoužívejte. Excel je super, ale když ho začnu ohýbat na databázi, tak je to zoufale pomalé. A opačně - multidimenzionální reporting se mi dobře udělá v Excelu a relační databázi je to oser.

Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Pavel Stěhule 12. 09. 2018, 05:45:39

SQL vzniklo v IBM jako nahrada za konkurencni dotazovaci jazyk QUEL od Stonebrakera (autor postgresu). SQL = SeQUEL to QUEL. Ten nakonec ve svych databazich nahradil quel sqlkem ne proto, ze bylo lepsi, ale ze bylo pouzivanejsi. To jen diky tomu, ze za nim stala IBM.

Doporucuju shlidnout nejaky video kde to Stonebraker vysvetluje. Treba jeho turing award speech.

To jste asi úplně nepochopil. SQL a QUEL vznikalo paralelně. Nicméně QUEL vznikal na Berkeley univerzitě a vycházel z matematického zápisu, a SQL bylo cíleno na vojenskou sféru a bezpečnost, a vycházelo z angličtiny. Hned od začátku měl Quel lepší optimalizátor než DB2, Oracle a začátkem 80 let se Ingres masivně používala. Nicméně trh převálcoval Oracle - a už v druhé půli 80let se do Ingresu dopsal překladač z SQL do Quelu.

To, co rozhodlo, byl byznys Oracle - a Oracle vydělal na tom, že za poloviční cenu dodával, to co IBM. Nedokážu posoudit, ale myslím si, že určitou roli hrála i čitelnost pro běžného uživatele - přeci jen je rozdíl mezi zjednodušenou angličtinou a matematickým zápisem.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Pavel Stěhule 12. 09. 2018, 05:50:00
Jasně, dnes jsou ty RDBMS to jediné, s čím je možné k zákazníkovi přijít. Přesto nechápu, jak mohli inženýři dovolit, aby se tak rozmohlo.

Protože, když se to používá správně, tak je to rychlé. Navíc je to variabilnější. Potřebuji cokoliv z db, pokud mám ODBC, ADO, BDE, připojím se z libovolného klienta - Excel, Access, libovolná aplikace a udělám, co potřebuji. Vzpomínám na doby, kdy když jsme chtěli udělat import dat do systému, tak nám dodavatel nabízel speciální moduly za 10K dolarů. S databází, ke které máte alespoň ODBC driver, máte data.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: jirik66 12. 09. 2018, 07:23:17
Není lepší nástroj pro práci se složitě strukturovanými daty velkých objemů než relační databáze :-)
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Radovan. 12. 09. 2018, 07:28:34
Mám zákazníka u kterého reporty trvají minuty, bo jsou napsány funkcionálně - což je to nejhorší, co může být.
Registr vozidel? ;D
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Pavel Stěhule 12. 09. 2018, 07:57:04
Mám zákazníka u kterého reporty trvají minuty, bo jsou napsány funkcionálně - což je to nejhorší, co může být.
Registr vozidel? ;D
Registr vozidel to není :)
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: j 12. 09. 2018, 08:31:49
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.
Tak nějak naivně předpokládám, že tohle je normální i dneska.
...
Je to jedna z veci ktery pravidelne resim ... takze predpoklad je mylny. V nekterych pripadech sem schopnej jen zasahama do struktury dat zrychlit nektery operace o 3 rady. Cemuz nerikam optimalizace, to je prasecina tvurce. On to totiz ten dobytek na strane dodavatele, pokud vubec, tak otestuje na databazi o 10 zaznamech, a ani ve snu ho nenapadne, ze ta databaze tech zaznamu muze mit taky treba desitky milionu.

Znas Svijany? Ten pivovar? Ti si za miliony nechali napsat zadavatko pro vydej piva ... protoze jejich uzasnej ERP system nestihal na HW za miliony vytvaret neco tako primitivniho jako doklady vydeju. Takze oni v prubehu dne vlastne netusili, kolik toho aktualne maji, protoze do stavu skladu se to prenaselo az pres noc.

...tam platí, co můžete udělat jednou hromadnou operací, tak byste měl udělat jednou hromadnou operací. ...
A proto to spousta vsemoznych patlalu nedela. Moh bych ukazat desitky funci v ruznych aplikacich ktery nastavujou nejaky parametr na zaznamech, a delaji to ... po jednom zaznamu. A kdyz to nekdo stopne, tak to pekne po jednom rollbackuji. Takze to trva a trva a trva. Typicky to pak vypada zhruba tak, ze zamestnanci chodi za administratorem na tema "uz zas potrebuju spustit tuhle pitomost" a admin ma napsany nejaky query, ktery udela totez, jen za desetitisicinu casu.

Jeden priklad za vsechny, karta zbozi ma jako jeden z parametru novou cenu s platnosti od. System ma funkci na prepsani tyhle ceny (pokud uz plati) do aktualni ceny produktu. Ta funce je schopna pri desitkach tisic produktu bezet i nekolik hodin. Nacte si totiz vzdy jeden zaznam, ten aktualizuje a tak porad dokola. Update na vse do databaze dobehne v radu nekolika sekund.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: j 12. 09. 2018, 08:34:02
Edit: Jeste jsem zapomel podoknouti, ze ona funkce na ceny si zamkne vsechny karty zbozi, takze se tech par hodin neda v dotycne aplikaci vlastne vubec nic delat.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Pavel Stěhule 12. 09. 2018, 08:59:21
A proto to spousta vsemoznych patlalu nedela. Moh bych ukazat desitky funci v ruznych aplikacich ktery nastavujou nejaky parametr na zaznamech, a delaji to ... po jednom zaznamu. A kdyz to nekdo stopne, tak to pekne po jednom rollbackuji. Takze to trva a trva a trva. Typicky to pak vypada zhruba tak, ze zamestnanci chodi za administratorem na tema "uz zas potrebuju spustit tuhle pitomost" a admin ma napsany nejaky query, ktery udela totez, jen za desetitisicinu casu.

Jeden priklad za vsechny, karta zbozi ma jako jeden z parametru novou cenu s platnosti od. System ma funkci na prepsani tyhle ceny (pokud uz plati) do aktualni ceny produktu. Ta funce je schopna pri desitkach tisic produktu bezet i nekolik hodin. Nacte si totiz vzdy jeden zaznam, ten aktualizuje a tak porad dokola. Update na vse do databaze dobehne v radu nekolika sekund.

Pláčete hezky, ale na špatném hrobě :). To je to COBOLovské myšlení, které se nepodařilo vymýtit - jen převléklo kabát, a objevilo se pod jinou jmenovkou - ORM. Taková je realita - můžete mít sebelepší technologii, a lidi si to stejně budou dělat po svém. A když se zjistí, že je to špatně, tak už je pozdě něco měnit. Prostě lidi. Ty korporátní aplikace kolikrát ještě mají kořeny v COBOLu (nebo lidi, co je píší).
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: agent 12. 09. 2018, 09:23:07
Toho, kdo pro práci s relační DB používá kurzory místo hromadných operací, protože je zvyklý tak programovat, bych věšel za k...e do průvanu  ;D
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: JardaMira 12. 09. 2018, 10:15:31


Vysledne dojmy?  : Uz bych nemenil.
  • Zalozeni nove tabulky (tady collection) nevyzaduje zadnou specialni akci
  • V pythonu je pymongo: ovladani se neda s mysql srovnavat, vsechno je jako DICT 
  •   Pouzivam 100x intenzivneji nez kdysi mysql, takze mam kolem milionu zaznamu, zapisuji kazdych 10 sec. a nevidim latenci 
  •   Menim tabulku za behu, proste zacnu pridavat dalsi parametr. 
  •   Mam dost ridkou tabulku, vetsina parametru je Nan, navazujici pymongo a pyplot jsou v pohode. 
  •   Clovek muze nechat bezet stejne MongoDB na vice strojich najednou, cimz ma duplicitu a pojisteni proti vypadku (ale nezkousel jsem) 
  •   ... a nakonec - MongoDB neni ta nejrychlejsi a nejlepsi NoSQL databaze na trhu.....   

Takze tak. Minusy? Nenasel jsem zadnej skvelej program na udrzbu (jako mysql-workbench apod). Ale nechybi mi, na vsechno mam jeden skript.
Přiznám se, že nevím co si z tohohle příspěvku odnést. Jak se ta databáze vůbec používá? Jestli na veškerou údržbu stačí jeden script tak to IMO nezní moc komplikovaně.
- O MySQL se běžně povídá, že je to spíš parodie na databázi. Rozhodně to není dobrý reprezentant toho, co SQL databáze umí.
- Jeden zápis za 10s (zápis čeho?) nemusí znamenat nic. 10 milionů záznamů taky nemusí být nic (pokud jsem to pochopil jako 10M záznamů celkem).
- A ty zásadní problémy s převodem dat zní jako hodně velké minus.

1/ Pro vyjasneni - postavil jsem si vlastni skript, kterym ctu/pisu v ramci nektere definovane databaze do tabulky (collection). Vystup si davam  do dataframu, kreslim matplotlibem pokud chci. Neni to skript na udrzbu, ale vkladani a kresleni.
2/ nejvetsi databaze tabulka collection ma mereni teplot (+cas). To je tech 1M zaznamu celkem. Je to overkill, ale tak to dopadlo a s timhle mam zkusenost.
3/ POZOR - zasadni problemy vznikly tim, ze jsem kdysi nainstaloval starou verzi MongoDB a ta jela ve starem formatu dat. NEUDELAL jsem dump pred reinstalaci pocitace, takze mi zustal v ruce adresar s kompletni databazi a novy mongodb, ktery ji uz nerozumel. Takze jsem splasil stare ubuntu, starou verzi mongodb, pripojil adresar, dumpnul.  V momentu, kdy jsem mel dump, uz to slo az prilis snadno. Takze moje chyba.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Olda 12. 09. 2018, 10:51:06
Toho, kdo pro práci s relační DB používá kurzory místo hromadných operací, protože je zvyklý tak programovat, bych věšel za k...e do průvanu  ;D

jak vypada ten update-statement, ktery soucasne pro kazdy zmeneny zaznam pise fprintf do nejakeho logfilu?
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: JSH 12. 09. 2018, 11:11:11
Toho, kdo pro práci s relační DB používá kurzory místo hromadných operací, protože je zvyklý tak programovat, bych věšel za k...e do průvanu  ;D
jak vypada ten update-statement, ktery soucasne pro kazdy zmeneny zaznam pise fprintf do nejakeho logfilu?
IMO to vypadá jako hodně blbý nápad. Pokud nutně potřebuješ zaplnit log mraky záznamů, tak si ty upravené záznamy můžeš vytáhnout selectem. Ale fakt si nejsem jistý, co se dá z takového logu vykoukat, pokud je těch upravených záznamů víc než pár desítek.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: dustin 12. 09. 2018, 11:16:50
IMO to vypadá jako hodně blbý nápad. Pokud nutně potřebuješ zaplnit log mraky záznamů, tak si ty upravené záznamy můžeš vytáhnout selectem. Ale fakt si nejsem jistý, co se dá z takového logu vykoukat, pokud je těch upravených záznamů víc než pár desítek.

Např. se může udržovat historický log změn konkrétního "byznys" objektu. Kdo co kdy jak změnil. A nemusí to být do souboru, ale třeba do úplně jiné DB (např. zrovna to mongo).
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Pavel Stěhule 12. 09. 2018, 11:18:20
Toho, kdo pro práci s relační DB používá kurzory místo hromadných operací, protože je zvyklý tak programovat, bych věšel za k...e do průvanu  ;D

jak vypada ten update-statement, ktery soucasne pro kazdy zmeneny zaznam pise fprintf do nejakeho logfilu?

Můžete zatrigrovat a plnit si tabulku, db log, případně nějaký jiný log. V některých db se o to může postarat audit. Tahat data na klienta, abyste udělal fprintf do logu může být dost drahé.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Pavel Stěhule 12. 09. 2018, 11:31:39
Toho, kdo pro práci s relační DB používá kurzory místo hromadných operací, protože je zvyklý tak programovat, bych věšel za k...e do průvanu  ;D

jak vypada ten update-statement, ktery soucasne pro kazdy zmeneny zaznam pise fprintf do nejakeho logfilu?

Je to legrace - v praxi bych to delal jinak - ale jde to, napr, pokud chcete zmeny pred, po.
with x as (select * from foo where a between 7 and 10), 
  y as (update foo set b = foo.a + 10 from x where foo.a = x.a returning foo.*)
  select 'before', x.* from x union all select 'after', y.* from y;

pokud by vam stacily jen zmeny po, tak je to jednoduche:
update ... returning *;
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: SB 12. 09. 2018, 16:17:16

...ctu/pisu v ramci nektere definovane databaze do tabulky (collection)...
2/ nejvetsi databaze tabulka collection ...

Jardo Míro, píšete skvěle, ale když už jste si dal tu práci a použil něco jiného než RDB, odbourejte prosím tu relační terminologii - tabulky se v dokumentové databázi NEVYSKYTUJÍ (koneckonců proto vznikla). Collections (kolekce?) a v nich dokumenty. Jasné?
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: BoneFlute 12. 09. 2018, 17:04:36
IMO to vypadá jako hodně blbý nápad. Pokud nutně potřebuješ zaplnit log mraky záznamů, tak si ty upravené záznamy můžeš vytáhnout selectem. Ale fakt si nejsem jistý, co se dá z takového logu vykoukat, pokud je těch upravených záznamů víc než pár desítek.

Např. se může udržovat historický log změn konkrétního "byznys" objektu. Kdo co kdy jak změnil. A nemusí to být do souboru, ale třeba do úplně jiné DB (např. zrovna to mongo).
Dělám to - mám na to něco jako verzování.

V prvé řadě bych to plnil do spešl tabulky na stejné databázi.

Nevím, proč by to měla být jiná databáze, ale pokud opravdu je ten důvod jinej než jen "třeba", tak postgre umí spousta věcí. Napsal jsem si v něm Python funkci, která mi při insertu ověřovala, zda IČO existuje dotazem do ARESu. Bylo to pomalý jak prase, ale pro danný případ dostačující. Takže nevidím důvod, proč bych se podobným, nebo lepším způsobem nemohl napojit na cokoliv. Třeba i Filesystem.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Filip Jirsák 12. 09. 2018, 17:17:03
Nevím, proč by to měla být jiná databáze
Např. proto, že pro ukládání nějakých logů nepotřebujete plýtvat prostorem na rychlých drahých malých discích, případně na to nepotřebujete vůbec plýtvat drahým výkonem relační databáze.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: BoneFlute 12. 09. 2018, 17:19:39
To je to COBOLovské myšlení, které se nepodařilo vymýtit - jen převléklo kabát, a objevilo se pod jinou jmenovkou - ORM.

Nechci ORM obhajovat, ale musím :-) Principielně není problém, aby dobré ORM posílalo optimální SQLka. Problém není myšlení, ale to, že ta ORM jsou blbě napsaná. Bohužel všechna, a to dělá pak ten blbej dojem.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Filip Jirsák 12. 09. 2018, 17:39:02
Nechci ORM obhajovat, ale musím :-) Principielně není problém, aby dobré ORM posílalo optimální SQLka. Problém není myšlení, ale to, že ta ORM jsou blbě napsaná. Bohužel všechna, a to dělá pak ten blbej dojem.
Nejde jen o optimální SQL, jde také o strukturu dat. Jinak budete reálný svět modelovat pomocí grafu objektů a jinak pomocí relací.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Pavel Stěhule 12. 09. 2018, 18:45:06
To je to COBOLovské myšlení, které se nepodařilo vymýtit - jen převléklo kabát, a objevilo se pod jinou jmenovkou - ORM.

Nechci ORM obhajovat, ale musím :-) Principielně není problém, aby dobré ORM posílalo optimální SQLka. Problém není myšlení, ale to, že ta ORM jsou blbě napsaná. Bohužel všechna, a to dělá pak ten blbej dojem.

:)
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: MartinBeran 12. 09. 2018, 19:17:49
To je to COBOLovské myšlení, které se nepodařilo vymýtit - jen převléklo kabát, a objevilo se pod jinou jmenovkou - ORM.

Nechci ORM obhajovat, ale musím :-) Principielně není problém, aby dobré ORM posílalo optimální SQLka. Problém není myšlení, ale to, že ta ORM jsou blbě napsaná. Bohužel všechna, a to dělá pak ten blbej dojem.

Připadá mi, že ORM svádí k programování ve stylu:
Kód: [Vybrat]
sum = 0
foreach a = collection_of_a()
  if test(a) then
    b = collection_of_b(a.b_id)
    if test(b) then
      sum += b.val
return sum
Není mi jasné, jak tohle dobré ORM zoptimalizuje, i když je jasné, že se to dá přepsat do jednoho SELECTu s JOINem dvou tabulek.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: listoper 12. 09. 2018, 19:38:59
To je to COBOLovské myšlení, které se nepodařilo vymýtit - jen převléklo kabát, a objevilo se pod jinou jmenovkou - ORM.

Nechci ORM obhajovat, ale musím :-) Principielně není problém, aby dobré ORM posílalo optimální SQLka. Problém není myšlení, ale to, že ta ORM jsou blbě napsaná. Bohužel všechna, a to dělá pak ten blbej dojem.
Za pravnika bych te nechtel  ;D
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: BoneFlute 12. 09. 2018, 20:05:10
To je to COBOLovské myšlení, které se nepodařilo vymýtit - jen převléklo kabát, a objevilo se pod jinou jmenovkou - ORM.

Nechci ORM obhajovat, ale musím :-) Principielně není problém, aby dobré ORM posílalo optimální SQLka. Problém není myšlení, ale to, že ta ORM jsou blbě napsaná. Bohužel všechna, a to dělá pak ten blbej dojem.
Za pravnika bych te nechtel  ;D

Tak dělám, co umím. Co neumím, nedělám :-)
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Kiwi 12. 09. 2018, 20:05:54
To je to COBOLovské myšlení, které se nepodařilo vymýtit - jen převléklo kabát, a objevilo se pod jinou jmenovkou - ORM.

Nechci ORM obhajovat, ale musím :-) Principielně není problém, aby dobré ORM posílalo optimální SQLka. Problém není myšlení, ale to, že ta ORM jsou blbě napsaná. Bohužel všechna, a to dělá pak ten blbej dojem.
Kde jsem něco podobného už jenom slyšel... "Komunismus principiálně může v pohodě fungovat. Bohužel, zatím to všichni dělali blbě."
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: BoneFlute 12. 09. 2018, 20:09:16
To je to COBOLovské myšlení, které se nepodařilo vymýtit - jen převléklo kabát, a objevilo se pod jinou jmenovkou - ORM.

Nechci ORM obhajovat, ale musím :-) Principielně není problém, aby dobré ORM posílalo optimální SQLka. Problém není myšlení, ale to, že ta ORM jsou blbě napsaná. Bohužel všechna, a to dělá pak ten blbej dojem.

Připadá mi, že ORM svádí k programování ve stylu:
Kód: [Vybrat]
sum = 0
foreach a = collection_of_a()
  if test(a) then
    b = collection_of_b(a.b_id)
    if test(b) then
      sum += b.val
return sum
Není mi jasné, jak tohle dobré ORM zoptimalizuje, i když je jasné, že se to dá přepsat do jednoho SELECTu s JOINem dvou tabulek.
Jsi si jist, že za to může to ORM?
Setkal jsem se s kódem, který ORM nepoužíval a dopadlo to stejně.

Já na ORM pohlížím jako na něco, co by mě mělo usnadnit rutinní práci. Neočekávám, že zajistí, že se nebudu střílet do nohy.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: BoneFlute 12. 09. 2018, 20:10:52
To je to COBOLovské myšlení, které se nepodařilo vymýtit - jen převléklo kabát, a objevilo se pod jinou jmenovkou - ORM.

Nechci ORM obhajovat, ale musím :-) Principielně není problém, aby dobré ORM posílalo optimální SQLka. Problém není myšlení, ale to, že ta ORM jsou blbě napsaná. Bohužel všechna, a to dělá pak ten blbej dojem.
Kde jsem něco podobného už jenom slyšel... "Komunismus principiálně může v pohodě fungovat. Bohužel, zatím to všichni dělali blbě."

A to nevíš, že já ORM nemám rád, a to hlavně pro tu jejich snahu o objektovost :-P
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: MartinBeran 12. 09. 2018, 20:35:48
Jsi si jist, že za to může to ORM?
Setkal jsem se s kódem, který ORM nepoužíval a dopadlo to stejně.

Já na ORM pohlížím jako na něco, co by mě mělo usnadnit rutinní práci. Neočekávám, že zajistí, že se nebudu střílet do nohy.

Myslel jsem, že ORM má skrývat fakt, že data jsou v relační databází a prezentovat mu je, jako by byly v nějakém úložišti objektů. Pak mi ale připadá přirozené, že programátor s objekty pracuje po jednom a explicitně přechází mezi nimi pomocí vzájemných odkazů a při tom neřeší, že každý krok znamená dotaz do databáze. Není mi moc jasné, jak by mělo ORM vypadat, aby navádělo k efektivní práci s databází a zároveň nevypadalo jako SQL přebalené do jiné syntaxe.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: BoneFlute 12. 09. 2018, 20:59:06
Jsi si jist, že za to může to ORM?
Setkal jsem se s kódem, který ORM nepoužíval a dopadlo to stejně.

Já na ORM pohlížím jako na něco, co by mě mělo usnadnit rutinní práci. Neočekávám, že zajistí, že se nebudu střílet do nohy.

Myslel jsem, že ORM má skrývat fakt, že data jsou v relační databází a prezentovat mu je, jako by byly v nějakém úložišti objektů. Pak mi ale připadá přirozené, že programátor s objekty pracuje po jednom a explicitně přechází mezi nimi pomocí vzájemných odkazů a při tom neřeší, že každý krok znamená dotaz do databáze. Není mi moc jasné, jak by mělo ORM vypadat, aby navádělo k efektivní práci s databází a zároveň nevypadalo jako SQL přebalené do jiné syntaxe.

Možná to tak někteří chápou, pak by měl Pavel s tím COBOLem pravdu.

Mě na SQL přijde revoluční právě ten deklarativní zápis. Pošleš engine algoritmus, a on ti vyplivne výsledky. Něco podobné je možné pozorovat u LINQ, nebo GraphQL. Díky tomu se opravdu můžu oprostit od detailů práce s databází (na druhou stranu mi přijde zase škoda vzdát se pokročilejších možností) aniž by to začalo být brutálně neefektivní.

V některých svých hračkách, co jsem dělal jsem měl specializovaný DSLko, kterým jsem se dotazoval na objekty, a pokoušel jsem se to mé pseudoORM přinutit, aby generovalo SQLka, která bych napsal stejně. Celkem to šlo.

Nebo jiný způsobem. Nette/Database to dělá tak, že dokáže zoptimalizovat i ten tvůj kód. Při prvním průchodu to provede všechny dotazy, to si nakešuje, a při dalších už to načítá hromadně. Mě ten způsob není moc sympatický, ale funguje to.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: MartinBeran 12. 09. 2018, 23:22:13
Mě na SQL přijde revoluční právě ten deklarativní zápis. Pošleš engine algoritmus, a on ti vyplivne výsledky. Něco podobné je možné pozorovat u LINQ, nebo GraphQL. Díky tomu se opravdu můžu oprostit od detailů práce s databází (na druhou stranu mi přijde zase škoda vzdát se pokročilejších možností) aniž by to začalo být brutálně neefektivní.
Nechápu, co tenhle odstavec měl vyjadřovat. Jestli "oprostit od detailů práce z databází" znamená, že s databází komunikuju pomocí SQL, tak to nemá s ORM nic společného. Jestli to má znamenat, že díky deklarativnímu SQL se můžu oprostit od detailů použitím ORM, tak to není pravda.

V některých svých hračkách, co jsem dělal jsem měl specializovaný DSLko, kterým jsem se dotazoval na objekty, a pokoušel jsem se to mé pseudoORM přinutit, aby generovalo SQLka, která bych napsal stejně. Celkem to šlo.
U DSL specializovaného pro nějakou konkrétní aplikaci jsem ochoten věřit, že to může generovat rozumné SQL. Ale pak to asi nebude obecně použitelné ORM.

Nebo jiný způsobem. Nette/Database to dělá tak, že dokáže zoptimalizovat i ten tvůj kód. Při prvním průchodu to provede všechny dotazy, to si nakešuje, a při dalších už to načítá hromadně. Mě ten způsob není moc sympatický, ale funguje to.

I když pominu, že ten první průchod může trvat nechutně dlouho, tak jestli při dalších průchodech už nekomunikuje s databází a čte z keše, tak to bude mít minimálně dvě další nevýhody: 1. Keš může být hodně velká; 2. Bude to fungovat správně, jen když se data v databázi nebudou měnit.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Kit 12. 09. 2018, 23:59:54
Myslel jsem, že ORM má skrývat fakt, že data jsou v relační databází a prezentovat mu je, jako by byly v nějakém úložišti objektů. Pak mi ale připadá přirozené, že programátor s objekty pracuje po jednom a explicitně přechází mezi nimi pomocí vzájemných odkazů a při tom neřeší, že každý krok znamená dotaz do databáze. Není mi moc jasné, jak by mělo ORM vypadat, aby navádělo k efektivní práci s databází a zároveň nevypadalo jako SQL přebalené do jiné syntaxe.

Dobré ORM je jen vlhkým snem některých vývojářů. Pokud někdo chce používat kolekce místo tabulek, tak proč se snaží dělat konverzi mezi nimi? Proč nepracuje s databázemi, které s kolekcemi fungují nativně?

Výsledkem SELECTu v relační databázi je kolekce relací. Je velmi jednoduché takovou kolekci zpracovat objektově. Jakmile někdo volá SQL dotaz v cyklu, něco je hodně špatně.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: BoneFlute 13. 09. 2018, 00:04:16
Mě na SQL přijde revoluční právě ten deklarativní zápis. Pošleš engine algoritmus, a on ti vyplivne výsledky. Něco podobné je možné pozorovat u LINQ, nebo GraphQL. Díky tomu se opravdu můžu oprostit od detailů práce s databází (na druhou stranu mi přijde zase škoda vzdát se pokročilejších možností) aniž by to začalo být brutálně neefektivní.
Nechápu, co tenhle odstavec měl vyjadřovat. Jestli "oprostit od detailů práce z databází" znamená, že s databází komunikuju pomocí SQL, tak to nemá s ORM nic společného. Jestli to má znamenat, že díky deklarativnímu SQL se můžu oprostit od detailů použitím ORM, tak to není pravda.
Naopak. Díky deklarativnímu SQL se můžu oprostit od detailu uložení dat. Stejně tak nějak musím u inteligentního ORM psát deklarativně a poněkud obecně.
Například u toho LINQ je to pěkně vidět. Nemůžu napsat
Kód: [Vybrat]
sum = 0
foreach a = collection_of_a()
  if test(a) then
    b = collection_of_b(a.b_id)
    if test(b) then
      sum += b.val
return sum

ale musím napsat:
Kód: [Vybrat]
src.iters.filter(\a -> ...).b.iters.filter(\b -> ...).sum()
To aby ten LINQ "pochopil" co má udělat.

I když kdo ví, třeba by zvládl i ten tvůj zápis. Zase tak dobře to neznám.


V některých svých hračkách, co jsem dělal jsem měl specializovaný DSLko, kterým jsem se dotazoval na objekty, a pokoušel jsem se to mé pseudoORM přinutit, aby generovalo SQLka, která bych napsal stejně. Celkem to šlo.
U DSL specializovaného pro nějakou konkrétní aplikaci jsem ochoten věřit, že to může generovat rozumné SQL. Ale pak to asi nebude obecně použitelné ORM.
Bylo to obecné DSL pro získávání obecných dat z ORM. Ale mělo to svá specifika a určitě i omezení.

Nebo jiný způsobem. Nette/Database to dělá tak, že dokáže zoptimalizovat i ten tvůj kód. Při prvním průchodu to provede všechny dotazy, to si nakešuje, a při dalších už to načítá hromadně. Mě ten způsob není moc sympatický, ale funguje to.

I když pominu, že ten první průchod může trvat nechutně dlouho, tak jestli při dalších průchodech už nekomunikuje s databází a čte z keše, tak to bude mít minimálně dvě další nevýhody: 1. Keš může být hodně velká; 2. Bude to fungovat správně, jen když se data v databázi nebudou měnit.
Nekešují se data, ale schema. Špatně jsem to popsal. Nejlépe osvětlí ukázka:

Kód: [Vybrat]
foreach ($users(10) as $user) {
    echo $user->title;
    foreach ($user->articles(10) as $article) {
        echo $article->title;
        foreach ($article->discuss(5) as $discuss) {
            echo $discuss->title;
        }
    }
}
Při prvním průchodu to vytvoří 51 dotazů, při druhém už jen tři, protože si odvodí, že ty articles a discuss může sloučit.
Možná, že ten tvůj příklad už by byl moc, možná by to zvládl. Ruku do ohně bych za to nedal.

Kód: [Vybrat]
$sum = 0
foreach ($base->where(test_a) as $a) {
    foreach ($a->where(test_b) as $b) {
        $sum += $b->val;
    }
}
return $sum;
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Kit 13. 09. 2018, 00:08:38
Nebo jiný způsobem. Nette/Database to dělá tak, že dokáže zoptimalizovat i ten tvůj kód. Při prvním průchodu to provede všechny dotazy, to si nakešuje, a při dalších už to načítá hromadně. Mě ten způsob není moc sympatický, ale funguje to.

I když pominu, že ten první průchod může trvat nechutně dlouho, tak jestli při dalších průchodech už nekomunikuje s databází a čte z keše, tak to bude mít minimálně dvě další nevýhody: 1. Keš může být hodně velká; 2. Bude to fungovat správně, jen když se data v databázi nebudou měnit.

Nedává mi to smysl. Proč používat cache v aplikaci, když relační databáze mívají vlastní propracované cache? Také mi není jasné, proč by se aplikace měla opakovaně ptát na hodnoty, které už má.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: BoneFlute 13. 09. 2018, 00:17:32
Nebo jiný způsobem. Nette/Database to dělá tak, že dokáže zoptimalizovat i ten tvůj kód. Při prvním průchodu to provede všechny dotazy, to si nakešuje, a při dalších už to načítá hromadně. Mě ten způsob není moc sympatický, ale funguje to.

I když pominu, že ten první průchod může trvat nechutně dlouho, tak jestli při dalších průchodech už nekomunikuje s databází a čte z keše, tak to bude mít minimálně dvě další nevýhody: 1. Keš může být hodně velká; 2. Bude to fungovat správně, jen když se data v databázi nebudou měnit.

Nedává mi to smysl. Proč používat cache v aplikaci, když relační databáze mívají vlastní propracované cache? Také mi není jasné, proč by se aplikace měla opakovaně ptát na hodnoty, které už má.
Viz můj následující příspěvek. Špatně jsem to popsal. Nejde o cache dat, ale o cache schematu. Nebo spíše logiky.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Kit 13. 09. 2018, 00:18:01
Nekešují se data, ale schema. Špatně jsem to popsal. Nejlépe osvětlí ukázka:
Kód: [Vybrat]
foreach ($users(10) as $user) {
    echo $user->title;
    foreach ($user->articles(10) as $article) {
        echo $article->title;
        foreach ($article->discuss(5) as $discuss) {
            echo $discuss->title;
        }
    }
}

Tohle vypadá strašně. Přitom na to stačí jen jeden SELECT, který relační databáze zvládne levou zadní. PDO to navíc dokáže uspořádat do stromu, takže s tím už není skoro žádná práce.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: OooO 13. 09. 2018, 07:19:31
Jsi si jist, že za to může to ORM?
Setkal jsem se s kódem, který ORM nepoužíval a dopadlo to stejně.

Já na ORM pohlížím jako na něco, co by mě mělo usnadnit rutinní práci. Neočekávám, že zajistí, že se nebudu střílet do nohy.

Myslel jsem, že ORM má skrývat fakt, že data jsou v relační databází a prezentovat mu je, jako by byly v nějakém úložišti objektů. Pak mi ale připadá přirozené, že programátor s objekty pracuje po jednom a explicitně přechází mezi nimi pomocí vzájemných odkazů a při tom neřeší, že každý krok znamená dotaz do databáze. Není mi moc jasné, jak by mělo ORM vypadat, aby navádělo k efektivní práci s databází a zároveň nevypadalo jako SQL přebalené do jiné syntaxe.

Ano, ORM je zkrátka způsob, jak persistovat data objektů v relační databázi, ne interface pro efektivní práci s relační databází. Od tohohle rozdílu by se mělo odvíjet designové rozhodnutí, zda ORM použít.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Někdo 13. 09. 2018, 10:52:31
Nebo jiný způsobem. Nette/Database to dělá tak, že dokáže zoptimalizovat i ten tvůj kód. Při prvním průchodu to provede všechny dotazy, to si nakešuje, a při dalších už to načítá hromadně. Mě ten způsob není moc sympatický, ale funguje to.

I když pominu, že ten první průchod může trvat nechutně dlouho, tak jestli při dalších průchodech už nekomunikuje s databází a čte z keše, tak to bude mít minimálně dvě další nevýhody: 1. Keš může být hodně velká; 2. Bude to fungovat správně, jen když se data v databázi nebudou měnit.

Nedává mi to smysl. Proč používat cache v aplikaci, když relační databáze mívají vlastní propracované cache? Také mi není jasné, proč by se aplikace měla opakovaně ptát na hodnoty, které už má.

Dotaz do cache přímo v aplikaci je mnohonásobně rychlejší než dotaz do cache v databázi (protože tam to velmi zpomaluje komunikace po síti). A i na to aby se aplikace opakovaně neptala na hodnoty které už má se dá využít právě cache v aplikaci.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Ondra Satai Nekola 13. 09. 2018, 11:05:41
Nebo jiný způsobem. Nette/Database to dělá tak, že dokáže zoptimalizovat i ten tvůj kód. Při prvním průchodu to provede všechny dotazy, to si nakešuje, a při dalších už to načítá hromadně. Mě ten způsob není moc sympatický, ale funguje to.

I když pominu, že ten první průchod může trvat nechutně dlouho, tak jestli při dalších průchodech už nekomunikuje s databází a čte z keše, tak to bude mít minimálně dvě další nevýhody: 1. Keš může být hodně velká; 2. Bude to fungovat správně, jen když se data v databázi nebudou měnit.

Nedává mi to smysl. Proč používat cache v aplikaci, když relační databáze mívají vlastní propracované cache? Také mi není jasné, proč by se aplikace měla opakovaně ptát na hodnoty, které už má.

Dotaz do cache přímo v aplikaci je mnohonásobně rychlejší než dotaz do cache v databázi (protože tam to velmi zpomaluje komunikace po síti). A i na to aby se aplikace opakovaně neptala na hodnoty které už má se dá využít právě cache v aplikaci.

To zalezi na spouste okolnosti. Cim dale posunes cache od dat, tim to bude rychlejsi, ale zase mas vic problemu s invalidaci cache.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: n 13. 09. 2018, 11:07:03
Nebo jiný způsobem. Nette/Database to dělá tak, že dokáže zoptimalizovat i ten tvůj kód. Při prvním průchodu to provede všechny dotazy, to si nakešuje, a při dalších už to načítá hromadně. Mě ten způsob není moc sympatický, ale funguje to.

I když pominu, že ten první průchod může trvat nechutně dlouho, tak jestli při dalších průchodech už nekomunikuje s databází a čte z keše, tak to bude mít minimálně dvě další nevýhody: 1. Keš může být hodně velká; 2. Bude to fungovat správně, jen když se data v databázi nebudou měnit.

Nedává mi to smysl. Proč používat cache v aplikaci, když relační databáze mívají vlastní propracované cache? Také mi není jasné, proč by se aplikace měla opakovaně ptát na hodnoty, které už má.

Dotaz do cache přímo v aplikaci je mnohonásobně rychlejší než dotaz do cache v databázi (protože tam to velmi zpomaluje komunikace po síti). A i na to aby se aplikace opakovaně neptala na hodnoty které už má se dá využít právě cache v aplikaci.

A jak cache v aplikaci zjisti, ze data ktera si nacachovala jsou stale platna?
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Ondrej Nemecek 13. 09. 2018, 11:31:42
Akorát se tu trochu zapomíná na to, že reálná ORM umožňují psát SQL nebo mají API, které SQL věrně kopíruje. Pak si může člověk vybrat a pořád má výhodu mapování na objekty. Otázka je, kolik práce si tím ve výsledku ušetří a kolik přidělá, což se ale bude lišit projekt od projektu.

Mě se docela líbí taková ta úplně lehká ORM jako třeba http://javalite.io/activejdbc#design-principles, akorát mě tam štve ten zápis sloupců jako string (dá se řešit tím, že si člověk napíše gettery a settery ručně).

Proč se víc nerozšířili objektové databáze, to netuším. Asi že chybí ta standardizace...?
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: dustin 13. 09. 2018, 11:33:59
A jak cache v aplikaci zjisti, ze data ktera si nacachovala jsou stale platna?

Samozřejmě zápis musí přistupovat přes API zahrnující tu keš. Do DB napřímo zápis jen při shozené aplikaci...

Máme takto udělané poměrně komplikované kešující ORM a funguje už 15 let OK. Samozřejmě všechno má své pro i proti.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Někdo 13. 09. 2018, 11:51:35
Nebo jiný způsobem. Nette/Database to dělá tak, že dokáže zoptimalizovat i ten tvůj kód. Při prvním průchodu to provede všechny dotazy, to si nakešuje, a při dalších už to načítá hromadně. Mě ten způsob není moc sympatický, ale funguje to.

I když pominu, že ten první průchod může trvat nechutně dlouho, tak jestli při dalších průchodech už nekomunikuje s databází a čte z keše, tak to bude mít minimálně dvě další nevýhody: 1. Keš může být hodně velká; 2. Bude to fungovat správně, jen když se data v databázi nebudou měnit.

Nedává mi to smysl. Proč používat cache v aplikaci, když relační databáze mívají vlastní propracované cache? Také mi není jasné, proč by se aplikace měla opakovaně ptát na hodnoty, které už má.

Dotaz do cache přímo v aplikaci je mnohonásobně rychlejší než dotaz do cache v databázi (protože tam to velmi zpomaluje komunikace po síti). A i na to aby se aplikace opakovaně neptala na hodnoty které už má se dá využít právě cache v aplikaci.

A jak cache v aplikaci zjisti, ze data ktera si nacachovala jsou stale platna?

Cache nic nezjistí, to musí zaručit programátor správnou implementací. Buď mu starší data nevadí nebo musí použít databázový zámek (pessimistic locking) nebo verzování (optimistic locking).
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Někdo 13. 09. 2018, 11:54:02
A jak cache v aplikaci zjisti, ze data ktera si nacachovala jsou stale platna?

Samozřejmě zápis musí přistupovat přes API zahrnující tu keš. Do DB napřímo zápis jen při shozené aplikaci...

Máme takto udělané poměrně komplikované kešující ORM a funguje už 15 let OK. Samozřejmě všechno má své pro i proti.

Zásdaní dotaz: jak řešíte pokud aplikace běží v clusteru na různých serverech?
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Kit 13. 09. 2018, 12:01:07
A jak cache v aplikaci zjisti, ze data ktera si nacachovala jsou stale platna?

Samozřejmě zápis musí přistupovat přes API zahrnující tu keš. Do DB napřímo zápis jen při shozené aplikaci...

Máme takto udělané poměrně komplikované kešující ORM a funguje už 15 let OK. Samozřejmě všechno má své pro i proti.

Co když do té databáze zapisuje spousta aplikací zároveň? Pro mne je to velmi častý případ a nějaké zámky by mohly skončit i deadlockem.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Někdo 13. 09. 2018, 12:04:42
A jak cache v aplikaci zjisti, ze data ktera si nacachovala jsou stale platna?

Samozřejmě zápis musí přistupovat přes API zahrnující tu keš. Do DB napřímo zápis jen při shozené aplikaci...

Máme takto udělané poměrně komplikované kešující ORM a funguje už 15 let OK. Samozřejmě všechno má své pro i proti.

Co když do té databáze zapisuje spousta aplikací zároveň? Pro mne je to velmi častý případ a nějaké zámky by mohly skončit i deadlockem.

Správně používané zámky nikdy deadlockem neskončí - předpokládá to ovšem že všichni kdož mají právo zámky vytvářet (obvykle jsou to všichni kdož mají právo měnit data) se chovají správně. Není důvod zámky opovrhovat jenom kvůli tomu že je je možno používat špatným způsobem.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: dustin 13. 09. 2018, 12:34:29
Co když do té databáze zapisuje spousta aplikací zároveň?

Ještě jednou - Samozřejmě zápis musí přistupovat přes API zahrnující tu keš. Přímo do DB jen při shozené aplikaci nebo při startu, kdy ještě nemá keš inicializovanou (děláme tak větší updaty DB). Je jenom jedna RW keš. Opakuji - má to výhody i nevýhody. U nás převažují výhody, proto to takhle používáme.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: j 13. 09. 2018, 12:45:42
...Správně používané zámky nikdy deadlockem neskončí....
Fakt? Tak to bych chtel videt jak udelas ... fakt bych chtel videt, jak vyresis to, ze dva uzivatele/aplikace/... hodlaji poslat update na stejny zaznam. Nechas je to udelat oba? Pekne potichu?
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: agent 13. 09. 2018, 13:11:22
Pokud je to důležité, aby to nemohlo nastat (což u spousty app neplatí), tak si záznam zamknu na začátku editace a uvolním po update nebo po odpadnutí spojení. A nedovolím otevření pro editaci nebo přímo zápis (v situaci kdy se zámek uvolil automaticky) nikomu, kdo nevlastní lock.
Pokud tohle dostatečně dobře nejde na DB úrovni, můžu si to zajistit na aplikační úrovni (a předpokládat, že nikdo nepůjde natvrdo na data přes nastavený aplikační zámek). 
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Olda 13. 09. 2018, 13:19:39
...Správně používané zámky nikdy deadlockem neskončí....
Fakt? Tak to bych chtel videt jak udelas ... fakt bych chtel videt, jak vyresis to, ze dva uzivatele/aplikace/... hodlaji poslat update na stejny zaznam. Nechas je to udelat oba? Pekne potichu?

Ja si myslim, ze 'Nekdo1' si vyzada zamek na zaznam, precte ten zaznam, provede zmeny a zapise to. Pak ten zaznam zase uvolni a na to uz ceka 'Nekdo2', ktery si take vyzadal na ten zaznam zamek a nyni se precte on ten prave zmeneny zaznam , provede sve zmeny a zapise a uvolni to.
Takovehle situace ale k deadlocku nikdy nevedou. Jinak to bude, kdyz se Nekdo1 a Nekdo2 budou hadat o 2 ruzne zaznamy - pak b ta deadlock situace mohla nastat, ale ja se vsadim, ze nas kolega=Nekdo to ma osetrene a kdyz si tedy vyzada v te nesikovne situaci zamek, tak dostane od systemu navratovou hodnotu=DEADLOCK a on (a nebo ten locking system) to zkusi po par milisekundach znova.   
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: O 13. 09. 2018, 13:59:46
Akorát se tu trochu zapomíná na to, že reálná ORM umožňují psát SQL nebo mají API, které SQL věrně kopíruje. Pak si může člověk vybrat a pořád má výhodu mapování na objekty. Otázka je, kolik práce si tím ve výsledku ušetří a kolik přidělá, což se ale bude lišit projekt od projektu.

Já myslel, že se tady bavíme o ORM jako o programovací technice, ne o tom, že v reálu si ORM frameworky jen s ORM přístupem nevystačí a musí k tomu přilepit funkčnost, která už nemá s ORM prakticky nic společného a která zcela zásadně narušuje tu úroveň abstrakce, na které pracuje ORM.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Kit 13. 09. 2018, 15:17:23
Co když do té databáze zapisuje spousta aplikací zároveň?

Ještě jednou - Samozřejmě zápis musí přistupovat přes API zahrnující tu keš. Přímo do DB jen při shozené aplikaci nebo při startu, kdy ještě nemá keš inicializovanou (děláme tak větší updaty DB). Je jenom jedna RW keš. Opakuji - má to výhody i nevýhody. U nás převažují výhody, proto to takhle používáme.

Jistě, takovou propracovanou RW keš má databáze v sobě a poskytuje veřejně dokumentované API. Další mezičlánky jsou kontraproduktivní a zbytečné.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: andy 13. 09. 2018, 15:47:16
Co to tu riesite zas? Deadlock nastava ak v grafe cakania na zamky existuje cyklus. Preto ak lockujete zaznamy v rovnakom poradi, deadlock nastat nemoze. Deadlocky su iba znak toho, ze mate v IT bordel.
Cachovanie je dobra vec na rozne ciselniky ktore sa nemenia casto. Robit 300 sql requestov v jednom http requeste aby som zobrazil jednu tabulku, to je taky php pristup, ale inak totalna kravina. Ohladom platnosti dat, kazda normalna DB vie posielat eventy.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Ondrej Nemecek 13. 09. 2018, 16:00:33
Akorát se tu trochu zapomíná na to, že reálná ORM umožňují psát SQL nebo mají API, které SQL věrně kopíruje. Pak si může člověk vybrat a pořád má výhodu mapování na objekty. Otázka je, kolik práce si tím ve výsledku ušetří a kolik přidělá, což se ale bude lišit projekt od projektu.

Já myslel, že se tady bavíme o ORM jako o programovací technice, ne o tom, že v reálu si ORM frameworky jen s ORM přístupem nevystačí a musí k tomu přilepit funkčnost, která už nemá s ORM prakticky nic společného a která zcela zásadně narušuje tu úroveň abstrakce, na které pracuje ORM.

OK, jako čistý koncept je ORM dost omezené. Ale v praxi to lze docela snadno řešit, takže to moc nevadí.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: O 13. 09. 2018, 22:16:38
Akorát se tu trochu zapomíná na to, že reálná ORM umožňují psát SQL nebo mají API, které SQL věrně kopíruje. Pak si může člověk vybrat a pořád má výhodu mapování na objekty. Otázka je, kolik práce si tím ve výsledku ušetří a kolik přidělá, což se ale bude lišit projekt od projektu.

Já myslel, že se tady bavíme o ORM jako o programovací technice, ne o tom, že v reálu si ORM frameworky jen s ORM přístupem nevystačí a musí k tomu přilepit funkčnost, která už nemá s ORM prakticky nic společného a která zcela zásadně narušuje tu úroveň abstrakce, na které pracuje ORM.

OK, jako čistý koncept je ORM dost omezené. Ale v praxi to lze docela snadno řešit, takže to moc nevadí.

Jo, v praxi se to ojebává právě tím, že se tomu pořád říká ORM framework, ale půlka ho není ORM, ale nějaké přibastlené extra API, aby se přes to dalo s tou databází jakž takž pracovat jako s databází.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Kamil Podlešák 13. 09. 2018, 22:37:27
Jo, v praxi se to ojebává právě tím, že se tomu pořád říká ORM framework, ale půlka ho není ORM, ale nějaké přibastlené extra API, aby se přes to dalo s tou databází jakž takž pracovat jako s databází.
Pro tento abstraktní koncept existuje dokonce i termín, ale bohužel dnes velmi politicky nekorektní:

kompromis

A teď to schytám, tak jdu raději spát.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Kit 13. 09. 2018, 23:13:52
Jo, v praxi se to ojebává právě tím, že se tomu pořád říká ORM framework, ale půlka ho není ORM, ale nějaké přibastlené extra API, aby se přes to dalo s tou databází jakž takž pracovat jako s databází.

Na ORM je tedy nejlepší to, co není součástí ORM.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: JS 14. 09. 2018, 08:33:10
Jo, v praxi se to ojebává právě tím, že se tomu pořád říká ORM framework, ale půlka ho není ORM, ale nějaké přibastlené extra API, aby se přes to dalo s tou databází jakž takž pracovat jako s databází.

Na ORM je tedy nejlepší to, co není součástí ORM.

Je to skoro tak. Driv jsem byl fanousek ORM, ale spalil jsem si na tom prsty (omylem jsem provedl neco, co melo byt jako jedna transakce pomoci vice transakci v ORM, a zpusobilo to samozrejme chybu pri selhani).

ORM se lidi casto uci s tim, ze jim to usnadni pristup do DB oproti SQL. Bohuzel to tak neni, ve vysledku se budete muset to SQL (a hlavne relacni mysleni, jak pise pan Stehule, ja bych k tomu dodal jeste transakcni mysleni) stejne naucit, takze ORM vam v tom uceni bude jen prekazet. Predstava, ze se snaz naucite databaze prostrednictvim ORM, pokud uz umite OOP, je proste velky omyl.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Kit 14. 09. 2018, 10:03:42
ORM však může být užitečné tam, kde chci (já tedy ne) narychlo splácat nějaký nenáročný web.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: SB 14. 09. 2018, 10:06:05
Nejde jen o optimální SQL, jde také o strukturu dat. Jinak budete reálný svět modelovat pomocí grafu objektů a jinak pomocí relací.

Jasně, ale pak přichází otázka, jestli je vhodné reálný svět ukládat do RDB, když budu muset nutně někde udělat docela komplikovaný překlad.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: SB 14. 09. 2018, 10:11:14
Připadá mi, že ORM svádí k programování ve stylu:
Kód: [Vybrat]
sum = 0
foreach a = collection_of_a()
  if test(a) then
    b = collection_of_b(a.b_id)
    if test(b) then
      sum += b.val
return sum
Není mi jasné, jak tohle dobré ORM zoptimalizuje, i když je jasné, že se to dá přepsat do jednoho SELECTu s JOINem dvou tabulek.

Nikde není napsáno, že součásí ORM nemůžou být vaše ručně psané, optimalizované operace (a nejspíš budou). Ale to platí pro VŠECHNY typy databází - mícháte dohromady 2 věci - nutnost překladu mezi formáty dat a výběr strany zpracování operací.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: Kit 14. 09. 2018, 10:17:41
Nejde jen o optimální SQL, jde také o strukturu dat. Jinak budete reálný svět modelovat pomocí grafu objektů a jinak pomocí relací.
Jasně, ale pak přichází otázka, jestli je vhodné reálný svět ukládat do RDB, když budu muset nutně někde udělat docela komplikovaný překlad.

Ty překlady do relační databáze bývají jednodušší, než se na první pohled zdá.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: SB 14. 09. 2018, 10:28:46
Myslel jsem, že ORM má skrývat fakt, že data jsou v relační databází a prezentovat mu je, jako by byly v nějakém úložišti objektů.

To jste myslel dobře.

Pak mi ale připadá přirozené, že programátor s objekty pracuje po jednom a explicitně přechází mezi nimi pomocí vzájemných odkazů a při tom neřeší, že každý krok znamená dotaz do databáze.

To nemusí být vůbec pravda, to záleží na provedení ORM.

Není mi moc jasné, jak by mělo ORM vypadat, aby navádělo k efektivní práci s databází a zároveň nevypadalo jako SQL přebalené do jiné syntaxe.

Pro výkonově náročné operace vytvoříte extra funkce ORM, které v DB úpravy provedou a případné změny sesynchronizují s objektovým modelem.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: SB 14. 09. 2018, 10:47:44
Mě na SQL přijde revoluční právě ten deklarativní zápis. Pošleš engine algoritmus, a on ti vyplivne výsledky. Něco podobné je možné pozorovat u LINQ, nebo GraphQL. Díky tomu se opravdu můžu oprostit od detailů práce s databází (na druhou stranu mi přijde zase škoda vzdát se pokročilejších možností) aniž by to začalo být brutálně neefektivní.
Nechápu, co tenhle odstavec měl vyjadřovat. Jestli "oprostit od detailů práce z databází" znamená, že s databází komunikuju pomocí SQL, tak to nemá s ORM nic společného. Jestli to má znamenat, že díky deklarativnímu SQL se můžu oprostit od detailů použitím ORM, tak to není pravda.

Pokud si dobře pamatuju, tak Linq bylo jen převlečené SQL, které se sice nezapisuje řetězcem, ale syntaxí C#, ale pořád popisuje tu samou strukturu tabulek v DB. To není ORM.

V některých svých hračkách, co jsem dělal jsem měl specializovaný DSLko, kterým jsem se dotazoval na objekty, a pokoušel jsem se to mé pseudoORM přinutit, aby generovalo SQLka, která bych napsal stejně. Celkem to šlo.
U DSL specializovaného pro nějakou konkrétní aplikaci jsem ochoten věřit, že to může generovat rozumné SQL. Ale pak to asi nebude obecně použitelné ORM.

Překlad mezi objekty a relacemi se dá dělat několika způsoby. Jedním z nich je mapování jednotlivých položek objektů na položky relací. Osobně považuju tento způsob za zbytečně pracný. Upřednostňuju mapování celého (celistvého!) objektu na jednu tabulku (v jednoduchém případě) až smršť tabulek (v nejhorším případě). Vedle toho několik ručně optimalizovaných hromrdných operací.

Nebo jiný způsobem. Nette/Database to dělá tak, že dokáže zoptimalizovat i ten tvůj kód. Při prvním průchodu to provede všechny dotazy, to si nakešuje, a při dalších už to načítá hromadně. Mě ten způsob není moc sympatický, ale funguje to.

I když pominu, že ten první průchod může trvat nechutně dlouho, tak jestli při dalších průchodech už nekomunikuje s databází a čte z keše, tak to bude mít minimálně dvě další nevýhody: 1. Keš může být hodně velká; 2. Bude to fungovat správně, jen když se data v databázi nebudou měnit.

Zní to jako řešení na hovno - platí, že čím víc toho čtu a držím navíc, tím je to 1. náročnější na zdroje, 2. musím řešit více synchronizace.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: bck 14. 09. 2018, 10:50:55

ORM se lidi casto uci s tim, ze jim to usnadni pristup do DB oproti SQL. Bohuzel to tak neni, ve vysledku se budete muset to SQL (a hlavne relacni mysleni, jak pise pan Stehule, ja bych k tomu dodal jeste transakcni mysleni) stejne naucit, takze ORM vam v tom uceni bude jen prekazet. Predstava, ze se snaz naucite databaze prostrednictvim ORM, pokud uz umite OOP, je proste velky omyl.

a není to náhodou chyba toho přístupu (rel+SQL)? Proč se mají lidé věčně učit myslet jinak, než jak je to od přírody dáno?
A jaké jsou výsledky:

- programátoři by měli myslet objekt-orientovaně ...vysledkem jsou procedurální programy ve kterých jsou struktury zaměněny za třídy

- programátoři by měli myslet relačně ... výsledkem jsou programy, kde se čte záznam po záznamu

Zajímavá je otázka, co se děje, když nekdo přistoupí na vaše doporučení a naučí se myslet jak požadujete a programuje v nejakém OO jazyce za použití rel.databaze s SQL. Podle mých zkušeností je nejlepší dopoledne psát ten program a odpoledne k tomu dodělat ty selecty. A samozrejmě je třeba po pracovní době přepnout do toho procedurálního myšlení, aby člověk nazapomněl vystoupit na správné stanici z tramvaje.
 
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: SB 14. 09. 2018, 11:16:43
Mě se docela líbí taková ta úplně lehká ORM jako třeba http://javalite.io/activejdbc#design-principles, akorát mě tam štve ten zápis sloupců jako string (dá se řešit tím, že si člověk napíše gettery a settery ručně).

Sloučení funkcionality modelu a úložiště do jedné třídy (zde Model, což určitě není POJO, jak tvrdí dokumentace) není dobrým nápadem - jak se řeší výměna typu databáze na pozadí či získávání objektů z více zdrojů? Mimoto rychlé čtení a zápis objektů, které se vejdou do jednoho řádku tabulky (zdejší primitivní příklad), umí každé ORM. Problém je rozklad objektu do více tabulek (což je v praxi zcela běžnou situací).
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: SB 14. 09. 2018, 11:27:14
A jak cache v aplikaci zjisti, ze data ktera si nacachovala jsou stale platna?

Samozřejmě zápis musí přistupovat přes API zahrnující tu keš. Do DB napřímo zápis jen při shozené aplikaci...

Máme takto udělané poměrně komplikované kešující ORM a funguje už 15 let OK. Samozřejmě všechno má své pro i proti.

Co když do té databáze zapisuje spousta aplikací zároveň? Pro mne je to velmi častý případ a nějaké zámky by mohly skončit i deadlockem.

Umožňuje-li DB oddělené zpracování jednotlivých transakcí, deadlock nenastane. Řežou-li se transakce přes sebe, nedá se deadlock vyloučit.
Na to se právě hodí aplikační server, který nejenom řeší nezávislost klientů na úložišti, ale může sám řešit řazení transakcí a cacheování.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: SB 14. 09. 2018, 11:41:03
ORM se lidi casto uci s tim, ze jim to usnadni pristup do DB oproti SQL. Bohuzel to tak neni, ve vysledku se budete muset to SQL (a hlavne relacni mysleni, jak pise pan Stehule, ja bych k tomu dodal jeste transakcni mysleni) stejne naucit, takze ORM vam v tom uceni bude jen prekazet. Predstava, ze se snaz naucite databaze prostrednictvim ORM, pokud uz umite OOP, je proste velky omyl.

Já se obávám, že zde mnoho přítomných stále nepochopilo, že mít objektový model a relační DB bez ORM jaksi z podstaty nejde - někak se ty relace musejí měnit na objekty a naopak, a to bez ohledu na realizaci. Ano, nemusíte používat knihovní ORM, pak si překlady musíte udělat sami, ale to je právě to ORM. A nebo se na ORM vyserete a povedete model v aplikaci v n-ticích či samostatných hodnotách, to ale nemá s OOP nic společného.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: SB 14. 09. 2018, 11:48:36
Ty překlady do relační databáze bývají jednodušší, než se na první pohled zdá.

Můj 10letý pohled mi říká něco jiného. Mapování je teoreticky popsáno, ale 1. modely v RDB k tomu mívají často daleko, 2. mapování objektu na dokument je vždy jednodušší, z objektové databáze pak bezpracné.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Pavel Stěhule 14. 09. 2018, 11:53:07
Zajímavá je otázka, co se děje, když nekdo přistoupí na vaše doporučení a naučí se myslet jak požadujete a programuje v nejakém OO jazyce za použití rel.databaze s SQL. Podle mých zkušeností je nejlepší dopoledne psát ten program a odpoledne k tomu dodělat ty selecty. A samozrejmě je třeba po pracovní době přepnout do toho procedurálního myšlení, aby člověk nazapomněl vystoupit na správné stanici z tramvaje.

Nedělejte z toho vědu - moderní OOP jazyky jsou zjednodušené na maximum, a SQL bylo navržené pro policajty. Nemám s tím jediný problém - datové modelování dělám v SQL, a prezentační vrstvu v OOP. Hledáte problém, tak kde není. Osobně neznám nikoho, kdo by s tím měl problém. Jde jen o přijmutí faktu, že s jedním přístupem nepochodíte. Jinak programuji v bashi, jinak v C, a úplně o něčem jiném jsou puppety nebo třeba Splunk. Takový je život.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: JS 14. 09. 2018, 11:55:56
Já se obávám, že zde mnoho přítomných stále nepochopilo, že mít objektový model a relační DB bez ORM jaksi z podstaty nejde - někak se ty relace musejí měnit na objekty a naopak, a to bez ohledu na realizaci. Ano, nemusíte používat knihovní ORM, pak si překlady musíte udělat sami, ale to je právě to ORM. A nebo se na ORM vyserete a povedete model v aplikaci v n-ticích či samostatných hodnotách, to ale nemá s OOP nic společného.

Jestli to nebude tim, ze proste na modelovani globalne konzistentnich dat (= splnujicich globalne nejakou podminku) neni OOP prilis vhodne.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Kit 14. 09. 2018, 12:42:17
Já se obávám, že zde mnoho přítomných stále nepochopilo, že mít objektový model a relační DB bez ORM jaksi z podstaty nejde - někak se ty relace musejí měnit na objekty a naopak, a to bez ohledu na realizaci. Ano, nemusíte používat knihovní ORM, pak si překlady musíte udělat sami, ale to je právě to ORM. A nebo se na ORM vyserete a povedete model v aplikaci v n-ticích či samostatných hodnotách, to ale nemá s OOP nic společného.

Doménové překlady řeším přímo v SQL. Je to velmi jednoduché a odpadne tím spousta zbytečného překladového kódu v PHP.
Název: Re:Maji tabulkove databaze v dnesni dobe smysl?
Přispěvatel: BoneFlute 14. 09. 2018, 17:49:13
Zní to jako řešení na hovno - platí, že čím víc toho čtu a držím navíc, tím je to 1. náročnější na zdroje, 2. musím řešit více synchronizace.
Já se obávám, že zde mnoho přítomných stále nepochopilo, že mít objektový model a relační DB bez ORM jaksi z podstaty nejde

Mě trochu mrzí, kolik energie tu lidé vypejtvají na tom, aby prohlašovali, že něco nejde.

Pak jsou jiní lidé, kteří prostě ten problém řeší a kolikrát vyřeší i velice zajímavě.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Franta Fořt 14. 09. 2018, 17:59:43
na začátku byla TABULKA
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: agent 14. 09. 2018, 21:30:08
Na začátku byl BIT  :)
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: D.A. Tiger 15. 09. 2018, 11:37:25
Na pocatku byl kremik. A je tam dodneska...
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: agent 15. 09. 2018, 12:47:53
Na počátku byl vodík.
Křemík vznikl až z vodíku.  :)
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: qwertz 15. 09. 2018, 12:48:14
Mohl bi mi autor tohoto vlákna vysvětlit jakým způsobem by chtěl ukládat data typická pro transakční databáze?

tzn. vložím záznam, který má řekněme 30 sloupců, a pak s daty rovněž pracuji na úrovni záznamů (tj, žádné OLAP kostky nebo column based transakce)
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: listoper 15. 09. 2018, 13:10:00
Mohl bi mi autor tohoto vlákna vysvětlit jakým způsobem by chtěl ukládat data typická pro transakční databáze?

tzn. vložím záznam, který má řekněme 30 sloupců, a pak s daty rovněž pracuji na úrovni záznamů (tj, žádné OLAP kostky nebo column based transakce)

Kdyz vezmu v uvahu co jsem psal kdyz jsem vlakno vytvarel:

...
Jedna z tech "jinych" veci, kterou zmini je ve strucnosti(asi od 54 minuty):
"Tabulkove databaze vznikly kvuli pomalym rotacnim diskum a v dnesni dobe kdy mame velka a rychla SSD ztraci smysl"

Mluvi o tom, ze tabulkove usporadani dat je pro programatory nepohodlne a ze stejne vetsinou z databaze data nacteme a vyrobime si z nich nejake stromy atp. se kterymi se nam dobre pracuje.

Dokonce rika: "If I were a database company right now, if I were Oracle, i'd be scared to death."

...

Stryka Boba(kdyz odhlednu od politiky) respektuju, ale tady vaham.
Nezda se mi, ze by mel pravdu, ale na druhou stranu nenachazim argument ktery by sel proti te jeho uvaze.

Tak se chci zeptat:
Maji tabulkove databaze na novych projektech smysl?
Migroval nekdo z vas existujici reseni z oraclu nebo jine tabulkove databaze na neco jineho?
Souhlasite, ze rychlost/pomalost rotacnich disku je jediny duvod proc takove databaze existuji?

Diky za nazory

Tak myslim, ze to co ja chci nebo nechci neni uplne relevantni pro tuto diskuzi.
Domnivam se, ze to co naznacuje strycek Bob je spise pouziti objektovych databazi, kde asi nema uplne smysl mluvit o sloupcich.

Takze odpoved na tvou otazku je: Ne nemohl.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: kemik 15. 09. 2018, 16:50:52
Jakou jinou databazi nez relacni by si chtel pouzit na ucetnictvi, CRM nebo ERP system? Neznam jedine ERP ktere pouziva NoSQL/dokumentovou/objektovou databazi.

Podle me ma budoucnost neco jako SAP HANA coz je in-memory databaze ktera uklada vetsinou do column store a je to vlastne databaze a aplikacni server v "jednom".

Tady je vysvetleno jak to funguje:
https://www.youtube.com/watch?v=RtaKOhsKKhM

Nevyhodou je ze cela databaze musi byt v ram, takze vysoke naklady na hw. Osobne jsem videl  BW system od Danone kde maji 1TB ram. Dovedete si predstavit kolik takovy hardware musis stat.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: dustin 15. 09. 2018, 17:41:00
kde maji 1TB ram. Dovedete si predstavit kolik takovy hardware musis stat.

Dnes už tak moc ne https://www.ebay.com/itm/HP-DL580-G7-4x-Intel-10-Core-2-4Ghz-E7-4850-1TB-Ram-8x600Gb-Sas-10K-2-5-P410i/122391688409
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: agent 15. 09. 2018, 22:53:50
Dovedl bych si představit mixovanou DB, kde si budu moct zvolit, zda do "tabulky" budu ukládat klasické řádky nebo objekty definované nějak složitěji jako strom (interně ať si to uloží jak chce).
A dotaz by buď vracel klasický plochý result (tabulku), nebo seznam objektů (nebo spíš jejich properties) filtrovaný přes klasický SQL dotaz podle jejich properties.   
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Ondrej Nemecek 16. 09. 2018, 00:20:12
Dovedl bych si představit mixovanou DB, kde si budu moct zvolit, zda do "tabulky" budu ukládat klasické řádky nebo objekty definované nějak složitěji jako strom (interně ať si to uloží jak chce).
A dotaz by buď vracel klasický plochý result (tabulku), nebo seznam objektů (nebo spíš jejich properties) filtrovaný přes klasický SQL dotaz podle jejich properties.   

https://en.wikipedia.org/wiki/Multi-model_database
https://en.wikipedia.org/wiki/Comparison_of_multi-model_databases
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Olda 17. 09. 2018, 17:38:36
Neznam jedine ERP ktere pouziva NoSQL/dokumentovou/objektovou databazi.

ABAS ERP
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: qwertz 17. 09. 2018, 17:53:40
Mohl bi mi autor tohoto vlákna vysvětlit ...

Ale fuj co jsem to napsal.  ;D ;D ;D
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Kit 17. 09. 2018, 19:26:29
Dovedl bych si představit mixovanou DB, kde si budu moct zvolit, zda do "tabulky" budu ukládat klasické řádky nebo objekty definované nějak složitěji jako strom (interně ať si to uloží jak chce).

Zkus se podívat na Redis, ten používá kolekce.

A dotaz by buď vracel klasický plochý result (tabulku), nebo seznam objektů (nebo spíš jejich properties) filtrovaný přes klasický SQL dotaz podle jejich properties.   

Ať zvolíš SQL nebo NoSQL, vždy se najde řešení. NoSQL má sice jednodušší návrh, ale o to pracnější je ukládání i dolování dat. Je to podobné, jako když z programovacího jazyka odebereš typehinty - dělat se s tím dá, ale ve složitějších aplikacích se snáze ztratíš.

Naprosto zbytečné je však ORM. Pokud chci SQL + ORM, tak vlastně chci NoSQL. Osobně však preferuji SQL, protože toho umí mnohem víc a to velice elegantně.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Akiz 17. 09. 2018, 20:22:33
Mne se libi kompromis v podobe PostgreSQL + JSONB.
Nahradi to Mongo a furt se to muze chovat jako relacni DB - tam kde to je vyhodny.

Jinak se mi zda, ze mistr narazel hlavne na to, ze je otrava a zbytecnost vytahavat data z relacni databaze pomoci nejakyho DSL, abyste z toho ziskali hash-mapu, ktera v podstate odpovida nativnim strukturam v ruznych NO / NEW SQL databazich. Nic vic, nic min.

Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: BoneFlute 17. 09. 2018, 21:51:25
ze je otrava a zbytecnost vytahavat data z relacni databaze pomoci nejakyho DSL, abyste z toho ziskali hash-mapu, ktera v podstate odpovida nativnim strukturam v ruznych NO / NEW SQL databazich.

Naopak. To DSL tam považuji za stěžejní.

Jak tu už Pavel Stěhule zmínil, SQL jsou z principu globální. Což je věc, která v mnoha případech není šikovná.

Vezměme si jako příklad ReactJS. Možnost vytvořit komponentu, která se dá importovat jako knihovna a pak ji použiju kde potřebuju je fantastická. Rozhodnutí, že data mají jeden centrální stav rozhodně schvaluju. Jenže pak potřebuješ, aby ty načítané komponenty měli vlastní SQL, kterým budou vytahovat data. Aby šli komponovat stejně snadno, jako jdou skládat ty komponenty. Což tradičním SQL dost dobře nejde, protože u něj musíš jednou napsat komplet předem. To není pohodlné. Chtělo by to aby si poskládat komponenty, a z nich si následně extrahovat jejich datové poždavky do jednoho.

Proto se buď vytvoří NoSQL, nebo ORM jako nadstavba nad SQL. Úvaha zcela logická, akorád IMHO se moc nedaří to dotáhnout do něčeho použitelného. Zkouší se GraphQL, ale zda je to ono, to se neodvažuji posoudit.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Kamil Podlešák 18. 09. 2018, 08:02:39
Zkouší se GraphQL, ale zda je to ono, to se neodvažuji posoudit.
Tohle tady nepadlo poprvé, takže raději k tomu něco napíšu.

GraphQL není nic jako "SQL pro grafové databáze" a celkově vůbec nic srovnatelného s SQL. Troufám si říci že to dokonce není ani plnohodnotný dotazovací jazyk (přestože to o sobě tvrdí v názvu).
GrahQL je jazyk umožňující popsat, jakou podmnožinu datové struktury dostane volající nazpět (pole a vazby). GraphQL sám neumožňuje popsat, jaké záznamy se vlastně vrátí (tj. filtrovat). Samozřejmě tuto funkcionalitu lze nad GraphQL postavit pomocí argumentů, ale to zcela na invenci implementátora, zda a jak něco takového udělá.

Jinými slovy: v porovnání s SQL máte v GraphQL jen prosté sloupečky a (outer) joiny. Žádný WHERE nebo ORDER (natož pak GROUP BY).
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: BoneFlute 18. 09. 2018, 13:25:01
Jinými slovy: v porovnání s SQL máte v GraphQL jen prosté sloupečky a (outer) joiny. Žádný WHERE nebo ORDER (natož pak GROUP BY).
Jsem si toho vědom. Nemám s tím problém.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: JS 18. 09. 2018, 14:27:30
GraphQL není nic jako "SQL pro grafové databáze" a celkově vůbec nic srovnatelného s SQL.

Mozna autor myslel SPARQL, to je tusim pro grafove databaze. S GraphQL se mi to taky plete.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: BoneFlute 18. 09. 2018, 14:38:22
GraphQL není nic jako "SQL pro grafové databáze" a celkově vůbec nic srovnatelného s SQL.

Mozna autor myslel SPARQL, to je tusim pro grafove databaze. S GraphQL se mi to taky plete.

Já si o GraphQL nemyslím, že by to nemělo chybu. Ale líbila se mi ta myšlenka. A to jsem komentoval.

Se SPARQL se budu muset seznámit, díky za tip :-)
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: black3r 18. 09. 2018, 22:04:23
Jinými slovy: v porovnání s SQL máte v GraphQL jen prosté sloupečky a (outer) joiny. Žádný WHERE nebo ORDER (natož pak GROUP BY).

Ano, v jazyku GraphQL pre to neexistuje specificky konstrukt.., ale v zavislosti od toho, ku akej databaze sa pripajas, si od nej mozes vediet vypytat vyfiltrovane, zoradene, alebo agregovane data...,

niektori ludia by povedali, ze v tom je krasa graphql, ze je take jednoduche.., ini ludia sa naucia graphql, lebo musia, a potom su zhrozeni, ked ho chcu pouzit s niecim inym :D
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: BoneFlute 18. 09. 2018, 22:18:05
Jinými slovy: v porovnání s SQL máte v GraphQL jen prosté sloupečky a (outer) joiny. Žádný WHERE nebo ORDER (natož pak GROUP BY).

Ano, v jazyku GraphQL pre to neexistuje specificky konstrukt.., ale v zavislosti od toho, ku akej databaze sa pripajas, si od nej mozes vediet vypytat vyfiltrovane, zoradene, alebo agregovane data...,

niektori ludia by povedali, ze v tom je krasa graphql, ze je take jednoduche.., ini ludia sa naucia graphql, lebo musia, a potom su zhrozeni, ked ho chcu pouzit s niecim inym :D

Přesně tak.

Ostatně ono GROUP BY je skvělá věc, protože relační algebra. Ale že by to bylo něco, co bych chtěl běžně dávat k dispozici jako API? To spíš ne.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Kit 19. 09. 2018, 16:34:32
Cachovanie je dobra vec na rozne ciselniky ktore sa nemenia casto. Robit 300 sql requestov v jednom http requeste aby som zobrazil jednu tabulku, to je taky php pristup, ale inak totalna kravina. Ohladom platnosti dat, kazda normalna DB vie posielat eventy.

Proč bych měl dělat 300 sql requestů v jednom http requestu, když mi stačí jeden i bez cache?
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Kit 19. 09. 2018, 16:41:52
Já se obávám, že zde mnoho přítomných stále nepochopilo, že mít objektový model a relační DB bez ORM jaksi z podstaty nejde - někak se ty relace musejí měnit na objekty a naopak, a to bez ohledu na realizaci. Ano, nemusíte používat knihovní ORM, pak si překlady musíte udělat sami, ale to je právě to ORM. A nebo se na ORM vyserete a povedete model v aplikaci v n-ticích či samostatných hodnotách, to ale nemá s OOP nic společného.

Jestli to nebude tim, ze proste na modelovani globalne konzistentnich dat (= splnujicich globalne nejakou podminku) neni OOP prilis vhodne.

OOP je na to vhodné, ale data je lepší nemít v objektech, ale v kolekcích. Tím se vyhneme zastaralému AD a místo něj s elegancí přejdeme na modrerní DM.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Ondrej Nemecek 19. 09. 2018, 23:11:39
Já se obávám, že zde mnoho přítomných stále nepochopilo, že mít objektový model a relační DB bez ORM jaksi z podstaty nejde - někak se ty relace musejí měnit na objekty a naopak, a to bez ohledu na realizaci. Ano, nemusíte používat knihovní ORM, pak si překlady musíte udělat sami, ale to je právě to ORM. A nebo se na ORM vyserete a povedete model v aplikaci v n-ticích či samostatných hodnotách, to ale nemá s OOP nic společného.

Jestli to nebude tim, ze proste na modelovani globalne konzistentnich dat (= splnujicich globalne nejakou podminku) neni OOP prilis vhodne.

OOP je na to vhodné, ale data je lepší nemít v objektech, ale v kolekcích. Tím se vyhneme zastaralému AD a místo něj s elegancí přejdeme na modrerní DM.

Tuším nějakou Kitovinu :-) Ale můžeš to trochu rozvést? A nevím co je DM, AD.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Kit 20. 09. 2018, 02:40:12
OOP je na to vhodné, ale data je lepší nemít v objektech, ale v kolekcích. Tím se vyhneme zastaralému AD a místo něj s elegancí přejdeme na modrerní DM.
Tuším nějakou Kitovinu :-) Ale můžeš to trochu rozvést? A nevím co je DM, AD.

Sorry mělo to být AR jako Active Record vs. Data Mapper.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: SB 20. 09. 2018, 08:26:50
Jestli to nebude tim, ze proste na modelovani globalne konzistentnich dat (= splnujicich globalne nejakou podminku) neni OOP prilis vhodne.

Vysvětlete prosím to "globálně konzistentní", nikdy jsem toto spojení neslyšel, mimoto vůbec netuším, co by to mohlo znamenat.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: SB 20. 09. 2018, 08:34:36
OOP je na to vhodné, ale data je lepší nemít v objektech, ale v kolekcích. Tím se vyhneme zastaralému AD a místo něj s elegancí přejdeme na modrerní DM.

Active record je pouze prostředkem uvnitř ORM, samotné ORM jej nevyžaduje. Mimoto objektový model nijak neovlivňuje.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Kit 20. 09. 2018, 09:44:56
OOP je na to vhodné, ale data je lepší nemít v objektech, ale v kolekcích. Tím se vyhneme zastaralému AD a místo něj s elegancí přejdeme na modrerní DM.
Active record je pouze prostředkem uvnitř ORM, samotné ORM jej nevyžaduje. Mimoto objektový model nijak neovlivňuje.

Co s tím má společného ORM?
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: BoneFlute 20. 09. 2018, 16:29:35
OOP je na to vhodné, ale data je lepší nemít v objektech, ale v kolekcích. Tím se vyhneme zastaralému AD a místo něj s elegancí přejdeme na modrerní DM.
Active record je pouze prostředkem uvnitř ORM, samotné ORM jej nevyžaduje. Mimoto objektový model nijak neovlivňuje.

Co s tím má společného ORM?
Co má s OOP společného mít data v kolekcích a ne v objektech (sic!) a ActiveRecord či DataMapper? Zřejmě jen jel volnou asociaci, stejně jako ty.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Kit 20. 09. 2018, 18:45:07
OOP je na to vhodné, ale data je lepší nemít v objektech, ale v kolekcích. Tím se vyhneme zastaralému AD a místo něj s elegancí přejdeme na modrerní DM.
Active record je pouze prostředkem uvnitř ORM, samotné ORM jej nevyžaduje. Mimoto objektový model nijak neovlivňuje.
Co s tím má společného ORM?
Co má s OOP společného mít data v kolekcích a ne v objektech (sic!) a ActiveRecord či DataMapper? Zřejmě jen jel volnou asociaci, stejně jako ty.

Když je to DataMapper, tak přece nemapuji objekty, ale data.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: JS 20. 09. 2018, 19:24:02
Jestli to nebude tim, ze proste na modelovani globalne konzistentnich dat (= splnujicich globalne nejakou podminku) neni OOP prilis vhodne.

Vysvětlete prosím to "globálně konzistentní", nikdy jsem toto spojení neslyšel, mimoto vůbec netuším, co by to mohlo znamenat.

Znamena to to, co je tam napsano. :) (Pro informaci: Ze je neco v zavorce neznamena, ze se to nema cist.) Pokud s temi "objekty" chceme pracovat jako s kolekci, ktera splnuje nejakou podminku, napriklad unikatnost klicu. Nebo chceme zarucit ACID vlastnosti pro transakce. Relace v databazich proste neni "jen" soubor objektu.

Alan Kay si predstavoval OOP analogicky biologickym systemum, ze jde o vzajemnou komunikaci soucasti, ktere si jinak hledi sveho. Ty typicky takove globalni vlastnosti nesplnuji (vyjimkou jsou fyzikalni zakony zachovani).
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: BrainLess 20. 09. 2018, 20:58:53
Ahoj,
nedavno(a dneska znova, abych to nasel) jsem koukal na povidani strycka Boba o S.O.L.I.D. principles:
https://www.youtube.com/watch?v=t86v3N4OshQ (https://www.youtube.com/watch?v=t86v3N4OshQ)

Vetsinu casu povida o jinych vecech, ale poutave takze dopurucuji.

Jedna z tech "jinych" veci, kterou zmini je ve strucnosti(asi od 54 minuty):
"Tabulkove databaze vznikly kvuli pomalym rotacnim diskum a v dnesni dobe kdy mame velka a rychla SSD ztraci smysl"

Mluvi o tom, ze tabulkove usporadani dat je pro programatory nepohodlne a ze stejne vetsinou z databaze data nacteme a vyrobime si z nich nejake stromy atp. se kterymi se nam dobre pracuje.

Dokonce rika: "If I were a database company right now, if I were Oracle, i'd be scared to death."

To video je 3 roky stare a ja porad vidim jak se na novych projektech Oracle nasazuje.
Vim, ze minimalne v korporatech se tabulkove databaze udrzi jeste dlouho.
Stryka Boba(kdyz odhlednu od politiky) respektuju, ale tady vaham.
Nezda se mi, ze by mel pravdu, ale na druhou stranu nenachazim argument ktery by sel proti te jeho uvaze.

Tak se chci zeptat:
Maji tabulkove databaze na novych projektech smysl?
Migroval nekdo z vas existujici reseni z oraclu nebo jine tabulkove databaze na neco jineho?
Souhlasite, ze rychlost/pomalost rotacnich disku je jediny duvod proc takove databaze existuji?

Diky za nazory
Kdyz potrebujete vykopat opravdu velkou diru je bagr fajn, kdyz chcete vyhloubit jamku pro jeden stromek je preprava bagru na zahradu a hloubeni trosku neefektivni. ;-) Navic Oracle je napriklad hodne robustni software na urcite ukoly, ostatni SQL databaze at si rikda kdo chce co chce se mu proste nevyrovnaji, na druhou stranu si Oracle nechava brutalne zaplatit.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Ondrej Nemecek 20. 09. 2018, 22:31:02
OOP je na to vhodné, ale data je lepší nemít v objektech, ale v kolekcích. Tím se vyhneme zastaralému AD a místo něj s elegancí přejdeme na modrerní DM.
Active record je pouze prostředkem uvnitř ORM, samotné ORM jej nevyžaduje. Mimoto objektový model nijak neovlivňuje.
Co s tím má společného ORM?
Co má s OOP společného mít data v kolekcích a ne v objektech (sic!) a ActiveRecord či DataMapper? Zřejmě jen jel volnou asociaci, stejně jako ty.

Když je to DataMapper, tak přece nemapuji objekty, ale data.

ActiveRecord vs. Data Mapper se liší v tom, kde je zapouzdřená kompetence za persistenci - zda spolu s daty (v objektu reprezentujícím data z business domény) anebo bokem (v data mapperu). Některá ORM umožňují použít oba přístupy (vybrat si, kterému dám přednost). Viz.:

Citace
Data mapper Podle tohoto vzoru neobsahuje doménový objekt žádné CRUD nebo vyhledávací operace a o vytváření, úpravu a mazání doménových objektů z databáze se stará oddělený (mapovací) objekt. Doménový objekt je tedy zcela nezávislý na databázi. Zatímco mapovací objekt má přístup jak k doménovému objektu, tak k databázovému systému. Výhodou tohoto vzoru je právě nezávislost doménového objektu na datovém modelu, kdy je veškerá zodpovědnost za persistenci přesunuta na mapovací objekt.

https://cs.wikipedia.org/wiki/Data_Mapper

Ve výsledku mi Tvůj příspěvek nedává moc smysl (netuším, jak jsi to myslel).
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Kit 20. 09. 2018, 23:26:18
Citace
Data mapper Podle tohoto vzoru neobsahuje doménový objekt žádné CRUD nebo vyhledávací operace a o vytváření, úpravu a mazání doménových objektů z databáze se stará oddělený (mapovací) objekt. Doménový objekt je tedy zcela nezávislý na databázi. Zatímco mapovací objekt má přístup jak k doménovému objektu, tak k databázovému systému. Výhodou tohoto vzoru je právě nezávislost doménového objektu na datovém modelu, kdy je veškerá zodpovědnost za persistenci přesunuta na mapovací objekt.

https://cs.wikipedia.org/wiki/Data_Mapper

Ve výsledku mi Tvůj příspěvek nedává moc smysl (netuším, jak jsi to myslel).

Doménovým objektem je jednoduše kolekce.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: BoneFlute 21. 09. 2018, 00:08:48
Citace
Data mapper Podle tohoto vzoru neobsahuje doménový objekt žádné CRUD nebo vyhledávací operace a o vytváření, úpravu a mazání doménových objektů z databáze se stará oddělený (mapovací) objekt. Doménový objekt je tedy zcela nezávislý na databázi. Zatímco mapovací objekt má přístup jak k doménovému objektu, tak k databázovému systému. Výhodou tohoto vzoru je právě nezávislost doménového objektu na datovém modelu, kdy je veškerá zodpovědnost za persistenci přesunuta na mapovací objekt.

https://cs.wikipedia.org/wiki/Data_Mapper

Ve výsledku mi Tvůj příspěvek nedává moc smysl (netuším, jak jsi to myslel).

Doménovým objektem je jednoduše kolekce.
Přičemž kolekce není objektem? DataMapper nemapuje objekty? ActiveRecord nemapuje objekty? Problém ArctiveRecordu přeci není v mapování objektů, či kolekcí. A výhoda DataMapperu není v tom, že je to modernější. Věci mají svůj důvod a význam.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: oss 21. 09. 2018, 07:40:39
Citace
Data mapper Podle tohoto vzoru neobsahuje doménový objekt žádné CRUD nebo vyhledávací operace a o vytváření, úpravu a mazání doménových objektů z databáze se stará oddělený (mapovací) objekt. Doménový objekt je tedy zcela nezávislý na databázi. Zatímco mapovací objekt má přístup jak k doménovému objektu, tak k databázovému systému. Výhodou tohoto vzoru je právě nezávislost doménového objektu na datovém modelu, kdy je veškerá zodpovědnost za persistenci přesunuta na mapovací objekt.

https://cs.wikipedia.org/wiki/Data_Mapper

Ve výsledku mi Tvůj příspěvek nedává moc smysl (netuším, jak jsi to myslel).

Doménovým objektem je jednoduše kolekce.

Nechcem utocit, ale odkedy sledujem diskusie tu, tak sa vyjadrujes ku vstekym veciam ohladom vzorov, OOP, domeny.
Dam ti radu, nerob to!
Dokazujes len, ze o tom nic nevies, ani o OOP, ani o inych veciach, a vyhlasit hento o DataMappere... to prosto uz nejde.

Podla nazorov predpokladam, ze si junior, co skoncil pred rokom strednu a teraz robis na svojom prvom sukromnom PHP projekte, dobre, mas sa este co ucit, ale na rady by si este mal nabrat nejake skusenosti.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Kit 21. 09. 2018, 09:55:35
Doménovým objektem je jednoduše kolekce.
Přičemž kolekce není objektem? DataMapper nemapuje objekty? ActiveRecord nemapuje objekty? Problém ArctiveRecordu přeci není v mapování objektů, či kolekcí. A výhoda DataMapperu není v tom, že je to modernější. Věci mají svůj důvod a význam.

Však jsem psal, že doménovým objektem je kolekce. Doménový objekt je také objektem.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: SB 21. 09. 2018, 12:06:20
OOP je na to vhodné, ale data je lepší nemít v objektech, ale v kolekcích. Tím se vyhneme zastaralému AD a místo něj s elegancí přejdeme na modrerní DM.
Active record je pouze prostředkem uvnitř ORM, samotné ORM jej nevyžaduje. Mimoto objektový model nijak neovlivňuje.

Co s tím má společného ORM?

OM (object model) a RDB.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: SB 21. 09. 2018, 12:10:13
Když je to DataMapper, tak přece nemapuji objekty, ale data.

Samozřejmě, protože RDB objekty neumí, takže to chování musíte zadrátovat odděleně do aplikace. Objekt se pak při rekonstrukci v aplikaci skládá z toho chování z aplikace a těch dat namapovaných z RDB.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: SB 21. 09. 2018, 12:35:28
Jestli to nebude tim, ze proste na modelovani globalne konzistentnich dat (= splnujicich globalne nejakou podminku) neni OOP prilis vhodne.

Vysvětlete prosím to "globálně konzistentní", nikdy jsem toto spojení neslyšel, mimoto vůbec netuším, co by to mohlo znamenat.

Znamena to to, co je tam napsano. :) (Pro informaci: Ze je neco v zavorce neznamena, ze se to nema cist.) Pokud s temi "objekty" chceme pracovat jako s kolekci, ktera splnuje nejakou podminku, napriklad unikatnost klicu. Nebo chceme zarucit ACID vlastnosti pro transakce. Relace v databazich proste neni "jen" soubor objektu.

Alan Kay si predstavoval OOP analogicky biologickym systemum, ze jde o vzajemnou komunikaci soucasti, ktere si jinak hledi sveho. Ty typicky takove globalni vlastnosti nesplnuji (vyjimkou jsou fyzikalni zakony zachovani).

Aha, takže jste měl na mysli globálně unikátní, to je ale váš vyjadřovací problém.

Naopak - jednou z vlastností OOP je, že objekty jsou identifikovány nikoli identifikátorem, ale svou existencí (stejně jako ve skutečném světě; narozdíl od RDB, kde je identita dána klíčem, který je součástí dat), pochopitelně v rámci své domény (světa). Při přechodech mezi doménami je třeba jejich identitu přeložit. Nejjednodušší je k tomu nějaký jedinečný identifikátor, který je součástí obsahu, protože bývá součástí i skutečných objektů (např. číslo dokladu), ale může to být také pouze vnitřní značení mapovačů mapujících mezi několika objektovými systémy, které samy o sobě identifikátor nepotřebují.

Měl jste asi na mysli tabulky, ne relace. Ne, tabulka v RDB opravdu není souborem objektů, ty je třeba z několika hromad (tabulek) vyhrabat a poskládat (a to nemluvím o chybějícím chování). Opravdu bych zde podobnost nehledal.

Pochopitelně že splňují - právě onu identitu.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: SB 21. 09. 2018, 12:51:28
ActiveRecord vs. Data Mapper se liší v tom, kde je zapouzdřená kompetence za persistenci - zda spolu s daty (v objektu reprezentujícím data z business domény) anebo bokem (v data mapperu). Některá ORM umožňují použít oba přístupy (vybrat si, kterému dám přednost). Viz.:

Když se dívám na definici Active Recordu od Fowlera (https://www.martinfowler.com/eaaCatalog/activeRecord.html), musím se omluvit - myslel jsem, že je použit pouze jako mechanismus pro podržení mapované relace z RDB pro potřeby jednoduchého zápisu (v podstatě kopie relace), tj. objekt pro potřeby mapovače. Je to mnohem horší, má to být přímo doménový objekt. To je samo o sobě nesmysl, protože 1. neodděluje OM od RDB, 2. umožňuje mapování pouze primitivních objektů, které se vejdou do 1 relace (v praxi ne moc časté). Nenapadlo mě, že by se to někdo vůbec pokusil použít. Moje chyba.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Kit 21. 09. 2018, 12:55:21
Když je to DataMapper, tak přece nemapuji objekty, ale data.
Samozřejmě, protože RDB objekty neumí, takže to chování musíte zadrátovat odděleně do aplikace. Objekt se pak při rekonstrukci v aplikaci skládá z toho chování z aplikace a těch dat namapovaných z RDB.

RDB objekty umí - zvládá data včetně chování, s určitými omezeními. Jen se to musí umět. Cílem je rozdělit kompetence mezi RDB a jeho aplikace tak, aby celek byl robustní a konzistentní. Přidání další aplikace do takového systému pak nepředstavuje významný problém.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Kit 21. 09. 2018, 13:03:47
ActiveRecord vs. Data Mapper se liší v tom, kde je zapouzdřená kompetence za persistenci - zda spolu s daty (v objektu reprezentujícím data z business domény) anebo bokem (v data mapperu). Některá ORM umožňují použít oba přístupy (vybrat si, kterému dám přednost). Viz.:
Když se dívám na definici Active Recordu od Fowlera (https://www.martinfowler.com/eaaCatalog/activeRecord.html), musím se omluvit - myslel jsem, že je použit pouze jako mechanismus pro podržení mapované relace z RDB pro potřeby jednoduchého zápisu (v podstatě kopie relace), tj. objekt pro potřeby mapovače. Je to mnohem horší, má to být přímo doménový objekt. To je samo o sobě nesmysl, protože 1. neodděluje OM od RDB, 2. umožňuje mapování pouze primitivních objektů, které se vejdou do 1 relace (v praxi ne moc časté). Nenapadlo mě, že by se to někdo vůbec pokusil použít. Moje chyba.

Není to tak špatné, jak to na první pohled vypadá.
1. Není nutné oddělovat OM od RDB
2. Umožňuje to mapování nejen primitivních, ale i komplexních objektů, které se skládají z mnoha relací
3. Co třeba strom?
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: SB 21. 09. 2018, 13:07:36
Doménovým objektem je jednoduše kolekce.

Nevím, jak to souvisí s Data Mapperem, ale kolekce vůbec nemusí být doménovým objektem. Obecně (bez ohledu na skutečnost, zda má objekt položky pojmenované (běžný objekt) či indexované (seznam)) platí, že doménový objekt je ten, který patří do domény, neboli modelovaného problému, pak je obvykle i ukládaný. Naopak při výpočtech v doméně se používá mnoho objektů (včetně seznamů), které do domény nepatří a po dokončení výpočtu zaniknou.
Seznam je mimochodem strukturou, kterou RDB neumí samostatně uložit (RDB koneckonců neumí často samostatně uložit ani objekt), což je jedním z problémů, které řeší ORM.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: SB 21. 09. 2018, 13:14:59
RDB objekty umí - zvládá data včetně chování, s určitými omezeními. Jen se to musí umět. Cílem je rozdělit kompetence mezi RDB a jeho aplikace tak, aby celek byl robustní a konzistentní. Přidání další aplikace do takového systému pak nepředstavuje významný problém.

Tak jasně, i metody objektu jde strčit třeba do jednoho řetězce nebo blobu v relaci. Ale pořád to neumožňuje pracovat s objekty v DB stejně jako v aplikaci (to by měly umět ODB, např. Gemstone). Jestli máte na mysli PL/SQL, tak to se ale nebavíme o OOP.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: SB 21. 09. 2018, 13:34:17
Není to tak špatné, jak to na první pohled vypadá.
1. Není nutné oddělovat OM od RDB
2. Umožňuje to mapování nejen primitivních, ale i komplexních objektů, které se skládají z mnoha relací
3. Co třeba strom?

1. Není, ale pak vám struktura RDB a jakékoliv její změny přeteče do domény v aplikaci s následnou nutností (hluboce) upravovat a výpočty podřizovat její struktuře. O konečné pro výměnu persistentní vrstvy (která už není vrstvou, ale součástí), tj. nejen např. více zdrojů, webovou službu místo DB, nebo jiný typ DB, ale dokonce jen jiná RDB(!!!), se doufám nemusím rozepisovat. Tento přístup jsem zažil v jedné nejmenované, velké, české firmě, tam to teda ještě dotáhli do extrému tak, že Active Record byl pouhým recordem (tj. holá data bez chování, v lepším případě se používal anemický datový model, v horším se to do recordu praskalo pokaždé extra) a komboboxy v GUI si načítaly data pomocí SQL z RDB.
Ne, tohle není ani OOP, ani koncepční přístup (přestože si to mnoho lidí z IT myslí).

2. Jak, když AR je (z definice) jedna relace na jeden (rádoby)doménový objekt???

3. Co je se stromem?
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Kit 21. 09. 2018, 13:39:02
Doménovým objektem je jednoduše kolekce.
Nevím, jak to souvisí s Data Mapperem, ale kolekce vůbec nemusí být doménovým objektem. Obecně (bez ohledu na skutečnost, zda má objekt položky pojmenované (běžný objekt) či indexované (seznam)) platí, že doménový objekt je ten, který patří do domény, neboli modelovaného problému, pak je obvykle i ukládaný. Naopak při výpočtech v doméně se používá mnoho objektů (včetně seznamů), které do domény nepatří a po dokončení výpočtu zaniknou.
Seznam je mimochodem strukturou, kterou RDB neumí samostatně uložit (RDB koneckonců neumí často samostatně uložit ani objekt), což je jedním z problémů, které řeší ORM.

Vytrženo z kontextu.

Doménovým objektem může být i kolekce, proto ji k tomuto účelu používám. Jen se to některým vývojářům nelíbí, protože to nemá gettery a settery, které by však byly v uvedeném případu zbytečné a komplikující.

Odkdy má seznam indexované položky? U seznamu je definováno pouze jejich pořadí. Používání indexů v souvislosti se seznamy je cestou do pekel.

Seznam ukládám přes jeden prepared statement, za kterým hrnu data. To jsou 4 řádky mého ORM. Ovšem ukládání seznamů do databáze není zas tak časté, jak by se mohlo zdát. Kolekce i objekty je možné snadno uložit do RDB, pokud jsou serializovány.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Kit 21. 09. 2018, 13:49:22
Není to tak špatné, jak to na první pohled vypadá.
1. Není nutné oddělovat OM od RDB
2. Umožňuje to mapování nejen primitivních, ale i komplexních objektů, které se skládají z mnoha relací
3. Co třeba strom?

1. Není, ale pak vám struktura RDB a jakékoliv její změny přeteče do domény v aplikaci s následnou nutností (hluboce) upravovat a výpočty podřizovat její struktuře. O konečné pro výměnu persistentní vrstvy (která už není vrstvou, ale součástí), tj. nejen např. více zdrojů, webovou službu místo DB, nebo jiný typ DB, ale dokonce jen jiná RDB(!!!), se doufám nemusím rozepisovat. Tento přístup jsem zažil v jedné nejmenované, velké, české firmě, tam to teda ještě dotáhli do extrému tak, že Active Record byl pouhým recordem (tj. holá data bez chování, v lepším případě se používal anemický datový model, v horším se to do recordu praskalo pokaždé extra) a komboboxy v GUI si načítaly data pomocí SQL z RDB.
Ne, tohle není ani OOP, ani koncepční přístup (přestože si to mnoho lidí z IT myslí).

2. Jak, když AR je (z definice) jedna relace na jeden (rádoby)doménový objekt???

3. Co je se stromem?

1. Bez problémů měním strukturu RDB, aniž bych musel upravovat aplikaci. Dobře napsaná aplikace se tomu sama přizpůsobí.
2+3. Právě ten strom je ukázkou jednoho objektu, který se může skládat z mnoha relací.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: JS 21. 09. 2018, 13:50:07
Aha, takže jste měl na mysli globálně unikátní, to je ale váš vyjadřovací problém.

Nemel jsem na mysli jen tohle, to je jeden z prikladu takove vlastnosti. Rozmysli si, jestli chces nejdriv pochopit co rikam nebo to rozporovat.

Jiny priklad je treba globalni omezeni nejakeho zdroje, treba pocet vlaken nebo file descriptoru. V OOP se tohle modeluje blbe, protoze objektum obecne nemluvime do toho, jak jsou vnitrne implementovane.

Citace
Měl jste asi na mysli tabulky, ne relace.

Ne, mel jsem na mysli relace, z relacniho modelu dat. Jestli je relace reprezentovana jednou nebo vice tabulkami (ktere se spoji) je jedno.

Jde o to, ze v OOP se objekty o ostatni objekty nemusi (a nemaji) starat, ale v relacnim modelu dat je schema globalni. Takze globalni podminky na vsechny objekty (urciteho druhu) se v OOP vynucuji obtizne, kdezto v relacnim modelu je to pomerne snadne. Ovsem za cenu, totiz ze se porusi encapsulation - schema musi kompletne videt do vsech tabulek.

Je treba si uvedomit, ze oboji ma svoje vyhody a nevyhody. Ale plynou z toho problemy pri prechodu od jednoho modelu ke druhemu. Ostatne, myslim, ze tenhle clanek uz vsechny tyto problemy (a mnohe dalsi) popsal: http://blogs.tedneward.com/post/the-vietnam-of-computer-science/ (http://blogs.tedneward.com/post/the-vietnam-of-computer-science/)
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: SB 24. 09. 2018, 10:14:01
Doménovým objektem je jednoduše kolekce.
Nevím, jak to souvisí s Data Mapperem...

...Doménovým objektem může být i kolekce, proto ji k tomuto účelu používám. Jen se to některým vývojářům nelíbí, protože to nemá gettery a settery, které by však byly v uvedeném případu zbytečné a komplikující.

Nelíbí se mi ten otočený způsob uvažování. Lépe: Dom. objektem může být jakýkoliv objekt, takže i seznam.
Pravidlo o zapouzdření platí (opět) pro jakýkoliv objekt, tedy i pro seznam. Seznam bez zapouzdření je tedy z pohledu OOP chybou.

Odkdy má seznam indexované položky? U seznamu je definováno pouze jejich pořadí. Používání indexů v souvislosti se seznamy je cestou do pekel.

Pochopitelně se tím myslí vnitřní reprezentace, čímž jsem chtěl ukázat, že seznam není ničím jiným než objektem, který má místo pojmenovaných položek číslované položky, a to bez ohledu na to, zda je s pořadím, bez pořadí, s řazením či jiný.

Seznam ukládám přes jeden prepared statement, za kterým hrnu data. To jsou 4 řádky mého ORM. Ovšem ukládání seznamů do databáze není zas tak časté, jak by se mohlo zdát. Kolekce i objekty je možné snadno uložit do RDB, pokud jsou serializovány.

Vizte výše - seznam je objekt jako každý jiný, proto by se mechanismus pro vyvolání uložení neměl nijak lišit. Samozřejmě musí mít identitu mapovatelnou do RDB (nějaký jedinečný identifikátor). Jinou otázkou je rozklad seznamu do tabulek na straně RDB, to je dost jiná liga, obzvláště u heterogenních seznamů. Zrovna serializace (předpokládám binární) způsobuje nemožnost deserializace při změně struktury v doméně a nemožnost vyhledávání v RDB, takže nic moc.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: SB 24. 09. 2018, 10:21:41
1. Bez problémů měním strukturu RDB, aniž bych musel upravovat aplikaci. Dobře napsaná aplikace se tomu sama přizpůsobí.
2+3. Právě ten strom je ukázkou jednoho objektu, který se může skládat z mnoha relací.

1. Jak to přizpůsobení probíhá? Je tam nějaký adaptivní mechanismus nebo umělá inteligence?
2., 3. Nenacházím žádnou souvislost mezi strukturou stromu a relace, vysvětlete to prosím.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: SB 24. 09. 2018, 10:35:43
Aha, takže jste měl na mysli globálně unikátní, to je ale váš vyjadřovací problém.

Nemel jsem na mysli jen tohle, to je jeden z prikladu takove vlastnosti. Rozmysli si, jestli chces nejdriv pochopit co rikam nebo to rozporovat.

Jiny priklad je treba globalni omezeni nejakeho zdroje, treba pocet vlaken nebo file descriptoru. V OOP se tohle modeluje blbe, protoze objektum obecne nemluvime do toho, jak jsou vnitrne implementovane.

Asi už vím, co myslíte. Globální konzistencí myslíte správnost dat jako celku přes mnoho systémů. To jo, ale s tím nemá OOP nic společného, to platí pro všechna uspořádání dat.

Toto moc nechápu - máte na mysli použití např. poolů?

A pozor na to vykání.

Citace
Měl jste asi na mysli tabulky, ne relace.

...Jde o to, ze v OOP se objekty o ostatni objekty nemusi (a nemaji) starat, ale v relacnim modelu dat je schema globalni. Takze globalni podminky na vsechny objekty (urciteho druhu) se v OOP vynucuji obtizne, kdezto v relacnim modelu je to pomerne snadne. Ovsem za cenu, totiz ze se porusi encapsulation - schema musi kompletne videt do vsech tabulek.

Je treba si uvedomit, ze oboji ma svoje vyhody a nevyhody. Ale plynou z toho problemy pri prechodu od jednoho modelu ke druhemu. Ostatne, myslim, ze tenhle clanek uz vsechny tyto problemy (a mnohe dalsi) popsal: http://blogs.tedneward.com/post/the-vietnam-of-computer-science/ (http://blogs.tedneward.com/post/the-vietnam-of-computer-science/)

Tady nějak vůbec tomu dostavci - proč chcete mít všechny objekty stejné? Jak se schema kouká do tabulek???

Na Vietnam kouknu.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Kit 24. 09. 2018, 11:13:23
Doménovým objektem je jednoduše kolekce.
Nevím, jak to souvisí s Data Mapperem...

...Doménovým objektem může být i kolekce, proto ji k tomuto účelu používám. Jen se to některým vývojářům nelíbí, protože to nemá gettery a settery, které by však byly v uvedeném případu zbytečné a komplikující.

Nelíbí se mi ten otočený způsob uvažování. Lépe: Dom. objektem může být jakýkoliv objekt, takže i seznam.
Pravidlo o zapouzdření platí (opět) pro jakýkoliv objekt, tedy i pro seznam. Seznam bez zapouzdření je tedy z pohledu OOP chybou.

Takže jinak: Jako doménový objekt používám kolekci, která již má své zapouzdření.

Odkdy má seznam indexované položky? U seznamu je definováno pouze jejich pořadí. Používání indexů v souvislosti se seznamy je cestou do pekel.
Pochopitelně se tím myslí vnitřní reprezentace, čímž jsem chtěl ukázat, že seznam není ničím jiným než objektem, který má místo pojmenovaných položek číslované položky, a to bez ohledu na to, zda je s pořadím, bez pořadí, s řazením či jiný.

O vnitřní reprezentaci se nebavíme, nehledě k tomu, že vnitřní reprezentace seznamu obvykle ani indexy nemají. Indexy u seznamu ani nejsou potřebné, resp. jejich používání porušuje zapouzdření.

Seznam ukládám přes jeden prepared statement, za kterým hrnu data. To jsou 4 řádky mého ORM. Ovšem ukládání seznamů do databáze není zas tak časté, jak by se mohlo zdát. Kolekce i objekty je možné snadno uložit do RDB, pokud jsou serializovány.

Vizte výše - seznam je objekt jako každý jiný, proto by se mechanismus pro vyvolání uložení neměl nijak lišit. Samozřejmě musí mít identitu mapovatelnou do RDB (nějaký jedinečný identifikátor). Jinou otázkou je rozklad seznamu do tabulek na straně RDB, to je dost jiná liga, obzvláště u heterogenních seznamů. Zrovna serializace (předpokládám binární) způsobuje nemožnost deserializace při změně struktury v doméně a nemožnost vyhledávání v RDB, takže nic moc.

Mezi OOP a RDB musí být vložena mezivrstva. Ta může být v aplikaci nebo v databázi, případně vhodně rozdělena mezi ně tak, aby bylo co nejjednodušší a přitom robustní API. Pro umístění v databázi hovoří zejména fakt, že už má svou cache, takže není třeba dělat v OOP nějaké náhražky.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Kit 24. 09. 2018, 11:27:51
1. Bez problémů měním strukturu RDB, aniž bych musel upravovat aplikaci. Dobře napsaná aplikace se tomu sama přizpůsobí.
2+3. Právě ten strom je ukázkou jednoho objektu, který se může skládat z mnoha relací.

1. Jak to přizpůsobení probíhá? Je tam nějaký adaptivní mechanismus nebo umělá inteligence?
2., 3. Nenacházím žádnou souvislost mezi strukturou stromu a relace, vysvětlete to prosím.

Adaptivní mechanismus je jednoduchý: Aplikace se nespoléhá na to, že dostane co chce, ale analyzuje výsledek z RDB a ten zpracuje. Vazba je tedy adaptivní, opírá se o jednoduché a neměnné API.

Každý element stromu je relací. Strom je kolekcí, tedy i objektem.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: SB 24. 09. 2018, 15:34:29
O vnitřní reprezentaci se nebavíme, nehledě k tomu, že vnitřní reprezentace seznamu obvykle ani indexy nemají. Indexy u seznamu ani nejsou potřebné, resp. jejich používání porušuje zapouzdření.

Naopak, pole je pro implementaci seznamu výhodné, koneckonců když se implementace přesune níže do primitiv, stejně z toho nejspíš vyjde pole.
Když je to vnitřní reprezentace, tak se indexy ven nedostanou.

Mezi OOP a RDB musí být vložena mezivrstva. Ta může být v aplikaci nebo v databázi, případně vhodně rozdělena mezi ně tak, aby bylo co nejjednodušší a přitom robustní API. Pro umístění v databázi hovoří zejména fakt, že už má svou cache, takže není třeba dělat v OOP nějaké náhražky.

Ona mezivrstva s mapovačem musí být stejně v aplikaci, protože jediná z těch 2 umí manipulovat s objekty i n-ticemi, pro RDB jsou objekty jaksi cizí, takže nemá jak ony objekty poskytovat (třeba v JSONech nebo já nevím v čem).
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: SB 24. 09. 2018, 15:39:12
Adaptivní mechanismus je jednoduchý: Aplikace se nespoléhá na to, že dostane co chce, ale analyzuje výsledek z RDB a ten zpracuje. Vazba je tedy adaptivní, opírá se o jednoduché a neměnné API.

Takže tam už nějaké mapování je, není to jednoduchá kopie 1:1.

Každý element stromu je relací. Strom je kolekcí, tedy i objektem.

Supr, a teď mi popište, jak se takový strom prochází.
Název: Re:Mají tabulkové databáze v dnešní době smysl?
Přispěvatel: Kit 24. 09. 2018, 19:14:39
O vnitřní reprezentaci se nebavíme, nehledě k tomu, že vnitřní reprezentace seznamu obvykle ani indexy nemají. Indexy u seznamu ani nejsou potřebné, resp. jejich používání porušuje zapouzdření.

Naopak, pole je pro implementaci seznamu výhodné, koneckonců když se implementace přesune níže do primitiv, stejně z toho nejspíš vyjde pole.
Když je to vnitřní reprezentace, tak se indexy ven nedostanou.

U Lispu je to skutečně seznam, Java má LinkedList. Ovšem vnitřní reprezentace kolekcí nás v aplikaci nezajímá. Prostě jen vybereme tu výhodnější.

Mezi OOP a RDB musí být vložena mezivrstva. Ta může být v aplikaci nebo v databázi, případně vhodně rozdělena mezi ně tak, aby bylo co nejjednodušší a přitom robustní API. Pro umístění v databázi hovoří zejména fakt, že už má svou cache, takže není třeba dělat v OOP nějaké náhražky.
Ona mezivrstva s mapovačem musí být stejně v aplikaci, protože jediná z těch 2 umí manipulovat s objekty i n-ticemi, pro RDB jsou objekty jaksi cizí, takže nemá jak ony objekty poskytovat (třeba v JSONech nebo já nevím v čem).

Vzhledem k tomu, že RDB umí poskytovat objekty...

Adaptivní mechanismus je jednoduchý: Aplikace se nespoléhá na to, že dostane co chce, ale analyzuje výsledek z RDB a ten zpracuje. Vazba je tedy adaptivní, opírá se o jednoduché a neměnné API.

Takže tam už nějaké mapování je, není to jednoduchá kopie 1:1.

Mapování přece nepopírám. Jen je tak jednoduché, že skoro nestojí za řeč. Mapper ty databázové sloupce ani nepotřebuje znát.

Každý element stromu je relací. Strom je kolekcí, tedy i objektem.
Supr, a teď mi popište, jak se takový strom prochází.

Rekurzí.