abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 06:33 | Komunita

    Přímý přenos (YouTube) z konference LinuxDays 2024, jež probíhá tento víkend v Praze v prostorách Fakulty informačních technologií Českého vysokého učení v Praze (FIT ČVUT). Na programu je spousta zajímavých přednášek.

    Ladislav Hagara | Komentářů: 0
    včera 07:11 | IT novinky

    Elon Musk na akci We, Robot (YouTube, 𝕏) představil Robotaxi, Robovan a vylepšeného Tesla Bota (Optimus).

    Ladislav Hagara | Komentářů: 25
    včera 06:33 | IT novinky

    Internet Archive je offline (𝕏, Bluesky, Mastodon‪). Unikly údaje 31 milionů uživatelů. Probíhal / probíhá na něj DDoS útok.

    Ladislav Hagara | Komentářů: 0
    včera 05:22 | Komunita

    Alyssa Rosenzweig se v příspěvku na svém blogu rozepsala o hraní AAA her na Asahi Linuxu. Na YouTube je záznam její včerejší přednášky na XDC 2024 (X.Org Developer's Conference).

    Ladislav Hagara | Komentářů: 7
    včera 04:55 | IT novinky

    Vláda schválila Národní polovodičovou strategii: Česká republika má velký potenciál stát se významným hráčem v oblasti výroby čipů, zejména v evropském měřítku. Využít tento potenciál je cílem Národní polovodičové strategie, kterou připravilo Ministerstvo průmyslu a obchodu ve spolupráci s experty, a která navazuje na evropský Akt o čipech.

    Ladislav Hagara | Komentářů: 2
    10.10. 18:11 | Zajímavý software

    V lete vyšiel Aeonwave 4.0, ktorý niekoľkonásobne menej vyťažuje procesor pri interpretácií priestorového zvuku než OpenAL Soft. Autor hľadá prispievateľov do knižnice libaaxopenal za účelom pridania ALC_EXT_EFX rozšírení využívaných napr. v hre Doom 3 cez port Dhewm3 v Linuxe.

    atirage21 | Komentářů: 5
    10.10. 15:33 | Nová verze

    Linuxová distribuce Ubuntu 24.10 „Oracular Oriole“ byla vydána. Jde o průběžné vydání s podporou 9 měsíců. Obsahuje mj. Linux 6.11 či GNOME 47 s několika odkazy na první vydání Ubuntu (4.10 „Warty Warthog“) před 20 lety. K dispozici jsou také oficiální deriváty s odlišnými výchozími desktopovými prostředími anebo balíky aplikací.

    Fluttershy, yay! | Komentářů: 2
    10.10. 13:55 | Nová verze

    Deno (Wikipedie), běhové prostředí (runtime) pro JavaScript, TypeScript a WebAssembly, bylo vydáno v nové major verzi 2.0 (YouTube). Důležité změny v Migration Guide.

    Ladislav Hagara | Komentářů: 3
    10.10. 13:33 | Nová verze

    Apache Tomcat (Wikipedie) slaví 25 let. Při té příležitosti byla vydána nová verze 11.0. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    10.10. 12:44 | Nová verze

    Open source 3D herní a simulační engine Open 3D Engine (O3DE) byl vydán v nové verzi 24.09.0. Přehled novinek v poznámkách k vydání. O3DE má nového maskota: Odie.

    Ladislav Hagara | Komentářů: 0
    Rozcestník

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

    19.1.2023 10:45 iko | skóre: 7
    ako sa v SQL riesi behanie po zaznamoch ako v DBF
    Přečteno: 1475×
    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.2023 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.2023 11:32 iko | skóre: 7
    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.2023 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.2023 17:06 z_sk | skóre: 34 | 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.2023 17:50 z_sk | skóre: 34 | 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.2023 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.2023 06:43 okbobcz | skóre: 8
    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.2023 06:53 okbobcz | skóre: 8
    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.2023 13:57 iko | skóre: 7
    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.2023 14:18 iko | skóre: 7
    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.2023 14:28 okbobcz | skóre: 8
    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.2023 15:42 z_sk | skóre: 34 | 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.2023 01:59 BoneFlute | skóre: 3
    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.2023 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.2023 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.
    6.3.2023 18:01 johnyK | skóre: 2 | blog: uxblog
    Rozbalit Rozbalit vše Re: ako sa v SQL riesi behanie po zaznamoch ako v DBF
    takovy zasadni clanek k teto problematice viz:

    https://use-the-index-luke.com/sql/partial-results/fetch-next-page

    Vpodstate je tam popsano to, co zde nekteri uz uvedli, (tedy pro kazdych X-pristich radku pouzit select s omezenim ...limit)

    To co jste se zde od diskutujicich nedovedel, totiz pouziti 'row-value-syntaxe' ve where klausuli a nutnost vicesloupcoveho indexu, kdyz pouzijete ORDER BY na no-uniq sloupec- to vse je v tom clanku vysvetleno.

    Vlastnimi testy mohu potvrdit to co pise autor v clanku, ze ta row-value-syntxe je 'spravne' implementovana pouze u Oracle a postgresql. Ostatni databaze jako treba mysql tomu prikazu take rozumi, ale provadi ho 'hloupe', t.zn, ze cim dale se s kazdym next-select vzdalujeme od prvniho nacteni dat, tim to trva dele. V tom uvedenem clanku je k tomu pekny diagram.
    Petr Maleček avatar 11.3.2023 09:41 Petr Maleček | skóre: 29 | Plzeň - Bolevec
    Rozbalit Rozbalit vše Re: ako sa v SQL riesi behanie po zaznamoch ako v DBF
    Tak teoreticky můžeš používat výraz "LIMIT". Čili pokud víš, že Tvá aplikace zobrazuje najednou třeba 50 řádků, tak určitě je tam nějaký dotaz, který zjistí, kolik řádků celkem tabulka má a pak víš, že:
    
    Počet záznamů v DB / 50 = počet stránek (zaohrouhlit na celé nahoru)
    
    A tím pádem můžeš SELECTovat stylem:
    
    SELECT * FROM tabulka ORDER BY klíč LIMIT 0,49
    
    kdy LIMIT = (současná stránka * 50) - 1, (současná stránka * 50 + 50) - 1.
    LinMuck, WinFuck :-P

    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.