QStudio, tj. nástroj pro práci s SQL podporující více než 30 databází (MySQL, PostgreSQL, DuckDB, QuestDB, kdb+, …), se stal s vydáním verze 5.0 open source. Zdrojové kódy jsou k dispozici na GitHubu pod licencí Apache 2.0.
Byla vydána nová verze 259 správce systému a služeb systemd (Wikipedie, GitHub).
Cloudflare Radar poskytuje aktuální informace o globálním internetovém provozu, útocích nebo trendech. Publikován byl celkový přehled za rok 2025. Globální internetový provoz vzrostl v roce 2025 o 19 %.
Správní rada americké mediální skupiny Warner Bros. Discovery (WBD) podle očekávání odmítla nepřátelskou nabídku na převzetí od firmy Paramount Skydance za 108,4 miliardy dolarů (2,25 bilionu Kč). Paramount podle ní neposkytl dostatečné finanční záruky. Akcionářům proto doporučuje nabídku od Netflixu.
Na WhatsAppu se šíří nový podvod, který ovšem vůbec nevypadá jako hackerský útok. Žádná krádež hesla. Žádné narušení zabezpečení. Žádné zjevné varovné signály. Místo toho jsou lidé trikem donuceni, aby útočníkům sami poskytli přístup, a to pouhým provedením toho, co vypadá jako běžný ověřovací krok. Bezpečnostní experti Avastu tento nový typ útoku nazývají ghostpairing, protože útočníci si při něm tiše vytvářejí „zařízení duchů“, které žije uvnitř vašeho účtu.
Český LibreOffice tým vydává aktualizaci překladu příručky LibreOffice Draw 25.8. Tato kniha se zabývá hlavními funkcemi programu Draw, vektorové grafické komponenty systému LibreOffice. Pomocí Draw lze vytvářet širokou škálu grafických obrázků. Příručka je ke stažení na stránce dokumentace a tým hledá dobrovolníky pro další překlady.
Anthony Enzor-DeMeo je novým CEO Mozilla Corporation. Mozillu převzal po dočasné CEO Lauře Chambers. Vybudovat chce nejdůvěryhodnější softwarovou společnost na světě. Firefox by se měl vyvinout v moderní AI prohlížeč.
Byla vydána nová verze 9.20 z Debianu vycházející linuxové distribuce DietPi pro (nejenom) jednodeskové počítače. Přehled novinek v poznámkách k vydání. Vypíchnout lze například nový balíček RustDesk Server pro vzdálený přístup.
Jonathan Thomas oznámil vydání nové verze 3.4.0 video editoru OpenShot (Wikipedie). Představení novinek také na YouTube. Zdrojové kódy OpenShotu jsou k dispozici na GitHubu. Ke stažení je i balíček ve formátu AppImage. Stačí jej stáhnout, nastavit právo na spouštění a spustit.
Byla vydána nová verze 1.6 otevřeného, licenčními poplatky nezatíženého, univerzálního ztrátového formátu komprese zvuku Opus (Wikipedie) a jeho referenční implementace libopus. Podrobnosti na demo stránce.
EAV je bez významu.
Proč? Minimálně má tu výhodu, že při přidávání/odstraňování atributů nebude potřeba upravovat strukturu tabulky a tím pádem jí zamykat.
Jak je to s rychlostí hstore/jsonb vs klasická dekompozice? Jak vysoká režie je spojování mnoha tabulek?
EAV je bez významu.Proč? Minimálně má tu výhodu, že při přidávání/odstraňování atributů nebude potřeba upravovat strukturu tabulky a tím pádem jí zamykat.
EAV má mnohem víc nevýhod než výhod. Tam, kde je dostupný hstore/jsonb, bude EAV pouze kulhat.
hstore/jsonb jsou dynamickými strukturami. K čemu je pak dobré zamykání tabulek? 
Jak je to s rychlostí hstore/jsonb vs klasická dekompozice? Jak vysoká režie je spojování mnoha tabulek?
Klasická dekompozice má výhody zejména v tom, že můžeš data lépe normalizovat a tím usnadnit vyhledávání - hstore/jsonb je svou povahou spíš na ukládání dokumentů.
Pomalost EAV se těžce projevuje už při jednotkách tisíc položek. Čím víc, tím hůř. Kromě toho tam jsou značné problémy s datovými typy.
Z toho vyplývá, že by se především měla dát přednost pevné struktuře. Pokud nestačí, můžeme využít služeb hstore/jsonb, případně jiných zajímavých konstrukcí.
EAV je úplně v pohodě, pokud potřebuješ data v první řadě ukládat a číst, ale nemáš velké nároky na vyhledávání.
A pokud si dokážeš udělat index pro efektivní vyhledávání nad hstore/jsonb, tak si ho dokážeš udělat i nad EAV. Akorát do toho EAV je líp vidět a snáz v něm udržíš pořádek (máš číselník/slovník atributů).
To jen aby nevznikaly nějaké zbytečné fámy, tabu a neopodstatněný strach z určitého nástroje. EAV má svoje smysluplné uplatnění stejně jako kterýkoli jiný návrhový vzor.
Rekonstrukce entity z EAV je jeden dotaz:
SELECT název, hodnota FROM eav_tabulka WHERE entita = ?
Tím mám všechny atributy dané entity1 a můžu nad nimi vyhodnotit dotaz – ať už v aplikaci nebo nějakou DB funkcí – např. a1 = 10 AND a2 > 5 AND (a3 = 'x' OR a3 = 'y').
Ano, znamená to, že musím projít všechna data, full table scan, ale kde nemusím? Když napíšu totéž jako XPath dotaz, jak si s tím PostgreSQL poradí? Budou fungovat indexy nebo budu muset projít všechny ty XML dokumenty a nad každým vyhodnotit daný XPath? Indexy pro konkrétní XPath dotazy si můžu připravit předem – ale co když předem nevím, jaké dotazy budou uživatelé klást? A jak je to se složenými dotazy (AND/OR)? Když budu mít AND/OR operátory uvnitř XPath dotazu, dokáže PostgreSQL využít jednotlivé indexy pro dílčí dotazy, které jsem si teoreticky mohl připravit předem? Minimálně bych musel udělat tolik indexů, kolik mám atributů (tisíce nebo víc), ne?
U toho EAV si dokážu představit rozdělení dotazu na dvě fáze: 1) vybrat z dotazu určité podmínky a na základě nich udělat hrubý výběr, vytáhnout si z DB podmnožinu dat; při tom se využijí indexy 2) iterovat přes tuto podmnožinu a vyhodnotit celý dotaz.
[1] BTW: původně jsem psal: „EAV je úplně v pohodě, pokud potřebuješ data v první řadě ukládat a číst, ale nemáš velké nároky na vyhledávání.“ – na zobrazení entity mi to stačí a není s tím žádný problém
Tím ale nedostanu 1 řádek, ale n řádků - a jakákoliv manipulace s těmito daty vyjma poslání dat na klienta je dost ojeb. Entitou myslím v relační databázi jeden záznam.
Dostat z toho entitu v podobě jednoho řádku je nereálné/nepraktické, protože by tam byly tisíce sloupečků, většina prázdných a jiné by obsahovaly více hodnot (asi pole).
V Postgresu jsou pro HStore a jsonb přepravené speciální indexy optimalizované na dotazy typu klíč/hodnota
Je tohle tedy doporučený způsob pro uložení atributů výrobků? Dají se nad tím psát rozumně dotazy, o kterých píšu v #4. Pokud by šlo použít jen PostgreSQL a nebylo by potřeba do toho tahat další databázový systém, tak by to bylo ideální.
Dejme tomu, že to XML bude vypadat takhle:
<produkt>
<barva>červená</barva>
<rozměrX>10</rozměrX>
<rozměrY>20</rozměrY>
<rozměrZ>30</rozměrZ>
<hmotnost>500</hmotnost>
<rozhraní>VGA</rozhraní>
<rozhraní>HDMI</rozhraní>
<rozhraní>DP</rozhraní>
</produkt>
A udělám si indexy pro jednotlivé atributy:
xpath('/produkt/barva/text()', atributy)
xpath('/produkt/rozměrX/text()', atributy)
xpath('/produkt/rozměrY/text()', atributy)
xpath('/produkt/rozměrZ/text()', atributy)
xpath('/produkt/hmotnost/text()', atributy)
xpath('/produkt/rozhraní/text()', atributy)
A pak bych ten dotaz mohl postavit tak, že AND a OR nebudou uvnitř XPathu, ale budou v SQL.
Funkce xpath() ale vrací pole a já nechci testovat přesnou shodu pole=pole, ale budu mít spíš dotaz ve stylu: pole obsahuje hodnoty A a B, pole neobsahuje hodnotu X, pole obsahuje hodnoty C nebo D. Takže do hry vstupují ještě funkce pro práci s poli – jejichž výsledky ale naindexované už nemám (protože předem nevím, na jaké hodnoty se uživatelé budou ptát a jaké AND a OR podmínky si sestaví).
Jaké je tedy lepší řešení? A vadí něčemu velký počet indexů? (kromě toho, že zabírají místo na disku)
Zrovna jsem chtěl položit podobnou otázku 
Přemýšlel jsem nad datovým modelem pro atributy produktů v obchodě. Dejme tomu, že chci udělat něco jako eBay (ale lepší samozřejmě).
Požadavky:
rozhraní = {VGA, HDMI, DVI}.Tohle je takový ideál, možná nedosažitelný, ke kterému se dá jen přiblížit…
Mám rád relační databáze, na většinu úloh je to ideální nástroj a relační databáze tam určitě bude1, takže je celkem přirozené to zkusit navrhnout nad ní. Taky je dobré minimalizovat počet použitých technologií. Na druhou stranu ve výsledku to dopadne spíš tak, že budou databáze dvě: relační na většinu dat + nějaká jiná pro atributy a hierarchie + možná ještě něco dalšího pro fulltext.
Co mě zatím napadlo:
P.S. zatím to jsou spíš teoretické úvahy a diskuse na nedělní odpoledne 
[1] fakt nechci vést účetnictví nebo údaje o klientech v nějaké bezschémové/noSQL databázi a mít tam bordel a při psaní každého dotazu si rvát vlasy
Dík, to vypadá zajímavě, musím si to prostudovat…
Ruční údržba není nijak zvlášť náročná, pokud se držíš zavedených pravidel a nevymýšlíš blbosti. SQL dotazy jsou poměrně jednoduché a snadno se slepují. Trocha práce navíc při návrhu se vyplatí. Pokud je potřebné přidat další atributy pro další typ zboží, přidá se tabulka.Právě proto, že to je celkem jednoduché, ale musí se držet pravidla, se vyplatí udělat tu zapouzdřující vrstvu nad tím. Šikovný query builder, trocha konfigurace, pěkné API a je na roky vystaráno.
To ale musím předem vědět, jaké skupiny atributů patří k jakým skupinám výrobků, ne?
Tzn. ta možnost
Dynamicky generované tabulky – pro každý atribut jedna – opět jich můžou být tisíce nebo víc. V obou předchozích případech bude zase problém s prohledáváním vícenásobných atributů.
co jsem psal výš, ne? A vícenásobné atributy filtrovat pomocí HAVING count(*).
Protože ten atribut může obsahovat víc hodnot. Buď je dáš do pole nebo z toho uděláš víc záznamů. Co se dá líp indexovat?
A co když chci atribut popisující např. rozhraní? Jeden výrobek má VGA+HDMI+DVI a druhý má VGA+DP a třetí HDMI+DP a zákazník chce vyhledat výrobky s rozhraním VGA and (HDMI or DVI or DP), tak to najdu jak?
Jedna možnost je pole nebo bitová maska (tzn. uložit těch víc hodnot do jednoho sloupce) nebo mít pro každou hodnotu atributu jeden záznam v nějaké tabulce.
Pokud počet hodnot toho atributu byl malý a konečný, tak bychom mohli mít pro každou hodnotu boolovský sloupec.
Samotný typ boolean se do databáze moc nehodí - z mého pohledu je přežitkem z doby strukturovaného programování.
Když odhlédneme od řešené úlohy: tohle bych v databázi modeloval spíš tak, že budu mít entitu výrobek, entitu rozhraní mezi nimi vazbu M:N, kde atributem té vazby může být násobnost (počet takových rozhraní) a verze by byla spíš atributem rozhraní. Ano, booleany tam potřeba nejsou, protože true/false je vyjádřeno existencí či neexistencí té vazby resp. záznamu ve vazební tabulce.
Mnohem lepší by bylo mít pomocné tabulky "vga", "hdmi", "dvi" a "dp" s náplní viz výše. Takový SELECT se pak dá napsat poměrně jednoduše i bez klauzulí WHERE či HAVING.
Problém je v tom, že atributů může být hodně a jejich hodnot ještě víc a můžou se relativně často měnit, což znamená nutnost DDL operací i v průběhu běžného používání systému. Představ si, že obchodník vyplní do formuláře detaily zboží a to vyústí ve vytváření nových tabulek a jejich plnění… to mi nepřijde jako úplně šťastné. Dalo by se to dělat asynchronně a přidat tam nějaké kontroly nebo schvalování, ale stejně mi to přijde takové zvláštní a nevím, jestli jsou na takovou dynamičnost a velké počty tabulek/sloupců databáze stavěné.
Představ si, že obchodník vyplní do formuláře detaily zboží a to vyústí ve vytváření nových tabulek a jejich plnění… to mi nepřijde jako úplně šťastné. Dalo by se to dělat asynchronně a přidat tam nějaké kontroly nebo schvalování, ale stejně mi to přijde takové zvláštní a nevím, jestli jsou na takovou dynamičnost a velké počty tabulek/sloupců databáze stavěné.Databázím je tohle šumafuk, snad jen SQLite má omezení na 2^31 tabulek. Bolestivější bude spíš omezení JOINů na 64. Na druhou stranu použití DDL za běhu obvykle ukazuje na chyby v návrhu a proto je zpravidla lepší se tomu vyhnout. Při použití vhodného prefixu názvu tabulky však ke kolizím nedojde - takovou tabulku bych obchodníkovi klidně dal na starost, pokud by aplikace generovala všechny potřebné DDL operace a byl k tomu vhodný frontend.
Tiskni
Sdílej: