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í
×

dnes 03:33 | Nová verze

Byla vydána nová verze 0.25.0 multimediálního přehrávače mpv (Wikipedie) vycházejícího z přehrávačů MPlayer a mplayer2. Z novinek lze zmínit například podporu DVB-T2. Další části mpv byly přelicencovány z GPLv2 nebo novější na LGPLv2.1 nebo novější (#2033).

Ladislav Hagara | Komentářů: 0
dnes 02:22 | Zajímavý projekt

Na Bundle Stars byla spuštěna akce Dollar Forever Bundle. Za 1 dolar lze získat 24 počítačových her bežících na platformě Steam také v Linuxu.

Ladislav Hagara | Komentářů: 0
včera 23:44 | Zajímavý software

Lychee je jedním z open source softwarů pro tvorbu webových fotoalb. Vyžadováno je PHP 5.5 nebo novější a MySQL. Ukázka na stránkách projektu. Zdrojové kódy jsou k dispozici na GitHubu pod open source licencí MIT [reddit].

Ladislav Hagara | Komentářů: 0
včera 22:22 | Zajímavý software

Společnosti Haivision a Wowza společně oznámily vznik SRT Alliance a otevření protokolu pro streamování videa SRT. Podrobnosti v FAQ. Zdrojové kódy SRT jsou k dispozici na GitHubu pod open source licencí LGPLv2.1.

Ladislav Hagara | Komentářů: 0
včera 12:33 | Humor

Byl vydán remake filmu Ghost in the Shell. Tentokrát v Bashi. Zhlédnout lze online na "ssh ghost@theshell.xyz" [Hacker News].

Ladislav Hagara | Komentářů: 13
23.4. 20:40 | Zajímavý článek

Lukáš Růžička v článku S Hydrogenem za lepší rytmus aneb bubeníkem snadno a rychle na MojeFedora.cz představuje automatického bubeníka s názvem Hydrogen (Wikipedie): Hydrogen je velmi vydařený program, který rozhodně nesmí chybět ve výbavě žádného linuxového muzikanta. Umožňuje nejen vytváření jednoduchých bicích doprovodů, ale také sofistikované programování bicích a perkusí, jehož výsledek se naprosto vyrovná drahým

… více »
Ladislav Hagara | Komentářů: 14
23.4. 13:55 | Zajímavý projekt

UPSat (Twitter) je první open source nanodružice (CubeSat). Jedná se o společný projekt nadace Libre Space Foundation a University of Patras. Repozitáře projektu jsou k dispozici na GitHubu. Pod Libre Space Foundation patří také projekt SatNOGS (zprávička), projekt globální sítě open source pozemních satelitních stanic, vítězný projekt soutěže The Hackaday Prize 2014. UPSat je součástí mise QB50 (Twitter). ID UPSatu je GR02. GPS přijímač na UPSatu je od české společnosti SkyFox Labs. Součástí mise QB50 je i česká nanodružice VZLUSAT-1 s ID CZ02.

Ladislav Hagara | Komentářů: 4
21.4. 15:00 | Komunita

V diskusním listu Thunderbird planning vývojáři poštovního klienta Thunderbird řeší, zda by nebylo možné budoucí Thunderbird postavit nad webovými technologiemi, tj. nad Electronem, stejně jako například Nylas Mail. Gecko, nad kterým je Thunderbird postaven, se má hodně změnit. V plánu je odstranění vlastností, které Firefox už nepotřebuje, ale Thunderbird je na nich závislý [Hacker News, reddit].

Ladislav Hagara | Komentářů: 98
21.4. 10:22 | Bezpečnostní upozornění

Společnost Oracle vydala čtvrtletní bezpečnostní aktualizaci svých softwarových produktů (CPU, Critical Patch Update). Opraveno bylo celkově 299 bezpečnostních chyb. V Oracle Java SE je například opraveno 8 bezpečnostních chyb. Vzdáleně zneužitelných bez autentizace je 7 z nich. V Oracle MySQL je opraveno 39 bezpečnostních chyb. Vzdáleně zneužitelných bez autentizace je 11 z nich.

Ladislav Hagara | Komentářů: 8
21.4. 10:00 | Pozvánky

V úterý 25. dubna proběhne další Prague Containers Meetup. Přijďte se nechat inspirovat jak zlepšit build/delivery pipeline vašich kontejnerových aplikací.

little-drunk-jesus | Komentářů: 2
Chystáte se pořídit CPU AMD Ryzen?
 (4%)
 (35%)
 (0%)
 (7%)
 (44%)
 (9%)
Celkem 286 hlasů
 Komentářů: 32, poslední včera 12:24
    Rozcestník

    Dotaz: Může v postgresql být smazán řádek z ještě nepřečtené result set?

    3.3.2015 14:37 kalik
    Může v postgresql být smazán řádek z ještě nepřečtené result set?
    Přečteno: 994×
    Ahoj.

    V php pomocí PDO si připravím SELECT dotaz, spustím ho a pak postupně procházím jednotlivé řádky pomocí foreach s tím, že v každém cyklu si fetchnu jeden řádek. Zjistil jsem, že i když po spuštění SELECT dotazu smažu některé řádky, které jsem ještě nestačil fetchnout, tak stejně se takové řádky ve výsledku objeví i když už jsou fyzicky smazané.

    Jak je to možné? Nějaká cache? Mám záruku, že to tak bude pořád? Rád bych si napsal iterátor třídu pro procházení obrovského množství řádků, abych ušetřil paměť. Bude i v případě procházení milionů řádků result set "imunní" než ho stačím celý fetchnout?

    Odpovědi

    3.3.2015 15:36 Ivan
    Rozbalit Rozbalit vše Re: Může v postgresql být smazán řádek z ještě nepřečtené result set?
    MVCC
    3.3.2015 16:26 kalik
    Rozbalit Rozbalit vše Re: Může v postgresql být smazán řádek z ještě nepřečtené result set?
    Aha, děkuji. Já jsem myslel, že toto funguje jen když čtu data ovlivněná jinou transakcí. Ovlivňuje toto chování i nastavení úrovně izolace "SET SESSION CHARACTERISTIC"?
    3.3.2015 19:40 Ivan
    Rozbalit Rozbalit vše Re: Může v postgresql být smazán řádek z ještě nepřečtené result set?
    IMHO Izolacni uroven uvlivnuje to co uvidite to co "vidite" mezi jednotlivymi SELECTy. Kazdy jednotlivy dotaz by mel vracet konzistentni pohled na data, to by jinak bylo dost nedeterminsticke.
    3.3.2015 16:48 Filip Jirsák
    Rozbalit Rozbalit vše Re: Může v postgresql být smazán řádek z ještě nepřečtené result set?
    Chování záleží na tom, jak máte nastavenu izolaci transakcí. Když použijete repeatable read, uvidíte v rámci jedné transakce vždy stav, který byl na začátku transakce – takže jiné transakce mohou mazat nebo insertovat, a váš result set to neovlivní.

    Procházením obrovského množství řádků paměť neušetříte, právě naopak. Server si nějakým způsobem tu výslednou sadu pamatovat musí – ať už přímo jako výsledek, nebo jako zdrojová data, ze kterých ten výsledek dokáže sestavit.
    3.3.2015 18:32 kalik
    Rozbalit Rozbalit vše Re: Může v postgresql být smazán řádek z ještě nepřečtené result set?
    Jako výchozí jsem nastavil SERIALIZABLE. Nicméně ten SELECT nebyl spuštěný v transakci a stejně to výsledný result set neovlivnilo. Nebo to postgresql bere tak, že každý dotaz je vlastně transakce?
    3.3.2015 19:04 Filip Jirsák
    Rozbalit Rozbalit vše Re: Může v postgresql být smazán řádek z ještě nepřečtené result set?
    Nicméně ten SELECT nebyl spuštěný v transakci
    Byl. V PostgreSQL (a v každém jiném rozumném systému s podporou transakcí) dotaz mimo transakci nespustíte.
    Nebo to postgresql bere tak, že každý dotaz je vlastně transakce?
    Transakce se zahájí automaticky. Pravděpodobně máte v PDO nastavený autocommit, takže se pak každý příkaz provádí v samostatné transakci.
    4.3.2015 10:15 Kit | skóre: 37 | Brno
    Rozbalit Rozbalit vše Re: Může v postgresql být smazán řádek z ještě nepřečtené result set?
    ... Pravděpodobně máte v PDO nastavený autocommit, takže se pak každý příkaz provádí v samostatné transakci.
    Autocommit přece s PDO nesouvisí. Není to vlastnost databázového klienta, ale serveru.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    4.3.2015 18:11 Filip Jirsák
    Rozbalit Rozbalit vše Re: Může v postgresql být smazán řádek z ještě nepřečtené result set?
    Autocommit je vždy možné konfigurovat z klienta. To, zda je implementován na serveru, nebo tak, že klient po každém příkazu pošle commit, je podle mne implementační detail. Konkrétně v případě PostgreSQL podle mne server nic takového neumí a autocommit je vždy záležitostí implementace klienta.
    4.3.2015 18:15 Filip Jirsák
    Rozbalit Rozbalit vše Re: Může v postgresql být smazán řádek z ještě nepřečtené result set?
    Aha, tak ne, omlouvám se - implicitně zahájená transakce je po úspěšném provedení také commitnuta, takže pokud se nezahájí transakce explicitně BEGIN, funguje to jako autocommit.
    5.3.2015 10:35 Marek
    Rozbalit Rozbalit vše Re: Může v postgresql být smazán řádek z ještě nepřečtené result set?
    Tazatel chce zrejme setrit pamet u klienta, ne u serveru.
    5.3.2015 12:57 j
    Rozbalit Rozbalit vše Re: Může v postgresql být smazán řádek z ještě nepřečtené result set?
    "Zjistil jsem, že i když po spuštění SELECT dotazu smažu některé řádky, které jsem ještě nestačil fetchnout, tak stejně se takové řádky ve výsledku objeví i když už jsou fyzicky smazané."

    Pomerne logicky, nemyslis? Select ti vrati data do nejakyho bufferu a ty uz pri foreach nepracujes s datama v databazi, ale s datama v tom vracenym vysledku.

    SERIALIZABLE ti na to nepomuze, jakmile select dobehne, tak pokud neotevres explicitne transakci a nenechasi ji viset po celou dobu prochazeni vysledku, tak se okamzite ukonci.

    Pokud nactes milion radku, a nemas na to dost RAM, tak ti to proste zbuchne. Takova prace s databazi je ovsem ponekud knicemu. Protoze ty si stavis dalsi, zcela nesmyslnou vrstvu nad tou databazi.
    5.3.2015 13:16 Ivan
    Rozbalit Rozbalit vše Re: Může v postgresql být smazán řádek z ještě nepřečtené result set?
    Tenhle prece neni o najakych bufferech. PostgreSQL uklada kazdou zmenenou radku na nove misto(a ma i poiter na predchozi verzi stavu te radky). O uklid se stara VACUUM. Takze kdyz sql select nacte block s radkou, ktera ma novejsi timestamp, nez je zacatek transakce tak se proste podiva na predchozi stav te radky.

    To je princip implementace MVCC, do databaze se ukladaji vsechny predchozi stavy dat, ktere jsou jeste potreba.
    5.3.2015 13:50 Filip Jirsák
    Rozbalit Rozbalit vše Re: Může v postgresql být smazán řádek z ještě nepřečtené result set?
    MVCC je způsob implementace v PostgreSQL. Pro tazatele je ale důležité, že přesně tohle řeší různé úrovně izolace transakcí – a to, jak databáze tu úroveň izolace zařídí, je implementační detail. Zároveň je potřeba vědět, že izolaci transakcí sice definuje standard, ale je to dost všeobecné – a jaké skutečně dává která úroveň záruky, to se dozví jedině z dokumentace konkrétní databáze.
    5.3.2015 16:42 kalik
    Rozbalit Rozbalit vše Re: Může v postgresql být smazán řádek z ještě nepřečtené result set?
    Chápu to dobře, že po begin transaction mám až do commitu pohled na data konstantní, jako byl před zahájením transakce? Tzn. začnu transakci, provedu select z jedné tabulky, pak nesouvisející select z druhé atd. a mám jistotu, že ta data jsou pořád pro mě zevnitř transakce nezměněná jako před začátkem transakce?
    5.3.2015 16:55 Filip Jirsák
    Rozbalit Rozbalit vše Re: Může v postgresql být smazán řádek z ještě nepřečtené result set?
    To platí jen v případě, že máte úroveň oddělení transakcí alespoň repeatable read. Pokud použijete read committed (v PostgreSQL je výchozí) nebo read uncommited (v jiné databázi, PostgreSQL to neumí), a spustíte v jedné transakci dvakrát za sebou stejný select, může dát pokaždé jiné výsledky, pokud podkladovou tabulku mezi tím změnila jiná transakce. Když použijete repeatable read, vidíte tabulky ve stavu, v jakém byly na začátku transakce (plus samozřejmě změny provedené aktuální transakcí).
    25.3.2015 17:10 michal00 | skóre: 14 | blog: OpenStreetMap
    Rozbalit Rozbalit vše Re: Může v postgresql být smazán řádek z ještě nepřečtené result set?
    toto s transakciami nemá nič. result je uložený v buffery PHP, pri volaní pg_fetch_assoc to zbehne z toho resultu. aj keď sql server už nebeží, zmazala sa tabuľka, zmazali sa dáta. v tom čase sa vôbec nepýta sql server, všetko je vnútri php.

    rovnako ako keď v psql zbehnem query a potom ju iba pozerám v pageri. medzitým kľudne môžem zformátovať disk s databázou a psql si nič nevšimne (feature, nie bug).
    25.3.2015 21:37 Ivan
    Rozbalit Rozbalit vše Re: Může v postgresql být smazán řádek z ještě nepřečtené result set?
    A ten buffer ma nekonecnou velikost? To asi ne. Aplikace a databaze pracuji na principu producent-konzument. Tzn. v okamziku kdy se blizite k konci bufferu klient poste do databaze pozadavek dalsi davku dat. Proto je pro databazi dulezite pamatovat si timestamp okamziku kdy se zacal dotaz provadet, potom muze databaze zpracovavat pouze bloky, ktere byly modifikovane pred tim timestamp-em. Ono to jen "vypada", ze se dotaz vykonal v jeden okamzik.
    okbob avatar 25.3.2015 23:21 okbob | skóre: 30 | blog: systemakuv_blog | Benešov
    Rozbalit Rozbalit vše Re: Může v postgresql být smazán řádek z ještě nepřečtené result set?
    Ono je to trochu složitější - Postgres, pokud se nepoužívají kurzory (které se běžně nepoužívají), tak okamžitě po spočítání řádků posílá data na klienta, kde se přijatá data alokují do lokální paměti. Ta skutečně není nekonečná, a pokud si vrátíte milióny řádků, tak ještě než začnete v klientovi zpracovávat data (např. v PHP), tak Vám to celé spadne na nedostatku paměti. Jakmile se dotaz spočítá (postgres se chová transakčně), tak se začíná krmit koncový klient (např. PHP), který může převzít data jednorázově a nebo po blocích (ale čte se z lokální paměti, která obsahuje kompletní výsledek). Lze to udělat i jinak, ale to není běžné a běžně se to nepoužívá. Tedy PostgreSQL bufferuje výsledek (pokud někde výpočet spadne, tak vrátí 0 řádek), a vždy bufferuje na straně klienta (což je trochu nečekané, ale je to tak). Ohledně timestampů je také trochu jinak. Postgres použivá multigenerační architekturu, kdy od jednoho záznamu mohu mít v databázi uloženo více verzí. Každá verze záznamu má v sobě číslo transakce, která tu verzi vyrobila a někde bokem je informace, jestli ta transakce už doběhla nebo nikoliv, případně jestli doběhla úspěšně nebo nikoliv. Pak podle nějakých pravidel se zjišťuje, kdo, kdy může vidět kterou verzi záznamu. Např. nemůžete vidět verze, které jsou z nepotvrzené transakce.
    26.3.2015 09:57 Ivan
    Rozbalit Rozbalit vše Re: Může v postgresql být smazán řádek z ještě nepřečtené result set?
    Aha tak to se omlouvam, ze jsem mlzil(kecal) nejak jsem predpokladal, ze to funguje podobne jako u ostatnich databazi.
    okbob avatar 26.3.2015 11:20 okbob | skóre: 30 | blog: systemakuv_blog | Benešov
    Rozbalit Rozbalit vše Re: Může v postgresql být smazán řádek z ještě nepřečtené result set?
    Ono tohle moc lidí neví - ale má to svou logiku - distribuuje se využití paměti na klienta, a snižuje se i riziko, že dotaz bude brzdit klient, a navíc je transakční ve smyslu "vrátí všechno nebo nic". A pokud by to výchozí způsob byl příliš náročný na paměť, tak lze použít kurzor.
    27.3.2015 17:31 j
    Rozbalit Rozbalit vše Re: Může v postgresql být smazán řádek z ještě nepřečtené result set?
    Cece ...? Php (ale na tom vubec nesejde) preda SQLku dotaz. SQLko vrati VSECHNA data, ktera tomu dotazu odpovidaji. Jak stim potom nalozi programator, uz databazi lautr nezajima.

    Programator si ty data muze narvat do pameti, muze si je narvat na disk ... to je jeho problem, SQLko mu proste vrati resultset, se kterym on muze nejak nakladat. Ale SQLko nemuze vubec nijak resit obsah toho vysledku, protoze uz je zcela mimo jeho kontrolu.

    Je to presne stejny, jako kdyz v databazi napises kursor. Pokud ti celej pobezi v jedny transakci, tak si tim muzes zajistit, ze se mezi tim data nezmeni - a samo tim taky zaridis peknou varku deadlocku. Ale pokud tu transakci takto sam nevytvoris, tak ti select do kursoru vrati result, a pak si klidne muzes smazat celou tu databazi, ten result uz to nezmeni.

    Presne proto je tohle (selectovani hromady dat) poradne blbej napad.
    31.3.2015 07:10 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Může v postgresql být smazán řádek z ještě nepřečtené result set?
    Je to presne stejny, jako kdyz v databazi napises kursor. Pokud ti celej pobezi v jedny transakci, tak si tim muzes zajistit, ze se mezi tim data nezmeni - a samo tim taky zaridis peknou varku deadlocku.

    Pokud to bude read only, není důvod, aby kvůli tomu něco deadlockovalo.

    30.3.2015 23:32 Bill Gates
    Rozbalit Rozbalit vše Re: Může v postgresql být smazán řádek z ještě nepřečtené result set?
    Aniz bych procital diskuzi pod dotazem, prijde mi logicke, ze kdyz udelam select tak dostanu data v momente selectu. Jinak by se select musel pokazde znovu provest (zaktualizovat) pri kazdem zasahu do databaze znovu, aby se zjistil aktualni stav a to by behem cteni meniciho se resultu udelalo asi pekny chaos a navic by to mohlo byt docela casove hodne narocne.

    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.