Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - BoneFlute

Stran: 1 ... 20 21 [22] 23 24 ... 133
316
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 01. 07. 2021, 19:29:44 »
Nerozumím. Odporuješ si. Já tvrdím, že bych dávkové příkazy honil přes ORM, a ty namítneš, že "Když ORM, tak kompletně, přijmout jeho výhody a nevýhody. Data pak jedině přes aplikaci, nikdy už ne přímo z DB."?

Reagoval jsem na druhou větu: >>Pod kapotu jdu v případě, kdy potřebuju optimalizovat na krev, ne v případě kdy potřebuju "něco spustit".<<
OK.

V tom případě, v tom já nevidím problém. Jdu pod kapotu ORM (nikoliv napřímo do db). Mnoho z nich (ORM) obsahuje různé nástroje jak optimalizovat různé věci. Je to stále v režii ORM, neobcházím validaci (nebo to činím při plném vědomí), a nevidím v tom žádný problém. Nepovažuji to za mrzačení.

Samozřejmě v tomto případě ale nemohu pouštět write dotazy napřímo do databáze, protože pak dotyčené ORM obcházím; on je source of truth.

317
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 01. 07. 2021, 19:20:22 »
Já bych pro dávkové příkazy ORM neobcházel. To ORM tam jednou mám, a tak to píšu přes něj. Pod kapotu jdu v případě, kdy potřebuju optimalizovat na krev, ne v případě kdy potřebuju "něco spustit".

To moc dobře nefunguje. Databáze je zatížená spoustou neefektivních dotazů, a ve chvíli, kdy potřebujete jeden ladit "na krev", tak se nikam nehnete. Zjistíte, že i ten jeden, jinak třeba dobře napsaný dotaz prostě čeká kvůli ostatním neefektivním transakcím a lockům z ORM.

Celkově je hloupé mít dobrou technologii, zmrzačit ji, a pak se snažit zrmzačený pahýl znovu rozhýbat.

Psal jsem to už výše, ORM má svoje místo, ale problém nastává ve chvíli, kdy někoho napadne, že by si mohl pomoct obejitím. Získá tím málo, ale hodně zkomplikuje situaci. Když ORM, tak kompletně, přijmout jeho výhody a nevýhody. Data pak jedině přes aplikaci, nikdy už ne přímo z DB.
Nerozumím. Odporuješ si. Já tvrdím, že bych dávkové příkazy honil přes ORM, a ty namítneš, že "Když ORM, tak kompletně, přijmout jeho výhody a nevýhody. Data pak jedině přes aplikaci, nikdy už ne přímo z DB."?

318
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 01. 07. 2021, 16:55:11 »
Citace
proc bych psal SQL update rucne? Jeste jednou, kazde ORM umi vygenerovat validni batch update dotaz.
Jak píšou kolegové, pokud máš logiku v APP, tak to prostě není možné, protože na APP vrstvě je aplikační logika postavená nad ORM a tedy ji ORM nevidí a neumí použít.
Já bych pro dávkové příkazy ORM neobcházel. To ORM tam jednou mám, a tak to píšu přes něj. Pod kapotu jdu v případě, kdy potřebuju optimalizovat na krev, ne v případě kdy potřebuju "něco spustit".

319
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 01. 07. 2021, 03:47:37 »
- ORM není o tom, nedostat se nebo schovat SQL. Když už něco schovávat, tak to je relační algebra. Ale SQL nikomu nevadí.

To je protimluv. SQL přímo realizuje relační algebru.

Zkuste se zamyslet nad zkratkou ORM, obsahuje přímočarou odpověď.
Není to protimluv.
První věc, kterou šikovné ORM schová, tak je joinování. Každopádně pointa je jinde.

320
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 28. 06. 2021, 13:32:44 »
Rozhovor se tu krapet zvrhl v několik falešných premis:

- ORM není o tom, nedostat se nebo schovat SQL. Když už něco schovávat, tak to je relační algebra. Ale SQL nikomu nevadí.
- To, že potřebuju specializovaný dotaz, kde dělám hroznou magii neznamená, že nesmím použít ORM. Tím spíše, když specializovaný dotaz je sotva procento všeho.
- To, že někdo zprasil ORM tak, že z toho Pavel málem omdlel neznamená, že napsat si "lehkou obálku" by dopadlo lépe.
- Napsat si "lehkou obálku" nebude automaticky výhodnější.
- Narvat všechno do DB je volená strategie, která nejde přímo proti ORM.

