Portál AbcLinuxu, 30. dubna 2025 18:44
Nojo, ale ty sebemrskačské poznámky o prasení a tak se zají po prvním přečteníOny se hlavně zají ty nejapné poznámky hraničící s útoky v každé reakci na tvůj komentář.
Parametry u zbozi jsou hodne spatny priklad, to opravdu neni "neznama struktura", kvuli ktere by bylo potreba neustale "menit nebo zeslozitovat DB schema". Ale na to prijdete sam az vas pozadaji, abyste do vaseho eshopu doplnil napr. hledani a razeni podle parametru...
V několika knižních databázích jsem viděl jednoho a toho samého autora zadaného vícekrátNormální je, že aplikace nabízí uživateli zadání autora z číselníku, může mu i napovídat jeho jméno podle zadání prvních pár písmen, případně se musí nejdřív vytvořit autor a pak teprve se může použít (a tato procedura je trochu uživatelsky nepřívětivá, aby uživatel nezadával spousty nových autorů a radši se nejdřív podíval, jestli už tam ten autor není). Totéž platí pro žánry. Jenže jak tohle udělat v té nenormalizované „databázi“? Pokud tam má být nějaká nápověda, musí se projet všechny záznamy a z jejich polí vytahat všechny žánry (či jména autorů), pak zahodit duplicity (to se všechno dělá v aplikaci?) a pak je zobrazit uživateli. Zatímco když je databáze aspoň trochu normalizovaná, tak máme číselník žánrů (nebo autorů) a projíždí se vždy jen tahle relativně malá tabulka.
v NoSQL se zjišťují už při zápisuTakže musím předem vědět, jaké dotazy na databázi budu klást? Trochu omezující, ne? (ostatně v relačních DB to není nic nového – materializované pohledy nebo triggery a tabulky s denormalizovanými daty)
With CouchDB, no schema is enforced, so new document types with new meaning can be safely added alongside the old.takže tam bude asi pěkný guláš a moc z toho nevykouká. Leda že by si projel všechny dokumenty a zjistil, které jsou „new“ a které „old“ případně nějaké úplně jiné, rozdělil si je ve své hlavě na nějaké skupiny a snažil se zachytit jejich struktury. Přijde mi, že si tu někdo pod snadností úprav představuje jen úpravy měřené počtem řádků případně absenci nutnosti měnit schéma. Jenže snadnost úprav je něco víc – nejdřív totiž musíme nějak přijít na to, jaké řádky kódu a jak budeme měnit. A tenhle proces může být daleko zdlouhavější, než samotné napsání té pár řádkové úpravy. Je to podobné jako opravování chyb – samotná oprava chyby je často triviální, ale přijít na to, kde ta chyba je, to je skutečná práce.
Pokud je to důležité, tak lze samozřejmě udržovat dokumentaci, že jo.Jenže u relační databáze tu dokumentaci ani udržovat nemusíš, taková databáze je dokumentovaná sama sebou. Resp. jasně, že je hezčí, když má člověk aktuální (neaktuální je spíš na škodu) model v nějakém CASE nástroji, ale i když takový model nemá (buď se mu s ním nechtělo dělat nebo je zastaralý), máme jasnou představu o struktuře dat – už jen na základě názvů tabulek, sloupečků, jejich popisů a cizích klíčů – dále pak na základě primárních klíčů, datových typů atd. tohle jsou všechno deklarativní věci, které není potřeba dolovat ze zdrojáků, prostě koukneš a vidíš.
SQL je specializovaný jazyk, takže jako dokumentace je zřejmě o něco hodnotnější, ale pořád je to zdroják.Právě že ne – nikdo tě nenutí studovat kilometry skriptů obsahující
CREATE TABLE bla bla bla
. Místo toho se podíváš na jejich výsledek, běžící databázi (třeba testovací, vývojovou) a tam vidíš všechny ty tabulky a vazby, aniž bys musel louskat nějaký zdroják. Existují i nástroje pro analýzu těch DB a jejich vizualizaci, takže má pak člověk podobný pohled jako fyzický model v CASE nástroji. Co uvidím v běžící bezschémové databázi? AFAIK jen data, bez struktur, resp. každý kousek dat bude mít nějakou svoji strukturu. Nebo se z toho dá vydolovat nějaké zobecnění? Např. vyhledat záznamy stejného typu, stejných struktur a udělat z toho pohled na nějaké „třídy“ objektů. V relační DB jsou tyhle „třídy“ explicitně a předem definované – jako tabulky.
jak se chovat k dokumentové databázi relačním způsobemNejde o to, chovat se k ní relačním způsobem – jde o to získat přehled, jaká data máme. Protože když ten přehled nemáme, tak je to jen hnůj, se kterým se nedá pracovat. A pokud ten přehled musíme získávat čtením zdrojáku, tak je to velice nepříjemné a pracné, byť možné.
Čím dál víc se mi zamlouvá ta paralela s dynamicky typovanými jazykyDá se najít i paralela s WWW. Na webu je taky spousta dokumentů, rozházených všude možně po síti. Taky je to hnůj, který může zkoumat člověk (číst si www stránky), ale počítač mu nerozumí – úspěch je, když jsou označené nadpisy a odstavce, ale co představují ty dokumenty obsahově počítač netuší, drtivá většina webu není sémantická. Na webu to ale jinak nejde, resp. zlepšení (sémantika) přichází pomalu, takže se s tím musíme nějak poprat. Ale nevidím důvod proč si stejný chaos zanášet do své vlastní aplikace, kterou mám pod kontrolou a kde si strukturovanost a sémantiku můžu vynutit (což na webu nemůžu – nemůžu nařídit všem autorům www stránek, ať používají RDF nebo mikroformáty a pečlivě všechno označují).
BTW: „hnůj“ tu nemyslím jako urážku, ale prostě nestrukturovaná nesémantická data – typickým příkladem je webová stránka – může být hezká, může obsahovat užitečné informace, ale nemá předem danou strukturu (z hlediska sémantiky*), resp. každá stránka má nějakou svoji strukturu (to jsou ty různé verze dokumentů, „new“ a „old“ nastrkané v jedné databázi), a strojové zpracování je tak výrazně složitější než nad strukturovanými daty s předem daným schématem.
*) gramatiku na úrovni validního XHTML považuji za samozřejmost, ale to nás v tomhle případě nespasí, protože nevíme, že v <h1> se nachází název státu a ve třetím odstavci je jméno presidenta.
Lidi od dynamických jazyků postupem času vyvinuli celkem sofistikovaný testovací aparát
Kdyby radši vyvinuli pořádný typový systém, který by mohli používat normální programátoři v normálních aplikacích
To spouštění uživatelského kódu v rámci typového systému ze zápisku vedle o Perlu 6 je třeba docela pěkný nápad, nemyslíte?
Není to špatné, ale osobně bych preferoval, když by se na místech, kde to jde, místo běhových kontrol používaly kontroly statické -- nejlépe ve formě důkazů.
No a na hraní s typovými systémy jsou tu haskellisti, že jo. Je teda fakt, že Haskell je dneska asi v trochu lepším stavu než Perl 6
Mně by se třeba líbilo, když by se zkombinoval typový systém jazyků Disciple a Idris.
Jo, a nádavkem by mohli vyřešit problém zastaveníMyslíš tenhle? Nebo ten, v jehož řešení vystupuje
SIGKILL
a return true;
?
To je ten vtip. S relační databází je to nepředstavitelné.Viz:
Nemá smysl zavrhovat ani jedno ani druhé, každý druh databáze najde nějaké uplatnění. Ale asi by bylo dobré se řídit tím, jaká data máme na vstupu.Pokud je vstupem internet, resp. nekonečné množství www stránek, které jsou nesourodé, nesémantické atd. tak dá rozum, že si ty stránky nebudeme kopírovat do relační databáze a hledat v nich pomocí
WHERE html LIKE '%usa%president%'
.
Ale pokud jsou vstupem nějaké formuláře nebo jinak strukturovaná data, je to úplně jiné kafe. Osobně si myslím, že to nadšení kolem „nosql“ je přehnané a spousta lidí se k nim uchyluje jen proto, že se pořádně nikdy SQL nebyli schopní naučit. Trochu se obávám, že v rámci téhle módní vlny se „nosql“ databáze nasadí mnohde i tam, kam se nehodí (hodí jen na specifické případy). Ale to vlastně nevadí, aspoň pak pro nás bude víc práce, až se budou tyhle aplikace zase předělávat Pro nijak nestrukturovaná data Googlu je to s masivním paralelismem otázka maličkých zlomků sekundy.Ale výsledek je diametrálně jiný – výsledkem je odkaz na dokument, ve kterém se možná ta informace vyskytuje – nikoli ta informace jako taková, což by nám přišlo z relační DB. A masivní paralelismus a maličké zlomky sekundy? Tady je vidět, jak je zpracování nestrukturovaných dat náročné* – místo datacenter googlu mi na relační databázi stačí obyčejné PCčko, třeba i deset let staré. Jasně, objem zpracovaných dat je jiný, ale pokud by Google nebo WolframAlfa měli k dispozici velmi dobře strukturovaný a sémantický web, spotřebovali by mnohem méně výkonu a jejich výsledky by byly kvalitnější. *) ještě k tomu se neprohledávají data jako taková, ale jejich index.
Já bych řekl, že data obecně bývají nestrukturovanáCož je z velké části tím, že mnoho lidí ještě nepostřehlo, že na stole mají místo psacího stroje počítač – místo aby psali na papír a kopírák, to teď píší do Wordu, místo aby to dávali do šanonů ve skříni to dávají do složek na disku. Takovým lidem počítač prakticky nepomohl a využívají jen zlomek jeho možností. Je to ale jejich problém. Nestrukturovaná data jsou mor a potýká se s ním řada firem. Ale zpět k té tvorbě webů. Co takový elektronický obchod nebo redakční systém. Kolik dat v takové aplikaci je strukturovaných a kolik nestrukturovaných? Nestrukturovaný je třeba slovní popis výrobku nebo obsah článku. Ale ten zbytek?
a nebude to nahodou tim, ze svet (na urovni naseho rozliseni) je nestrukturovany? je jenom iluzi, ze vsechno se da nacpat do nejake predem znameho formatu... vzdycky me dokonale dokaze vytocit hlaska nejake urednice: ,,ale ja nevim, jak to zadat do pocitace''. typicky priklad... nedavno jsem se stehoval z US a musel jsem na nekolika mistech nahlasit zmenu adresy... v bance jsem stravil hodinu jenom proto, ze zenska nemela zpusob, jak zadat ceskou adresu do jejich systemu, ktery mel data hezky strukturovane na americke adresy. a to nebyla jedina situace... v jine DB to po me chtelo at vedle statu (CR) vyplnim jako povinny udaj i ,,provincii''... evidentne jejich DB mely dobre navrzenou strukturu, ktera ale vubec nevyhovovala realnym potrebam...Já bych řekl, že data obecně bývají nestrukturovanáCož je z velké části tím, že mnoho lidí ještě nepostřehlo, že na stole mají místo psacího stroje počítač
Hezké příklady, ale neukazují nedostatky relačních databází a předem daných schémat, ale chybu analýzy.ty priklady nemeli ukazovat nedostatky relacnich databazi... ale ukazat, ze ne vsechno ma predem znamou strukturu...
Nejedná se o nějaké nečekané změny, to, že existují i jiné země než USA je známý fakt a aplikace by s tím měla počítat.jo, jenomze ruzne zeme maji ruzne konvence, jak popsat adresu a jak ji zobrazit... a je nemozne podchytit vsechny mozne kombinace
ale ukazat, ze ne vsechno ma predem znamou strukturuTa struktura je předem známá. Resp. pokud v zadání máme, že budeme podporovat adresy různých zemí, nemůžeme klást příliš velká omezení, ty struktury budou volnější.
je nemozne podchytit vsechny mozne kombinaceMožné to je a běžně se i ta data ukládají do relačních databází. Už jsem adresu na pár nečeských webech vyplňoval a téměř vždy bez problémů – státy světa jsou obvykle jako číselník a zbytek nějaký
varchar
, tam se vejde všechno. Občas mají kraje/provincie své země jako číselník, ale pokud to nepsalo pako, tohle políčko není povinné, pokud nejsi z daného státu.
Ta struktura je předem známá. Resp. pokud v zadání máme, že budeme podporovat adresy různých zemí, nemůžeme klást příliš velká omezení, ty struktury budou volnější. ... státy světa jsou obvykle jako číselník a zbytek nějaký varchar, tam se vejde všechno.takze s SQL si muzu vybrat, ze adresa bude bud (1) struktura ktere neodpovida presne vsem pozadavkum (US adresa vs. adresy ze vsech statu sveta), (2) nejaky BLOB (varchar). a co kdyz budu v pripade (2) chtet vyhledat vsechny lidi, co bydli treba v texasu? je opravdu tak tezke priznat si, ze jsou situace, kdy SQL a relacni databaze s pevnou strukturou tabulek nejsou uplne nejlepsi reseni?
varchar
, tak jsem na úrovni nosql databáze – v tomto ohledu (můžu zadat libovolný kraj/provincii i z jiného státu), jinak jsem samozřejmě nad její úrovní, protože už při prvním pohledu na databázi je jasné, že tady máme nějakou entitu adresa
a ta obsahuje atributy stát
, město
, ulice
atd. – a nemusím kvůli tomu zkoumat data nebo zdrojový kód, abych zjistil tyhle základní informace.
IMHO nijak, protože zatímco v relační DB budu mít hnůj jen tam, kde je nutný (kraje/provincie u cizích států) v nerelační databázi budu mít hnůj všude (budou tam samé dvojice klíč-hodnota bez pevné struktury).bez fantazie to jde tezko... neprogramujes nahodou v jave? IMHO jedno z reseni je mit entitu adresa, ktera bude mit vic tvaru napr. ,,cz-adresa'' (majici atributy: ulice, cislo popisne/orientacni, mesto, psc, zeme) a pak treba ,,us-adresa: cislo popisne, ulice, apt/suit, mesto, zip, stat, zeme'' a pak treba obecna adresa: ,,radek1, radek2, radek3, zeme'' ... ano jde to udelat i v relacni db, ale neni to zrovna nejhezci... skutecnost, ze mas vic typu adres, musis resit v DB i v aplikaci... bez schematu ten problem resis jen v aplikaci
Pokud budu v relační tabulce řešit kraj nikoli odkazem na číselník krajů, ale jako varchar, ......nechapu k cemu se to vztahuje...
Hezké příklady, ale neukazují nedostatky relačních databází a předem daných schémat, ale chybu analýzy.To je právě ono - těch chyb analýzy je v reálné praxi až moc a v podstatě největší problém jaký v oblasti softwarového inženýrství existuje (a se kterým se již alespoň 20 let bojuje). Ne-SQL je prostě jenom jeden z další řady pokusů a zlepšení situace jako bylo OOP, agilní metodiky, dnes třeba funkcionální programování či dynamické jazyky. Osobně si nemyslím že by to byla nějak zvlášť úspěšná vlna, na většinu stávajících problémů je asi relační databáze lepší. Ale na tom vůbec nezáleží, jediné důležité je co ukáže praxe. A to ať si každý vyřeší sám, zda si pro svůj projekt zvolí správně.
To je právě ono - těch chyb analýzy je v reálné praxi až moc a v podstatě největší problém jaký v oblasti softwarového inženýrství existuje (a se kterým se již alespoň 20 let bojuje)obavam se, ze moc zpusobu, jak zlepsi kvalitu analyzy neni... a je spis potreba podivat se na zpusob vyvoje, ktery umozni efektivne reagovat na nedostatky (a omezene moznosti analyzy)... viz ony agilni metodiky nebo ,,dynamicke'' jazyky...
Osobně si nemyslím že by to byla nějak zvlášť úspěšná vlna, na většinu stávajících problémů je asi relační databáze lepší.relacni db jsou na spoustu veci dobre... ale treba u tech webovych aplikaci zacinam pochybovat a myslim, ze veci typu couchdb muzou pomoct prekonat nektere problemy... par let zpatky jsem byl deprimovany z toho, jak zakaznici neustale meni pozadavky a ovlivnen dynamickymi jazyky a hlavne schemem jsem si napsal hybrid mezi ORM a no-sql db (tehdy jsem ani nevedel, ze neco takoveho existuje)... a prekvapilo me, jak to zrychlilo vyvoj a udrzbu cele aplikace...
obavam se, ze moc zpusobu, jak zlepsi kvalitu analyzy neniA co kdyby analýzu nedělal ten, kdo neumí programovat, ale ten, kdo má analytické myšlení?
Nad relační databází zase řešíš hned dva jazyky zároveň
A to je problém? Běžně můžeš mít v aplikaci pět jazyků:
Je to moc? Bylo by lepší to psát všechno jedním jazykem? Kterým?
Map
a List
, takže je lze použít se syntakticým cukrem [name: "Ladicek", age: 27]
nebo ["sci-fi", "fantasy", "horor"]
. Ale v tom mi asi rozumíš, a máš svoje důvody, proč Groovy nepoužít.
Taky mi teda uniká to bezbolestné (vs. bolestné) mapování na objektySerializace a deserializace je velice snadné uložení a načtení objektu, asi to nejsnadnější.
Proč by se človek nemohl hrabat v datech uložených v bezschémové databázi "z jineho jazyka"?To bylo myšleno jako výhoda serializace do XML oproti serializaci do nějakého blobu. Ale připomněl jsi mi tím jednu věc, kterou jsem chtěl napsat už dřív. Databáze se schématem IMHO daleko líp podporuje vrstvenou architekturu. Typicky: data → aplikační logika → prezentační logika. Takže když dojdeš k tomu, že aplikace není už dost dobrá a chtěla by přepsat, můžeš si nechat databází a vyměníš jen tu vrstvu nad tím. Když je ale „schéma“ definované ve zdrojovém kódu aplikace…
Moje zkusenosti jsou, ze kazda vyrobni firma do 500 milionu kc (250 lidi, 80 pc) muze jet na systemu bez relacnich databaziA co třeba naše škola? Máme kolem 20 000 studentů + zaměstnanci + všichni bývalí uživatelé. Studijní systém běží samozřejmě nad relační databází, kupoval se na to Oracle za pěkných pár mega (IMHO spíš nepěkných). Systém se stará o veškerou studijní agendu (akorát účetnictví je zvlášť). Na tohle bys taky nasadil NoSQL nebo je to už za tou hranicí, kdy se systém dá ukočírovat bez jasného schématu a SQL? Kdybych to měl dělat já, tak Oracle bych si asi nevybral, ale bez relační databáze bych si takový systém nedokázal představit (resp. dokázal, ale ta představa by pak byla taková, že projekt dopadne blbě a asi se systém vůbec nespustí).
.cz
by se o tématu mělo mluvit víc, než se děje (pár článků nebo blogů jsem zaznamenal, ale bylo jich dost málo). Nepovažuje se za odborníka na dané téma, vlastně se nepovažuje za odborníka na žádné téma, ačkoliv o spoustě témat s oblibou odborně žvaní, ale tak nějak neviděl jinou možnost Zdá se mi že tvůj pohled je silně ovlivněn zkušenostmi s relačními databázemi a nejsi moc otevřen jinému přístupu...
To ani omylem. Já nejsem žádný SQL guru ani fanatik, od obého tu jsou jiní . Naopak bych velmi ocenil článek typu: "máme miliardu záznamů a takhle to děláme efektivněji než to skladovat v relační DB". Tenhle článek je typu, "tu miliardu záznamů máme sice pořád v DB, ale věci které tento konkrétní DB server neumí si děláme bokem".
Zkrátka z toho článku mám pocit, že změnou schématu či db serveru by dosáhli téhož mnohem efektivněji, přičemž nepochybuji o jejich odborných kvalitách.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.