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 - Kit

Stran: 1 ... 5 6 [7] 8 9 ... 47
91
Odkladiště / Re:Čeština a IT výrazy
« kdy: 15. 07. 2021, 18:49:23 »
Právě jsem vytvořil commit (sic): "Vytvoří pro Fondy továrny, aby se dali dát do DIContaineru."
Všimněte si angličtiny s českou gramatikou použité za účelem vtípku.

Všiml jsem si toho hnusu. Skloňování anglických slov dle českých pravidel bez patřičné transkripce je nepřípustné.

92
Odkladiště / Re:Čeština a IT výrazy
« kdy: 14. 07. 2021, 11:26:44 »
Ano, je to normální. V každém oboru činnosti vzniká argot, který slouží ke zjednodušení komunikace.

93
Server / Re:Ake NAS a kolko diskov?
« kdy: 11. 07. 2021, 10:43:52 »
Pokud bych potřeboval 4 kamery, koupím si dva jednodiskové Synology a licence mám vyřízené.

94
Hustota Vesmíru v čase 5e-44 s.

95
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 28. 06. 2021, 16:04:30 »
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.

Takže žádná z uvedených falešných premis neplatí? Jsi tedy pro "lehké obálky", které budou automaticky výhodnější?

96
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 25. 06. 2021, 18:27:21 »
Kit:
Citace
Samozřejmě nejprve udělám selekci i projekci, abych dostal jen ta data, která potřebuji.
Ale to je problém slepice nebo vejce. Těžko uděláš projekci a selekci, když neznáš strukturu a nevíš, co a jak projektovat a strukturovat.

Jako jo, není výjimka, že se nějaké "listové atributy" (tam, kde se dají data aspoň nějak zestromovatět) ukládají v RDBS např. do JSONu a tam pak je Tvůj postup dobře použitelný, ale IMHO to rozhodně není univerzální model na to, jak pracovat s daty v nějaké aplikaci.

Používám to na relačních datech. Ano, při projekci i selekci potřebuji znát seznam sloupců i kandidátních klíčů. Pokud to vadí, použiji pohled nebo vloženou proceduru. Pak si vystačím s "SELECT * FROM Pohled" nebo "CALL procedura(parametry)". Je to pro mne jednodušší, než to komplikovaně řešit v ORM. Také je to podstatně rychlejší - někdy i o dva řády.

Co je však podstatné, mám jednu šablonu na mnoho druhů výstupů z databáze. Ta šablona se jim jednoduše přizpůsobí a zobrazí data v závislosti na názvu pohledu i na dodaných sloupcích. Jen u větších projektů tu šablonu dělím na více menších, které dědí z jedné společné.

97
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 25. 06. 2021, 14:40:32 »
Citace
a teprve v aplikaci hledám, jak ji mám zpracovat.
Možná nerozumím tomu, jak to myslíš, ale nedokážu si představit, jak z velký databáze tímto způsobem dostaneš hledaná data efektivně.

Samozřejmě nejprve udělám selekci i projekci, abych dostal jen ta data, která potřebuji. Každý záznam pak považuji za kolekci složenou z key:value. Každý key použiji jako klíč pro další zpracování value. Nevyhledávám tedy data ve výsledku, ale algoritmus, kterým ta data mám zpracovat. Říká se tomu metoda push. Úplně nejjednodušší je však celý záznam nasypat do DOMu - výstupní šablona si s tím poradí včetně formátování a překladů.

98
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 25. 06. 2021, 12:14:11 »
Jo, nacpat co nejvíce bussines logiky do DB je hodně dobrá cesta. Pak se dá samozřejmě dá měnit databázi aplikaci "pod rukama", aniž by si ta vůbec všimla. Ale to už jsme hodně daleko od NoSQL databází, a taky to vyžaduje člověka, co něco umí - pro "běžnýho prací prášek" jsou stored procedure sprostý slovo.

Dost se toho dá napsat i bez vnořených procedur - pohledy toho také umí hodně. V některých databázích do nich můžeš i insertovat.

Traversování stromu popř. nějaké wildcardy v XPath věc řeší, ale to je IMHO spíše na jednorázové zpracovávání dat (importy a podobně). Nedokážu si představit (rozumně výkonnou) aplikačku s nějak rozumně velkou databází, která nespoléhá na pevné umístění dat, ale každou entitu hledá kdekoli v stromové struktuře. Zas jsme u toho, že každej postup se hodí někde...

To právě není založeno na hledání v DB (samozřejmě do SELECT dávám selekci i projekci). Dostanu z ní data v nějaké struktuře a teprve v aplikaci hledám, jak ji mám zpracovat. Je to obrácený postup, který je dokonce rychlejší a přizpůsobí se prakticky jakékoli struktuře.

99
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 25. 06. 2021, 11:37:38 »
Jo, tak to jo - to je v takovém případě rozumný postup, ale to je velmi specifické užití. V okamžiku, kdy Ti na tom závisí nějaká "bussines logika", tak si nedovedu představit, že by to šlo použít. Např. když ti do tabulky zaměstnanců přibydou "skrytí agenti" -  které nebudeš chtít zobrazovat na webu v seznamu zaměstnanců - tak už se s takto jednoduchým přístupem nevyřeším. Nemůžu vzít novou databázi a nad ní pustit starou verzi aplikace, prozradil bych Čepigu.

K tomuto účelu se dají využít pohledy a původní tabulky zamknout před aplikací. Stará verze se tak k datům nedostane, což je ten lepší případ. Business logiku jsem dal do databáze, protože každý zákazník má svá specifika a chci udržovat jen jednu aplikaci.

Navíc když budeš chtít pokrýt aplikaci testy, tak by Ti to mělo na té starší db zařvat atd.... Takže jo, beru, že tendle přístup se někdy hodí, ale myslím, že se nedá brát jako "univerzální řešení" na modifikaci či refaktoring databáze.

Testy samozřejmě musí vypadat jinak.

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.

Tady mohou pomoci pohledy a uložené procedury. Data z databáze zpracovat reflexí, viz výše. Aplikace v podstatě nepotřebuje znát strukturu databáze, se kterou pracuje.

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.

Stromové databáze zpracovávám traverzováním, případně v XML použiji XPath. Ovšem pro hromadné výstupy je to traverzování obvykle výhodnější, protože tu strukturu jednoduše znát nemusím.

100
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 25. 06. 2021, 10:48:12 »
Kit: Moh bys to "řízení tokem databáze" nějak rozvést? Nějak si neumím představit, co přesně pod tím myslíš.... a třeba se něco naučím :-)
Toho mít dvě verze kódu pro různé struktury se snad zbavit nemůžeš, ne?

Můžeš. Výsledkem DB dotazu je množina slovníků (asociativních polí). Stačí ji přes nějaký foreach nebo map nasypat do DOMu, který pak předhodíš šabloně, která ho traverzuje a exportuje do výstupní podoby. Chybějící sloupce nezobrazí, přebývající sloupce zobrazí v základním režimu. Nikde žádné vidličky, v šabloně žádné cykly a nejlépe žádné podmínky.

101
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 25. 06. 2021, 09:40:05 »
Citace
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, a to při odstavené DB.
To ale překrucuješ, co jsem tvrdil. Nepsal jsem o složitosti provádění změny - koneckonců, když už se provádí změna, je způsob realizace změny schématu ten menší problém - daleko větš problém je nutnost adaptovat aplikaci na tu změnu, to že stará aplikace na nové struktuře nefunguje a nová na staré (anebo se kód zanáší "legacy vydličkama").
Psal jsem o tom, že tam, kde relační struktura nevyžaduje změnu, tak stromová může a dosti často bude, protože stromová struktura je podstatně méně univerzální, než ta relační.

Adaptace aplikace na změnu struktury může být rovněž jednoduchá. Stačí ji řídit tokem dat z databáze - pracuje pak se starou i novou verzí bez vidliček. Dělám to tak už dlouho a je to velmi efektivní.

102
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 24. 06. 2021, 19:33:55 »
A teď je otázka - existuje nějaký "nativně seznamový" způsob persistentního ukládání dat? Jistě: samotný soubor je seznam bytů. Jenže ten je na nějaké rozumné používání hrozně nešikovný, je třeba nad ním udělat nějakou abstrakci. Tak jakou?

Takovými typickými seznamy jsou logy. Pro práci s nimi se výborně hodí textové utility grep, sed, awk, které s nimi pracují jako se skutečnými seznamy a zachovávají pořadí. Kdysi jsem na logovacích souborech postavil účetnictví - fungovalo to bezvadně a bylo to i rychlé.

103
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 24. 06. 2021, 17:55:58 »
V seznamu je definováno pořadí, které je závislé na pořadí přidání elementu. Seznam nepotřebuje index.
Však taky indexy neslouží k popisu pořadí vkládání položek do seznamu.

No právě. Přestože seznam nemá indexy, je definováno pořadí položek. Tohle se u RDB použít nedá. Přesto raději pracuji s RDB a pokud potřebuji stromy, sáhnu po DOM.

104
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 24. 06. 2021, 14:38:03 »
PanVP:
Citace
ORM - rovnák na vohejbák.
Ne, to není rovnák na vohejbák.
RDB NEZNÁ seznamy! Jasně, už slyším křik: „Ale když udělám SELECT něco FROM něco WHERE id_rádobyseznamu = něco, tak mám seznam.“ To ale není seznam, to je pouze podmnožina VŠECH prvků seznamů STEJNÉHO typu nasypaných do jedné krabice zvané tabulka, ...

V seznamu je definováno pořadí, které je závislé na pořadí přidání elementu. Seznam nepotřebuje index. RDB dodává množinu, u které není definováno pořadí, pokud není explicitně uvedeno řazení v dotazu. Update DB tabulky seznamem není triviální úlohou a zpravidla je výhodnější to řešit jinak.

105
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 24. 06. 2021, 13:42:40 »
ORM je tzv. "leaky abstraction" -  https://en.wikipedia.org/wiki/Leaky_abstraction

coz vubec nevadi, pokud nepotrebujete stridat databaze. Hlavni ucel ORM je moznost psat SQL ve vyssim, expresivnejsim jazyce.

SQL je dostatečně expresivním jazykem, většina ORM toho nedosahuje.

Stran: 1 ... 5 6 [7] 8 9 ... 47