Portál AbcLinuxu, 1. května 2025 07:40

Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Vložit další komentář
edois avatar 29.9.2012 00:48 edois
Rozbalit Rozbalit vše Re: Viacjazyčné dáta v SQL databáze
Odpovědět | Sbalit | Link | Blokovat | Admin
Join není nevýhoda, ale esenciální vlastnost relačních databází. Rozhodně není třeba se ho bát, protože i obyčejnější relační databáze jako MySQL na to použijí indexy a berou v potaz i jejich kardinalitu a pokud s tím neděláme naprosto šílené brikule, není většinou potřeba jim do toho kecat (u MySQL se akorát hodí jednou za čas provést ANALYZE TABLE na všechny tabulky s cizími klíči, aby databáze měla tu kardinalitu nastavenou dobře). Samozřejmě mluvím o INNER JOINu, nikoliv o např. LEFT JOINu, tam už samozřejmě vliv na výkon je (a u MySQL mám na mysli InnoDB, MyISAM stejně cizí klíče neumí, což ovšem neznamená, že tam nejdou udělat příslušné "obyčejné" indexy, aby joiny nezdržovaly).

Další věc je to, že ten, kdo databázi navrhuje, by měl obecně optimalizovat schéma jako takové tak, aby měl rychlé updaty (a inserty a delete) a teprve potom řešit jak to rozumně najoinovat (a jaké mít vytvořené indexy pro WHERE, GROUP BY a ORDER BY), protože většinou bývá úzké hrdlo na straně zápisů (slave mašin můžu mít co hrdlo ráčí, s masterem to bývá horší).

Takže za mě rozhodně poslední možnost, tj. překlady v oddělené tabulce (joiny nevadí, nemám nikde zbytečně duplicitní data, nenafukují se mi tudíž indexy, při přidání jazyka nemusím dělat alter, který může taky dopadnout tak, že se celá tabulka musí zkopírovat atd.).

A ještě poradím, že (v případě MySQL) vážně není nutné mít IDčka jazyků jako inty, pokud mám 64bit architekturu (což už je snad dneska jediná rozumná myslitelná varianta), pořád mi vychází líp CHAR(2) pro dvoupísmenné jazykové kódy ('en', 'cs', ...), případně CHAR(5) pro pětipísmenné ('en_US', 'en_GB', 'cs_CZ', ...) nebo dvakrát CHAR(2), kde druhý může být NULL, pro pětipísmenné s defaultem.
mirec avatar 29.9.2012 07:49 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: Viacjazyčné dáta v SQL databáze

Dovolím si o výkone JOINu tak trochu nesúhlasiť. Robievam s dosť veľkými databázami a nie len MySQL, ale aj s podstatne výkonnejšou PostgreSQL. Joiny (LEFT aj INNER) môžu mať podstatný vplyv na výkon. Nedávno som riešil problém s pomalým selectom (~2s). Po odstránení joinu klesol čas na ~0.01s. Samozrejme indexy boli nastavené správne a join ich používal.

Problémom v mojom prípade bola veľkosť tabuľky (> 100 000 riadkov) a výber 10 prvkov s offsetom 100 000. Pri výbere bez joinu to pre databázu znamená jednoduchý odskok na 100 000 pložku a vrátenie 10 nasledujúcich položiek. Operácia join však môže vrátiť aj viac, alebo menej riadkov než je v prvej tabuľke. Preto musí databáza pri offsete 100 000 skutočne vykonať join na 100 000 riadkoch. Ak samozrejme ide len o výber s malým offsetom bude mať join zanedbateľný vplyv.

So zvyškom príspevku súhlasím, sám dokonca nepoužívam id jazyka.

LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
Josef Kufner avatar 29.9.2012 11:04 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Viacjazyčné dáta v SQL databáze
Pokud jde join přes primární nebo unikátní klíč, tak by s tím neměl být problém. A pokud uděláš limit v subselectu a joinuješ potom, tak s tím také problém nebude. Ale pokud potřebuješ joinovanou tabulku do něčeho ve where, máš smůlu.
Hello world ! Segmentation fault (core dumped)
mirec avatar 29.9.2012 12:32 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: Viacjazyčné dáta v SQL databáze
Pokud jde join přes primární nebo unikátní klíč, tak by s tím neměl být problém.

Práve, že tu problém je pretože ten join sa minimálne v postgresql materializuje. Obísť sa to dá limitom v subselecte. Nedávno som to riešil v jednej django aplikácii. Musel som optimalizáciou zájsť až po RAW query.

LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
29.9.2012 03:29 retroslava | skóre: 9 | blog: TryCatch | Žižkoff
Rozbalit Rozbalit vše Re: Viacjazyčné dáta v SQL databáze
Odpovědět | Sbalit | Link | Blokovat | Admin
Já jsem používal trošku mix z toho co píšeš. Měl jsem dvě tabulky, kde v jedné jsou společné informace a v druhé ostatní kolonky, které je třeba přeložit. Jazyk jsem ukládal jako string (třeba cs nebo sk). A když si uděláš join a zvolíš jazyk, tak ti to vyletí jako jeden řádek zpátky.
Pozor! Jsem naprostý idiot. Co jsem napsal včera dnes už dávno neplatí. Zavazuji se, že budu diskutovat nezávazně.
bertone avatar 30.9.2012 11:40 bertone | blog: Bertone | Bratislava
Rozbalit Rozbalit vše Re: Viacjazyčné dáta v SQL databáze
Odpovědět | Sbalit | Link | Blokovat | Admin
Ahoj, v čom robíš diagrami tabuliek?
bertone avatar 30.9.2012 11:47 bertone | blog: Bertone | Bratislava
Rozbalit Rozbalit vše Re: Viacjazyčné dáta v SQL databáze
ach, diagramy...
mirec avatar 30.9.2012 12:36 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: Viacjazyčné dáta v SQL databáze
Rád by som povedal niečo rozumné, ale je to jednoducho kreslené v GIMP-e keďže nič z toho, čo som skúšal buď nebolo dosť stabilné alebo sa to nevliezlo do RAM, alebo to malo výstup vyzerajúci ako ASCII v DOS-e. Inak na reálnu prácu používam tabuľu.
LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
Josef Kufner avatar 30.9.2012 17:35 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Viacjazyčné dáta v SQL databáze
To už je lepší dia a jeho class diagramy. Btw, co graphviz?
Hello world ! Segmentation fault (core dumped)
mirec avatar 30.9.2012 19:45 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: Viacjazyčné dáta v SQL databáze
Graphviz používam na diagramy tried, ktoré sú určené len pre mňa. Na databázy neviem vykresliť koncové značky vzťahov (hrable a tak). U diagramov tried je to jednoduché - vee, diamond ...
LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
Josef Kufner avatar 30.9.2012 20:30 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Viacjazyčné dáta v SQL databáze
crow, teetee, diamond, odiamond, ... 1 544 761 different combinations
Hello world ! Segmentation fault (core dumped)
Josef Kufner avatar 30.9.2012 20:32 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Viacjazyčné dáta v SQL databáze
Btw, nechceš udělat zápisek o tom, jak generuješ ty diagramy tříd graphvizem?
Hello world ! Segmentation fault (core dumped)
mirec avatar 30.9.2012 21:07 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: Viacjazyčné dáta v SQL databáze
No ja som si na to dokonca písal vlastný nástroj, ale nedokončil som ho :-(. Inak dobrý nápad blog o graphvize, ale predtým možno niečo napíšem o AVR, a hackovaní TV LG a tak ... jednoducho čo mám čerstvo v pamäti ;-)
LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
4.10.2012 10:20 Jiří Lisický | skóre: 31 | blog: JIL_blog | Olomouc
Rozbalit Rozbalit vše Re: Viacjazyčné dáta v SQL databáze
Na nějaké jednoduché kreslení sql struktury se dá použít přímo webová aplikace http://code.google.com/p/wwwsqldesigner/. Má tam i live demo: http://ondras.zarovi.cz/sql/demo/?keyword=default
3.10.2012 15:54 Xerces
Rozbalit Rozbalit vše Re: Viacjazyčné dáta v SQL databáze
Odpovědět | Sbalit | Link | Blokovat | Admin
Já vím, že je to čistě rozlišovací označení, ale proč zrovna my jsme dvojka?
mirec avatar 3.10.2012 19:59 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: Viacjazyčné dáta v SQL databáze
Pretože u nás vychádza slnko skôr :-P Ale vážne som slovák, ako prvý ma zvyčajne napadne slovenský jazyk, žiadny hlbší význam tam nie je.
LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
Josef Kufner avatar 3.10.2012 20:28 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Viacjazyčné dáta v SQL databáze
To jo... mohl použít CHAR(2) jako primární klíč.
Hello world ! Segmentation fault (core dumped)
mirec avatar 3.10.2012 22:30 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: Viacjazyčné dáta v SQL databáze
Mohol, ale nevyzeral by som teraz ako patriot ;-)
LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
11.11.2013 17:08 he
Rozbalit Rozbalit vše Re: Viacjazyčné dáta v SQL databáze
LIKE! Som tiež patriot! :-) Ale čechom sme mohli dať 0 .. alebo -1 :-p

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.