321
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 28. 06. 2021, 12:07:26 »
300 dotazů na jeden refresh stránky :o  :o :o
WTF (?)
Bavíme se o jedné jediné běžné webové stránce? :o
Tři sta dotazů :o
Jako vážně?
Ale to uvádíte jako příklad enormní ouchylnosti ne?
Běžné je klidně 1500. Pavel byl ještě opatrný.

322
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 27. 06. 2021, 01:18:13 »
...

Proč si myslím, že to nejde: dotaz, aby byl jasné "co chci" se určitě dá sestavit jednoduše. SQL či přes ORM - to jsou jen dva způsoby, jak sdělit svoje přání o tom, jaká data chci naservírovat. (query-language)

Stroj musí úlohu provést. To dokáže vždy - i na tom se (asi) shodneme. Nám jde o to, aby to dělal efektivně.

Výkon není závislý na tom, jak dobře napíšu dotaz.
Výkon je závislý na tom, jak dobře napíšu dotaz pro daný způsob, jakým jsou data uložena (zindexována apod.).

Těch způsobů, jak uložit a zindexovat data a jak sestavit plán pro vykonání dotazu, je nepřeberné množství. I kdybychom uvažovali o prostém sekvenčním čtení, musí se engine rozhodnout, v jakém pořadí načte entity, aby bylo filtrování kritérií efektivní. Jakmile se objeví možnost užití indexů a přidají se vnořené smyčky, roste závratně množství možností, jak to hardware zpracuje. Z těchto možností potřebujeme co nejdřív eliminovat ty, ke kterým máme dostatek informací, že efektivní být nemůžou a u zbylých odhadnout, jak by takový postup trval, kolik paměti by vyžádal apod. (query-plan)
Nic z toho nedělá člověk. Tudíž to není pro téma ORM relevantní.

Abych poskytl nějaký materiál:
1/ Mám nějakou tabulku. V těch je několik sloupců, část z nich jsou cizí klíče, tedy automaticky indexovaný. Pak tam tedy mám pár sloupců, podle kterých budu nebo nebudu vyhledávat a tudíž je třeba se rozhodnout zda bude vhodné tam dát index.
2/ Mám zájem o nějaká data přes několik tabulek. Ty tabulky mohu pojoinovat různým způsobem. Těch způsobů není strašně moc, jsou dva nebo tři.
Toliko výchozí podmínka. Jak to vidím já:

1. řešení: ORM může sledovat cenu jednotlivých dotazů a vytvářet si statistiku a podle toho se rozhodnout, že zde je třeba dát index. (lehká variace na JIT) S tímto řešením mám velice dobré zkušenosti. Zvláště u skládání dotazů přes joiny.

2. řešení: Řekne se, že chci použít konkrétní strategii vytváření dotazu. U definování indexů by to asi šlo taky, ale už je to trochu divný, a nechal bych to na prvním řešení.

3. řešení: Je to tak velká exotika, že tam napíšu ruční SQL. Není se za co stydět.

Shrnuto, stroj vždycky ví nejlíp, jak poskládat dotaz. Má ty samé informace jako člověk, a dřív a rychleji. Takže dokáže lépe reagovat.
Vytváří se neoptimální plán? Může zkusit jiný. Stroj ví, proč je ten plán neoptimální, ví, který je vhodný pro jakou situaci. Ví, zda nad tím sloupcem jsou indexy. Ví kolik tam těch dat je. Ví, jak často se zapisuje nebo jak čte.
Stroj ví, jak jsou data a dotazy používány, lépe než člověk, a dokáže se jim lépe a ryhleji přizpůsobit, lépe zvolit řešení.
No a v konečném důsledku, nikdo tu nepropaguje, že v tom 0.001% případů tam do toho tomu ORMku nemohu hrábnout.

Jediné, co stroj nedokáže je rozhodnout - "to, že toto trvá tři minuty je v pořádku, protože já chci aby si ředitel počkal, chci ho totiž naštvat".

323
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 27. 06. 2021, 00:31:52 »
Mám zájem řešit, že zda dokáže stroj vytvořit stejně kvalitní dotaz do relační databáze jako člověk; to ale nemáš zájem řešit ty.
Každá databáze se dá na úrovni uložení dat realizovat různě - vazbami, sloupci, složenými strukturami. Ta samá data, s tím samým smyslem, můžete uložit mnoha způsoby.
Kolik je těch způsobů? Vezměme si třeba na paškál PG jako reprezentanta známé, a dostatečně schopné databáze.


Ten způsob volí programátor, který má představu, jak data porostou, jak budou rozložené hodnoty a jak budou používána (transakčně, pro častý zápis, pro čtení). Dál potřebuje DB nějaké indexy, aby dohledání hodnoty bylo rychlé. To taky musí rozhodnout člověk.

Nic z toho nejde nechat na stroji, protože vstupem jsou předpoklady (nejde to vyčíst z dat samotných).
Nesouhlasím. Jistě, některé situace opravdu ne, ale v mnoha případech lze zvolit strategie kdy člověka lze se ziskem eliminovat.


Dovedu si však představit situaci, že databázi řeknu (nějakým způsobem - ať už přes SQL, nebo ORM nebo whatever else) vše potřebné. Popíšu jí data, aby je ultimativně chápala. Sdělím jí, jak budou užívána a jak budou rozložené hodnoty, jak data porostou do délky.

Pokud toto všechno splním, pak si dovedu představit, že stroj dokáže sestavit ideální dotaz a databáze ideální plán na vykonání.
Ano. Toto je úvaha, o kterém se chci bavit.

Takto ultimativně popsat situaci, aby stoj mohl sestavovat dotazy ideálně, by podle mě bylo složitější, než je současný stav RDBMS / SQL.
Podle mně ne. Proč si to myslíš?

Abych taky odpověděl první: Ty tu sice používáš výrazy jaky "ultimativně", "všechno" a podobně, aby si vyjádřil své přesvědčení, že toho je strašně moc. Ale já se naopak domnívám, že na každý scénář uložení dat existuje několi málo variant - ať hodím cifru, dejme tomu tři. Takže pokud budu štelovat ukládání struktury tak vybírám mezi třemi scénáři (a navíc jen v případě, když náhodou default nevyhovuje, což většinou vyhovuje). To mi přijde jako usnadnění.

Na závěr, co odpůrci ORM (nebo spíše ti, co byli ORM znechuceni) nedoceňují je skutečnost, že ORM vytváří mnohem čitelnější rozhraní pro datovej model. Relační je super, je mocnej a všechno. Ale není to něco co je nám, pokud nejsem matematik, pohodlné. Takže pokud budu mít ORM ve stylu iBatis, a budu potřebovat nějaký hrozně moc optimalizovaný dotaz do databáze, tak ho tam furt můžu narvat ručně, ale navenek se to bude číst a používat pohodlně. (Ostatně je to osvědčený způsob, který se používá v programovacích jazycích leta.) To je důvod proč se ORM furt znova vymejšlejí - usnadnění práce, lepší používání.

324
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 26. 06. 2021, 23:42:13 »
Na druhou stranu když vidím lidi, čeho všeho jsou neschopni s databází, tak nevidím důvod, proč by to nemohl dělat stroj. Tak blbej dokáže bejt taky.

Já mám právě ten pocit, že to celé je řešení falešného dilematu: dělat to blbě a složitě vs. dělat to blbě a aspoň jednoduše.

V tom ORM a objektové databáze vítězí - a v praxi je přebytek programátorů bez znalostí do hloubky, a nedostatek se znalostmi. To mluví pro ORM.

Ono je takové hloupé udělat aplikaci nad ORM nebo objektovou databází, a pak si vzpomenout, např., že chci hlídat konzistenci. Třeba i složitý mechanismus na hlídání konzistence. Pak se to musí psát v aplikaci a doufat, že aspoň něco z toho ORM přenese na databázi. Zbytek poběží v aplikaci - tj. data se budou muset po síti nebo socketem přenést z DB do aplikace a odedřít to, co může být out-of-box.

Stejně tak, databázový systém (ať už to je RDBMS nebo něco jiného) může optimalizovat svoji práci teprve ve chvíli, kdy má nápovědy. Kdy ví, že určitá hodnota "zde" má nějaký vztah k hodnotě "onde" (0:n - m:n). Toto si ten stroj nemůže domyslet, protože maximálně ví, jak to s daty vypadalo před chvílí (statistiky), ale nemá jistotu, jestli to platí ještě teď, nebo bude platit za sekundu. Aplikace to vědět může, ale ta už stojí v místě, kam je potřeba na takovou práci data přenést (zdlouhavé, rozežrané).

Ale jako taky znám případy, kdy se nic takového nemusí řešit a je úplně jedno, jestli jsou data sourodá v čase, neřku-li v transakci. Tam pak může nerelační přístup k problému ušetřit práci programátora. Obvykle to ale tíhne spíš k ACID požadavkům.

Neznám moc dobrých programátorů, kteří by - po dobrém poznání obou způsobů - preferovali objektový přístup. Většinou se to pojilo s tím, že RDBMS uměli mizerně (jak jste psal), a objektový přístup byl záchranný kruh.

