Firma X zaslala předžalobní výzvu vývojáři projektu Nitter (Wikipedia), open-source alternativního frontendu k sociální síti X (ex-Twitter), a provozovatelům instancí jako XCancel, které umožňovaly číst příspěvky bez přihlášení, reklam a javascriptu. Údajně se dopouštějí „sběru dat“. Zdrojový kód Nitteru vývojář archivoval. Vývoj již dříve přerušil v roce 2024 po tehdejším omezení API X. X je dceřiná společnost SpaceXAI Elona Muska, provozující mj. kontroverzního chatbota Grok.
Bylo vydáno Ubuntu 26.04.1 LTS, tj. první opravné vydání Ubuntu 26.04 LTS s kódovým názvem Resolute Raccoon. Přehled novinek a oprav na Discourse.
Národní úřad pro kybernetickou a informační bezpečnost (NÚKIB) vydal Zprávu o stavu kybernetické bezpečnosti ČR za rok 2025 (pdf). Incidentů ubylo, sofistikovanost útočníků roste.
Open source softwarový stack AMD ROCm (Wikipedie) pro vývoj AI a HPC na GPU od AMD byl vydán v nové major verzi 10.0. S ROCm.AI. Přehled novinek v aktualizované dokumentaci.
Finanční skupina Partners se stala minulou neděli obětí kybernetického útoku, při kterém se útočníci dostali k některým osobním údajům klientů. Společnost o tom informovala ve čtvrtek. Ujišťuje, že peníze klientů nejsou v ohrožení. „Kybernetický útok zasáhl část IT infrastruktury naší společnosti. Ihned po zjištění útoku jsme s pomocí externích bezpečnostních odborníků začali intenzivně pracovat na minimalizaci škod. Útočníci se
… více »Americká technologická společnost Meta Platforms se dohodla, že zaplatí až zhruba 18 miliard dolarů (asi 373 miliard Kč) za mimosoudní urovnání sporu o závislosti dětí na sociálních sítích a provede významné změny pro jejich používání mladistvými. Téměř tři desítky států USA firmu v roce 2023 obvinily z toho, že sítě Facebook a Instagram vědomě navrhla tak, aby u dětí vyvolávaly závislost, a zatajovala tyto dopady před veřejností. Firma se
… více »Byl publikován aktuální přehled dění a novinek z vývoje Asahi Linuxu, tj. Linuxu pro Apple Silicon. Blíží se vydání podporující čipy M3. Vývojáře lze podpořit na GitHub Sponsors a Open Collective.
Kancelářský balík LibreOffice byl vydán ve verzi 26.8. Mimo jiné vylepšuje typografii a kompatibilitu s formáty MS Office, více v poznámkách k vydání.
Armbian, tj. linuxová distribuce založená na Debianu a Ubuntu optimalizovaná pro jednodeskové počítače na platformě ARM a RISC-V, ke stažení ale také pro Intel a AMD, byl vydán ve verzi 26.8. Přehled novinek v poznámkách k vydání.
Byla vydána nová verze 23.1.0, tj. první stabilní verze z nové řady 23.1.x, překladačové infrastruktury LLVM (Wikipedie). Přehled novinek v poznámkách k vydání: LLVM, Clang, LLD, Extra Clang Tools, Libc++, Polly a Flang.
Odkazy
Pri vývoji webových aplikácií je bežnou požiadavkou aby bol obsah viacjazyčný. Tento blog sa zaoberá návrhom modelov pre uloženie viacjazyčných dát a výhodami / nevýhodami jednotlivých návrhov.
Jazyk SQL neposkytuje žiadnu vstavanú podporu pre viacjazyčný obsah. Návrh databázovej schémy pre viacjazyčný obsahu tak zostáva len na databázovom programátorovi.
Na internete je možné nájsť veľké množstvo rôznych databázových schém, ktoré riešia viacjazyčný obsah. Nedá sa všeobecne povedať ktorá schéma je najlepšia. Vždy to závisí od konkrétneho prípadu použitia. V nasledujúcom texte som sa pokúsil zhrnúť výhody a nevýhody jednotlivých prístupov.
V celom blogu budem aplikovať návrh na model článkov. Polia nazov a obsah budú prekladané. Zvyšné polia budú rovnaké pre každý jazyk.
Tabuľka jazykov bude vyzerať nasledovne:
| id | kod |
|---|---|
| 1 | sk |
| 2 | cz |
V selectoch budem vyberať slovenskú lokalizáciu. Pre jednoduchosť nebudem používať join s tabuľkou jazykov. Namiesto toho budem priamo ako ID jazyka používať 1.
Pri tomto prístupe nedochádza k zmene schémy a preklady pre všetky jazyky sa ukladajú do tej istej bunky v špeciálnom formáte. Ako príklad si požičiam formát používaný pluginom qTranslate z Wordpressu. Nasledujúci kód reprezentuje český a slovenský preklad slova „Článok“.
<!--:sk-->Článok<!--:--><!--:cz-->Článek<!--:cz-->
Výber objektov je veľmi jednoduchý. Dáta je však potrebné následne spracovať v aplikácii.
SELECT vytvorene,
autor,
nazov,
obsah
FROM clanok;
Pri tomto prístupe sa do modelu pridá jediný stĺpec určujúci jazyk. Medzi jazykovými mutáciami nie je žiaden vzťah, takže v jednej jazykovej mutácii môžu byť úplne iné položky než v inej jazykovej mutácii, čo môže byť v niektorých prípadoch výhodné. Pri pridaní, alebo odstránení jazyka nie je potrebná žiadna modifikácia schémy.
Pre výber slovenských objektov stačí pridať podmienku where.
SELECT vytvorene,
autor,
nazov,
obsah
FROM clanok
WHERE jazyk = 1;
V tomto modeli bude primárnym (alebo minimálne unikátnym) kľúčom dvojica uuid a jazyk. Objekty (články) sú identifikované stĺpcom uuid. Ten bude rovnaký pre všetky preklady článku.
Výber objektov je identický ako v prípade predchádzajúceho modelu.
uuid pre objekty
Do modelu pridá každý stĺpec toľkokrát, koľko jazykov bude v aplikácii podporovaných. Nepreložené stĺpce zostávajú bez zmeny.
Pre výber položiek v konkrétnom jazyku je potrebné modifikovať samotný dotaz. Jazykové suffixy musia byť preto chránené voči SQL injection.
SELECT vytvorene,
autor,
nazov_sk AS nazov,
obsah_sk AS obsah
FROM clanok;
Oproti predchádzajúcim spôsobom sa tu využívajú 2 tabuľky - časť pôvodnej tabuľky neobsahujúca preklady a tabuľka prekladov. Tá môže byť implementovaná buď prekladmi v riadkoch, alebo v stĺpcoch.
Pri výbere sa používa v oboch prípadoch join, čo môže mať vplyv na výkon. Pri použití tabuľky s prekladmi v stĺpcoch sa pri výbere v konkrétnom jazyku zase modifikuje dotaz a je potrebné zabezpečiť ho voči SQL injection.
-- clanok_row
SELECT vytvorene,
autor,
nazov,
obsah
FROM clanok
INNER JOIN clanok_row
ON clanok.id = clanok_row.clanok_id AND jazyk = 1;
-- clanok_col
SELECT vytvorene,
autor,
nazov_sk AS nazov,
obsah_sk AS obsah
INNER JOIN clanok_col
ON clanok.id = clanok_col.clanok_id;
Na túto otázku neexistuje jednoznačná odpoveď. Ak máme pevne danú schému, ktorú nemôžeme prispôsobiť bude jediným možným spôsobom uloženie všetkých prekladov oddelených rozumne zvoleným oddeľovačom do pôvodných buniek.
V prípade, že máme rôzny obsah v každom jazyku (napr. v každom jazyku budú iné články) bude najvhodnejším riešením model bez vzťahov medzi jazykmi. Ak však budeme chcieť tie isté objekty v rôznych jazykových mutáciách budeme musieť zvoliť inú schému.
Preklady v riadkoch poskytujú vysokú flexibilitu v možnosti zmeny podporovaných jazykov. V prípade článkov sa pri prekladoch bude opakovať autor a dátum. Schému je možné normalizovať rozdelením tabuľky na samostatnú tabuľku prekladov a zvyšný obsah (posledný príklad).
Preklady v stĺpcoch zachovávajú počet riadkov rovnaký ako počet objektov. Schéma je vhodná len v prípade, že sa v budúcnosti nebude manipulovať s podporovanými jazykmi. Pri väčšom počte jazykov a stĺpcov s prekladmi môže byť táto schéma veľmi neprehľadná. Presun prekladov do samostatnej tabuľky slúži len na sprehľadnenie pôvodnej tabuľky.
Tiskni
Sdílej:
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.
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.
. 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