abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 21:44 | Komunita

    Fedora 38 nabídne celý Flathub. Od Fedory 35 platí, že pokud si v edici Workstation při úvodním nastavení povolíte zdroje třetích stran, nastaví se vám mezi těmito zdroji také Flathub. Ten k dnešnímu dni nabízí zhruba 2000 aplikací ve formátu Flatpak, mezi nimiž naleznete i ty proprietární, které ve Fedoře nejsou k dispozici. Doteď se ale Flathub nastavoval pouze ve filtrované podobě. Dokud si uživatel sám Flathub nepřidal, měl z tohoto

    … více »
    Ladislav Hagara | Komentářů: 0
    včera 15:11 | Nová verze

    Memtest86+ (Wikipedie), svobodný nástroj pro kontrolu operační paměti, byl vydán ve verzi 6.10. Hlavní novinkou je podpora Secure Bootu.

    Ladislav Hagara | Komentářů: 1
    včera 13:33 | Zajímavý software

    Fathy Boundjadj představil webový prohlížeč běžící v terminálu s názvem Carbonyl. Postaven je na Chromiu. Podobný prohlížeč je Browsh. Ten je postaven na Firefoxu.

    Ladislav Hagara | Komentářů: 8
    včera 09:00 | Nová verze

    Byla vydána nová verze 33.1, tj. první stabilní verze nové řady 33, svobodného multimediálního centra MythTV (Wikipedie). Přehled novinek a vylepšení v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    včera 00:11 | Nová verze

    OpenTTD (Wikipedie), tj. open source klon počítačové hry Transport Tycoon Deluxe, byl vydán v nové stabilní verzi 13.0. Přehled novinek v seznamu změn. OpenTTD lze instalovat také ze Steamu.

    Ladislav Hagara | Komentářů: 1
    5.2. 23:44 | Pozvánky

    Jako každý měsíc je zde Virtuální Bastlírna s novinkami ze světa bastlení, elektroniky, vědy a techniky. Tento měsíc se navíc opravdu urodilo. Co si tedy bastlíři z projektu MacGyver.sh připravili? Ze světa software například zajímavá betaverze LTSpice 17.1, která umí počítat charakteristiku spínaných zdrojů z tranzientní simulace. Zároveň je tu první release candidate KiCADu 7 a brzy by měla být plnohodnotná verze 7. Nebo třeba

    … více »
    bkralik | Komentářů: 0
    4.2. 19:11 | Zajímavý projekt

    Na YouTube byl představen projekt Open Assistant. Dle vývojářů se jedná o open source alternativu k ChatGPT aneb konverzační umělou inteligenci pro každého. Vývoj probíhá na GitHubu.

    Ladislav Hagara | Komentářů: 6
    3.2. 14:44 | Komunita

    Fedora Magazine informuje o Shell & Display Next hackfestu zaměřeném na vylepšení podpory HDR, VRR a dalších grafických technologií na Linuxu. Hackfest proběhne 24. až 26. dubna v Brně.

    Ladislav Hagara | Komentářů: 14
    3.2. 14:00 | IT novinky

    Společnost Razer představila svou novou bezdrátovou myš Razer Viper Mini Signature Edition. Je z hořčíkové slitiny a váží pouze 49 gramů. Její cena je 279,99 dolarů (6 tisíc korun).

    Ladislav Hagara | Komentářů: 0
    3.2. 10:00 | Komunita

    O víkendu probíhá v Bruselu konference FOSDEM 2023 (Free and Open source Software Developers’ European Meeting). Program konference je velice nabitý: 34 místností, 63 tracků, 787 přednášejících, 775 přednášek, prezentací a workshopů. Sledovat je lze i online. K dispozici budou jejich videozáznamy. Aktuální dění lze sledovat na sociálních sítích.

    Ladislav Hagara | Komentářů: 4
    Napovídání kódu založené na strojovém učení (např. GitHub Copilot) při programování
     (40%)
     (13%)
     (9%)
     (38%)
    Celkem 53 hlasů
     Komentářů: 4, poslední 3.2. 13:10
    Rozcestník


    Dotaz: ako sa v SQL riesi behanie po zaznamoch ako v DBF

    19.1. 10:45 iko | skóre: 6
    ako sa v SQL riesi behanie po zaznamoch ako v DBF
    Přečteno: 362×
    Zdravim

    Zaujimala by ma teoreticka otazka. Mame tabulku s 500000 riadkami. V programoch casto byva grid s riadkami, kde mozem volne behat kurzorom. Ako sa to na pozadi riesi? Ked budem selektovat 50 tisic riadkov, tak tej DB bude trvat dlho, kym ich nacita a posle do aplikacie. Co ak chcem na zaciatku skocit na koniec tabulky? Mozem dat v DB offset a skocit na koniec, ale to musim vediet, kolko je tam riadkov, takze este k tomu selektu dat SELECT count(*), co je dalsie zdrzanie. Mozem pouzit cursor a volne behat s "kurzorok" po db a citat len riadky, ktore chcem, ale stale musim vediet, kolko ma tabulka riadkov a navyse ten kurzor musim dat do tranzakcie. Dalej, ak dam v gride nieco vyhladat, hladam to zas cez dalsi selekt alebo hladam v pameti z nacitanych dat?

    Cele to porovnavam so starou DBF, kde sa volne behalo po zaznamoch prikazmi prev next atd... A uvazujme SQL PostgreSQL.

    Vdaka za nakopnutie...

    Odpovědi

    19.1. 11:24 X
    Rozbalit Rozbalit vše Re: ako sa v SQL riesi behanie po zaznamoch ako v DBF
    Treba tady se po kliknuti na "dalsi stranku" posila XHR POST, ktery obsahuje obycejny SELECT a aktualni pozici. Pokdu chces vedet detaily fungovani nejakho tveho IDE pro DBF tak se koukni do zdrojaku, nebo sem napis o jake konkretni aplikaci to vlastne pises.
    19.1. 11:32 iko | skóre: 6
    Rozbalit Rozbalit vše Re: ako sa v SQL riesi behanie po zaznamoch ako v DBF
    nejedna sa o web stranku ale nativnu aplikcaciu, napr nejake uctovnictvo alebo co
    19.1. 12:20 X
    Rozbalit Rozbalit vše Re: ako sa v SQL riesi behanie po zaznamoch ako v DBF
    Aplikace, neznama. Jazyk, neznamy. Pristup k DBF databazi, neznamy. Zbyva hadat.
    19.1. 17:06 debian+ | skóre: 33 | blog: analyzy
    Rozbalit Rozbalit vše Re: ako sa v SQL riesi behanie po zaznamoch ako v DBF
    Ako sa to na pozadi riesi?
    Riadky maju jeden extra slpec id, ktore je indexovany. A operacie sa vykonavaju cez ten index.
    Ked budem selektovat 50 tisic riadkov, tak tej DB bude trvat dlho, kym ich nacita a posle do aplikacie.
    Zalezi, ake dotazy napises. Je rozdiel volat po kazdom riadku alebo naraz 50k riadov od DB.
    Co ak chcem na zaciatku skocit na koniec tabulky?
    None problem:
    ; 500 riadkov od konca
    SELECT name from user ORDER BY user_id DESC LIMIT 500
    
    Mozem pouzit cursor a volne behat s "kurzorok" po db a citat len riadky, ktore chcem, ale stale musim vediet, kolko ma tabulka riadkov a navyse ten kurzor musim dat do tranzakcie.
    Mozes behat po DB a nepoznat rozmery. Behas cez id (ktore je casto autoincrement pri pridany noveho zaznamu, t.j. je jedinecne pre kazdy riadok).
    ;Prvych desat zaznamov od offsetu s id=53.
    SELECT id, name from user where user_id >= 53 LIMIT 10
    
    Dalej, ak dam v gride nieco vyhladat, hladam to zas cez dalsi selekt alebo hladam v pameti z nacitanych dat?
    To by mala spravne riesit DB. DB Ti len serviruje, co chces. Ono je optimalizovana nejako na "big data".
    debian.plus@protonmail.com
    19.1. 17:50 debian+ | skóre: 33 | blog: analyzy
    Rozbalit Rozbalit vše Re: ako sa v SQL riesi behanie po zaznamoch ako v DBF
    oprava: … (ktore je zvycajne autoincrement pri pridany noveho zaznamu, t.j. je jedinecne pre kazdy riadok).
    debian.plus@protonmail.com
    22.1. 11:59 tap
    Rozbalit Rozbalit vše Re: ako sa v SQL riesi behanie po zaznamoch ako v DBF
    Prakticka odpoveď na to, je že takto sa s sql databázami nepracuje. Aký má zmysel aby niekto dostal na obrazovku 500 000 záznamov... a čo by s tými záznamami robil... V účtovníctve účtovníka zaujíma napríklad... pohľadávky a záväzky u daného obchodného partnera. Alebo aký je zostatok na účte 132.987... alebo prečo nieje vypárovaný účet xyz.abc, alebo napríklad prepočet hodnoty zásob podľa kurzu platného v čase xy. Zobrazenie 500 000 raw radkov v praxi nieje bežný use case. Nešpekuluj v prvom kole čo je rýchla operácia. Pri 500 000 riadkoch je rýchle hocičo. A pri databázach máš mnoho nástrojov ako keď je niečo pomalé ako to zrýchliť.
    23.1. 06:43 okbobcz | skóre: 3
    Rozbalit Rozbalit vše Re: ako sa v SQL riesi behanie po zaznamoch ako v DBF
    U souborových databází je to jednoduché a nativní. U SQL databází už je to o dost horší, a u aplikací s web přístupem jsou jen špatná a ještě horší řešení (pokud se snažíte emulovat přístup souborových databází). Pokud máte tlustého klienta, tak můžete používat kurzor, který alespoň v Postgresu umí přesun na konec tabulky, a pokud použijete obousměrný kurzor, tak můžete se vrátit i zpět na začátek. Celé je to náročnější než u souborových databází. Tam se iterovalo přímo nad souborem. U SQL to jednak není možné, a také se bere že je to nesmyslné - že většinou chcete pracovat s filtrovaným řazeným snapshotem. Navíc díky podstatně výkonnější podpoře víceuživatelského přístupu (souborové databáze měly klasické zamykání, dnes se téměř všude používá MGA, která redukuje blokující zámky), už databáze neví kolik přesně je v tabulce řádků, a opět se bere, že je to dost nezajímavé číslo, protože většinou budete pracovat s filtrovanými snapshoty.

    V praxi se setkávám se zákazníky, kteří emulovali interface souborových databází, a nějak jim to fungovalo s daty, které odpovídali velikostí těm souborovým databázím. Pokud ale například chtějí slučovat databáze, přecházejí skutečně na klient režim, kdy jedna databáze obslouží tisíce nebo desetitisíce uživatelů, tak mají dost velké problémy. Bohužel z mého pohledu neřešitelné.

    Doporučovaná cesta je zapomenout na klasické stránkování - pokud možno implementovat kontinuální stránkování, které vede na dotazy typu SELECT FROM xx WHERE hodnota > posledně zobrazená AND filtr ORDER BY yyy LIMIT 10.

    U tlustých klientů se používají holdable kurzory s asynchronně načítanými daty do gridu.

    Je zásadní si uvědomit, že u SQL databází klient server jde o úplně jiné paradigma. U souborových databází iteruji fakticky nad lokálním souborem (nebo semi lokálním) a je mi jedno jak dlouho a v jakém objemu. U SQL klient server databáze je základem rychlé aplikace omezit na minimum objem komunikace mezi klientem a databází. Jsou tam i jiná měřítka. Většina souborových databází měla maximální velikosti tabulek (případně databází v jednotkách GB) (nějaké lokální účetnictví mělo málokdy více než pár MB). U SQL databází jsou relativně běžné tabulky, které mají stovky GB.
    23.1. 06:53 okbobcz | skóre: 3
    Rozbalit Rozbalit vše Re: ako sa v SQL riesi behanie po zaznamoch ako v DBF
    Ještě jedna poznámka - u souborových databází se prakticky nepoužívaly cache (bylo málo paměti pro kód natož aby se používala jako cache), což bylo pomalé, ale dost věcí to zjednodušovalo. Dnešní výkonné OLTP databáze brutálně používají cache (jak pro čtení, tak i pro zápis). Je to mnohem výkonnější, ale některé mentální modely (přístupy, postupy), které se používaly u souborových databází, prostě nejde aplikovat.
    23.1. 13:57 iko | skóre: 6
    Rozbalit Rozbalit vše Re: ako sa v SQL riesi behanie po zaznamoch ako v DBF
    Dakujem za odpovede

    Presne to som si aj myslel ako pise napr tap, ze sa musi zmenit pristup k tym datam a nemoze sa to byt rovnako ako pri riadkovej db. Problem je v tom, ze zadavatel to chce mat presne ako to bolo v riadkovej, teda grid, kde sa nacita komplet vsetko a rychly pohyb kurzorom.
    23.1. 14:18 iko | skóre: 6
    Rozbalit Rozbalit vše Re: ako sa v SQL riesi behanie po zaznamoch ako v DBF
    Ja to momentalne robim cez ten kurzor, taham len to co potrebujem zobrazit. Ale na zaciatku spocitam pocet zaznamov aby som vedel nastavit grid. Teroeticky viem ten pocet zrusit a grid bude mat neznamy pocet riadkov, scrollbar bude v podstate nefunkcny, v 3 polohach navrchu, v strede, na spodu.

    Co ale ked chcem vyhladat v niektorom poli nejaku hodnotu v tom gride? Bud nacitam vsetky riadky a pohladam sam, alebo zistim selektom id riadku, poslem dalsi selekt na id > to_id a limit 10 a este jeden id < to_id limit 10 aby som ziskal 10 riadkov nad a 10 pod tym najdenym (preto aby som vedel zobrazit najdeny riadok v strede gridu).

    Uvazujem dobre?
    23.1. 14:28 okbobcz | skóre: 3
    Rozbalit Rozbalit vše Re: ako sa v SQL riesi behanie po zaznamoch ako v DBF
    Všechno je o velikosti dat, zatížení a chytrosti gridu. Pokud máte málo dat nebo malou zátěž, tak to nemusíte řešit. V opačném případě to chce používat grid, který si na pozadí čte data z kurzoru a průběžně si aktualizuje scrollbar. Pokud nenačtete všechna data do gridu, tak pozice scrollbaru je jen menší nebo větší fake.
    23.1. 15:42 debian+ | skóre: 33 | blog: analyzy
    Rozbalit Rozbalit vše Re: ako sa v SQL riesi behanie po zaznamoch ako v DBF
    Teroeticky viem ten pocet zrusit a grid bude mat neznamy pocet riadkov, …
    Ak su operacie, ked sa nema menit tabulka, tak vies ju uzamnut (napr. zakazat pridavat novy riadky), kym sa nevykona nejaky Tvoj prikaz. A potom ju opat odomknes.
    Co ale ked chcem vyhladat v niektorom poli nejaku hodnotu v tom gride? Bud nacitam vsetky riadky a pohladam sam, alebo zistim selektom id riadku, poslem dalsi selekt na id > to_id a limit 10 a este jeden id < to_id limit 10 aby som ziskal 10 riadkov nad a 10 pod tym najdenym (preto aby som vedel zobrazit najdeny riadok v strede gridu).
    Postup dobry. Realizacia kus nie najlepsia. Da sa to zapisat v jednom prikaze:
    SELECT full_name, born_year FROM users
    WHERE user_id in (
       SELECT user_id WHERE user_id < 91 and obec = "Presov" LIMIT 9
    ) OR user_id in (
       SELECT user_id WHERE user_id >= 91 and obec = "Presov" LIMIT 10
    )
    
    debian.plus@protonmail.com
    26.1. 01:59 BoneFlute | skóre: 2
    Rozbalit Rozbalit vše Re: ako sa v SQL riesi behanie po zaznamoch ako v DBF
    Ve skutečnosti jsou rozdíly minimální.

    Když si zobrazíš grid z DBF, tak se tam taky nevyleje celá databáze. Ale jenom to okýnko co se vejde na obrazovku. (Ačkoliv setkal jsem se s... ehm. Budeme se bavit o normálních aplikacích.)

    Takže když pomocí toho next dojdeš na kraj seznamu, tak se na pozadí načte dalších dvacet záznamů.

    No, a u SQL je to úplně stejné. Jen je tam jiná syntaxe, jinak se získávají data, je tam deklarativní architektura, takže načítání dat je extrémně optimalizované.

    Poznámka pro nakopnutí 1: "Mozem dat v DB offset a skocit na koniec" - no, můžeš. Ale co je to vlastně konec? Vyfiltrovaný seznam z původních 500000řádků, omezených filtrem na 100000, seřazených podle názvu sestupně - má konec jinde.

    Poznámka pro nakopnutí 2: "co je dalsie zdrzanie" - SQL databáze jsou rychlejší než staré souborové databáze.

    Poznámka pro nakopnutí 3: "hladam to zas cez dalsi selekt alebo hladam v pameti z nacitanych dat" - zde tě mate zkušenost ze souborových databází, které jednak byly jednouživatelské, a druhak často spojovali databázi a UI.

    SQL je čistě databázový engine. Samozřejmě ti nic nebrání vytvořit si filtrování na načtenými daty v paměti, ale dle mé zkušenosti to nikdy nebyl dobrý nápad.

    Jak budeš řešit problém, kdy si vypíšeš záznamy z tabulky a než si cokoliv rozmyslíš, tak ti tam nové záznamy přitečou, některé se změní...?
    26.1. 09:36 rastos | skóre: 62 | blog: rastos
    Rozbalit Rozbalit vše Re: ako sa v SQL riesi behanie po zaznamoch ako v DBF
    Poznámka pro nakopnutí 1: "Mozem dat v DB offset a skocit na koniec" - no, můžeš. Ale co je to vlastně konec? Vyfiltrovaný seznam z původních 500000řádků, omezených filtrem na 100000, seřazených podle názvu sestupně - má konec jinde.

    Presne. Tabuľka v SQL nemá nejaké definované poradie. Prakticky je to množina riadkov.

    Ak sa bavím o rýchlosti, tak v prvom kole by som sa pozrel na to, koľko dát s má preniesť a aká je prenosová rýchlosť. Povedal by som, že DB dodá dáta tak rýchlo, ako to disk a sieť dovolí. Rozdiel začne byť až pri komplikovanejších query, ale podľa toho čo tu bolo napísané tak query je niečo ako "select * from tabulka". Žiadne "join", žiadne "where". Ak je to pomalé, tak DB na vine nie je.
    26.1. 21:34 Filip Jirsák | skóre: 68 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: ako sa v SQL riesi behanie po zaznamoch ako v DBF
    Když budete číst 50 tisíc řádků z jedné tabulky podle indexu nebo bez řazení, nebude to trvat dlouho. Pro stránkování se používá LIMIT a OFFSET nebo něco podobného (PostgreSQL umí LIMIT a OFFSET). Pokud chcete záznamy číst postupně, používají se k tomu kurzory – ale není to nejběžnější způsob použití SQL databáze.

    Založit nové vláknoNahoru

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

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.