Já nemám zájem řešit, že ORM jsou nekvalitně napsané, a díky tomu jsem schopen napsat lepší dotaz pomocí čistého SQL.
Já nemám zájem řešit, že i dnešní nekvalitní ORM jsou v některých situacích výhodnějších.
Mám zájem řešit, že zda dokáže stroj vytvořit stejně kvalitní dotaz do relační databáze jako člověk; to ale nemáš zájem řešit ty.

Tudíž za mě všechno.

325
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 26. 06. 2021, 21:19:52 »
problémy lze dlouho řešit triviálními "hinty". Pak to narazí na mantinel, kde už s tím nejde hnout
Opět. V tomto se hrubě neshodnem.

BoneFlute:
Je trivka? Potkal jsem se s tím, že jeden dotaz jsem napsal asi deseti způsoby - unionem vevnitř, unionem venku, pomocí OR, pomocí materializované CTE, jednou byla podmínka tady, jednou ekvivalentní ale jiná tam, jednou se použilo DISTINCT ON, jednou radši window funkce, jednou GROUP BY atd. atd.... Moc si nedokážu představit, jak by takové hinty vypadaly....
Tak já sbírám různé špeky, protože mě samozřejmě zajímá, jak by se to dalo nebo nedalo tím ORM řešit. Takže když by si měl něco k dispozici budu moc rád.

Moc nevěřím, že by šel napsat ORM tak, aby opravdu uměl uživatelsky pochopitelně  pokrejt a generovat opravdu všechny možnosti vyjádření toho samého dotazu, a přitom byl pořád jednoduchej a elegantní. Věřil bych, že jde napsat něco, co pokreje většinu běžně používanejch technik, ale že by opravdu obsáhnul 100% vyjadřovacích schopností SQL bych byl dosti skeptickej.
Co si dokážu představit je query builder, který to zvládne, a kterým nakrmím nějaký ORM. Ale nikoli něco, co mne od SQL odstíní. Ale třeba se pletu...
Nedokážu kategoricky prohlásit, že sto procent. Samozřejmě v mém případě je to taky víra.

Já vím, že relační databáze jsou skvělá věc, která má věky ověřené všechno. Má můj respekt. Na druhou stranu když vidím lidi, čeho všeho jsou neschopni s databází, tak nevidím důvod, proč by to nemohl dělat stroj. Tak blbej dokáže bejt taky.

Domnívám se, že mnoho despektu k ORM od lidí jako Pavel Stěhule vyvěrá z toho, že příliš mnoho ORMek jsou velice špatné. Autoři (asi) chtěli za každou cenu objekty, a ztratili ze zřetele respekt k matematické dokonalosti relačních databází.
Pak jsou tu třeba takové výjimky, jako iBatis, které to mapování vzal za dost dobrý konec (doufám, že mu moc nefandím, viděl jsem ho jen zběžně, ale dost zaujal).
To ale neznamená, že by nemohli ORM dozrát, a být plnohodnotnou evolucí SQL databází. Despekt na základě zkušenosti je jedna věc; vytvářet z toho tvrzení, že to nejde, je zbrklé.

Nemluvě o druhé straně barikády, kdy jsou lidé, kteří si při slově ORM odplivnou, a nestojí jim to ani za úvahu. Čímž pak samozřejmě diskuse s takovými lidmi trpí. Nic o tom neví.

326
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 26. 06. 2021, 20:30:54 »
Vysvětlit ORM (namapovat) strukturu, aby to vůbec umělo, by bylo stejně složité, jako využívat přímo SQL.
V tomto se hrubě neshodneme.

Těžko nad obecnou (objektovou) strukturou dat vysvětlíte stroji, co a jak má/může optimalizovat. DB engine to může leda odhadovat nad vytipovanými statistikami. Když to necháte na takové empirii, buďto to bude neefektivní (nikdy nemůže vyzkoušet všechny možné přístupy ve všech možných kombinacích), nebo to bude ubírat výkon. Nebo dáte enginu hinty. Pokud by ty hinty měly být ideální, budou stejně složité jako v RDBMS / SQL.

Proto dnes vídáme horizontální škálování prezentované jako výhodu i v situacích, ve kterých by RDBMS stíhal i před dvaceti lety a s tehdejším hardwarem.

(Ovšem nerozporuji, že někdy může být takový přístup efektivnější, i z hlediska financí)
Vůbec nereagujete na to co píšu.

A na co tedy? Psal jsem, že stejně definitivně namapovat v ORM nebo jiné abstrakci datové struktury, aby byly srovnatelné výkonné, by byla stejně složitá práce, jako rovnou používat SQL.
Tak, to už je lepší. A v tom se neshodneme. Podle mne nebylo.

Ve skutečnosti si s něčím takovým hraju, takže to mám z první ruky. Napsat pravidla, kdy tomu ORM řeknu, že v tomto případě má použít tuto nebo jinou strategii je trivka.

327
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 26. 06. 2021, 20:26:24 »
Vysvětlit ORM (namapovat) strukturu, aby to vůbec umělo, by bylo stejně složité, jako využívat přímo SQL.
V tomto se hrubě neshodneme.

Těžko nad obecnou (objektovou) strukturou dat vysvětlíte stroji, co a jak má/může optimalizovat. DB engine to může leda odhadovat nad vytipovanými statistikami. Když to necháte na takové empirii, buďto to bude neefektivní (nikdy nemůže vyzkoušet všechny možné přístupy ve všech možných kombinacích), nebo to bude ubírat výkon. Nebo dáte enginu hinty. Pokud by ty hinty měly být ideální, budou stejně složité jako v RDBMS / SQL.

Proto dnes vídáme horizontální škálování prezentované jako výhodu i v situacích, ve kterých by RDBMS stíhal i před dvaceti lety a s tehdejším hardwarem.

(Ovšem nerozporuji, že někdy může být takový přístup efektivnější, i z hlediska financí)
Vůbec nereaguješ na to co píšu.

328
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 26. 06. 2021, 19:59:16 »
Vysvětlit ORM (namapovat) strukturu, aby to vůbec umělo, by bylo stejně složité, jako využívat přímo SQL.
V tomto se hrubě neshodneme.
Díky tomu nelze souhlasit s tvými závěry.

329
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 26. 06. 2021, 19:50:22 »
My to řešíme (ale to asi není nic nového) většinou systémem migrací - tzn. aplikace si vždycky při deployi (jak se to skloňje :-)) upraví databázi na nejvovější verzi. Což jakž takž řeší půl problému (stará db verzus nová aplikace) - dělat "downgrade databáze" je zpravidla problém. Ale to furt neřeší ten základní problém, že s každou změnu struktury db je třeba upravit jak všechen SQL kód tak veškerou bussines logiku dotčené tou změnou, včetně testů. Což může někdy být hodně práce, takže je výhoda, když je schéma DB co nejuniverzálnější a tedy se nemusí měnit.

Předtím jsem nemluvil až tak o přidání sloupce (s tím je zpravidla práce minimum) - na kteréžto, jestli jsem pochopil Tvůj post, je zaměřeno Tvé řešení především - ale o refaktoring vztahů mezi entitami. Kterej se v SQL (pokud člověk neudělá chybu v kardinalitách) dělá zřídka, ale v stromových databázích - z důvodů, které jsem popsal v minulých postech - se mu někdy vyhnout nejde.

IMHO jedinej způsob - verzování:
Přihlásím se k verzi 1, a pošlu změny. Ve verzi 1 jsou háčky, které informují verzi 2. Verze 2 zpracuje události, a protože zná rozdíli, tak převede data z verze 1, na verzi 2. Verze 2 taky nemusí být poslední, tak se to přesouvá až po tu poslední, která jediná uloží data do databáze.
V reálu samozřejmě většina těch verzí už bude mrtvá, takže to bude 53 -> 54, maximálně 52 -> 53 -> 54.

V reálu ale málokdy a málokdo řeší tak ultimátní transparentnost, a většinou se prostě aplikace vypne -> zaktualizuje -> zapne. Což je sice na uživatele nemilosrdné, ale zase nevzniká ta obrovská zátěž v podobě držení zpětné kompatability.

330
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 24. 06. 2021, 23:17:42 »
Protože zatímco v SQL máš danej formát rozpadnutí na relace, kterej je pro danou "logickou strukturu" jeden,

Způsobů mapování objektů na relace je vícero, určitě ne jeden.
Mám knihu a autora.
Mám blog galerii obrázků, článek může obsahovat obrázky, článek může obsahovat komentáře, galerie může obsahovat komentáře.
Kolik tě napadá způsobů mapování?

v NoSQL u složitějších případů je poměrně podstatné, jestli se člověk na začátku vývoje "strefí" do datové struktury, která bude vhodná i třeba po letech...

Např. dokumentové DB jsou bezschématové, takže změna struktury se provádí uložením dokumentu v jiném formátu. V RDB je třeba změna statické struktury zvláštními příkazy,
Takže klasický spor staticky typovaný versus dynamicky typovaný?

a to při odstavené DB.
Ale no tak. To tě není hodno.

Stran: 1 ... 20 21 [22] 23 24 ... 133