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 16:11 | Komunita

Svobodný unixový operační systém FreeBSD slaví 25 let. Přesně před pětadvaceti lety, tj. 19. června 1993, byl vybrán název FreeBSD.

Ladislav Hagara | Komentářů: 0
dnes 15:11 | Komunita

Oficiální YouTube kanál Blenderu je již několik dní blokován. Nadace Blender Foundation informuje, že od společnosti Google dostala šestistránkový návrh nové smlouvy (pdf). Zdá se, že podmínkou další spolupráce je zapnutí reklam na kanálu, tj. zpeněžení obsahu.

Ladislav Hagara | Komentářů: 9
dnes 01:55 | Nová verze

Byla vydána verze 1.13 multiplatformního open source textového editoru Brackets (Wikipedie, GitHub). Přehled novinek v oficiálním oznámení a v poznámkách k vydání. Brackets je nově dostupný také jako balíček ve formátu Flatpak z oficiálního repozitáře Flathub.

Ladislav Hagara | Komentářů: 3
včera 18:44 | Komunita

Oficiální YouTube kanál Blenderu je již několik dní blokován. Důvody jsou zatím nejasné. Pravděpodobně chyba YouTube. Dění lze sledovat na Twitteru Tona Roosendaala.

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

Na GitHubu byly pod open source licencí LLVM zveřejněny zdrojové kódy překladače programovacího jazyka C++ Zapcc vycházejícího z Clangu/LLVM. Překlad pomocí Zapccu je díky lepšímu kešování obvykle několikrát rychlejší než překlad pomocí Clangu. V březnu loňského roku byl vydán Zapcc ve verzi 1.0.

Ladislav Hagara | Komentářů: 0
včera 17:22 | Pozvánky

Červnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 21. 6. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: F-Droid, aneb svobodný software do vašeho mobilu. Kromě toho budou k vidění i vývojové desky HiFive1 se svobodným/otevřeným čipem RISC-V.

xkucf03 | Komentářů: 1
15.6. 22:44 | Zajímavý článek

Na blogu projektu NeoPG (GitHub), kryptografického softwaru vycházejícího z GnuPG, byly zveřejněny 4 příspěvky detailně popisující aktuální bezpečnostní problémy v GnuPG a souvisejících softwarových produktech. V prvním příspěvku je ukázáno, že je možné vytvořit zprávu, o které budou Earlybird, Evolution, Mutt nebo Outlook tvrdit, že jí dešifrovali a přitom ale zpráva vůbec zašifrována nebyla. V druhém příspěvku je popsána

… více »
Ladislav Hagara | Komentářů: 7
15.6. 13:00 | Komunita

GamingOnLinux informuje, že počítačová hra Track Mania Nations Forever (Steam, Wikipedie) pro Windows je nově dostupná také jako snap. Stejně jako v případě winepaku a Flatpaku se k běhu hry používá překladová vrstva Wine.

Ladislav Hagara | Komentářů: 12
14.6. 15:12 | Komunita

Tradiční setkání příznivců operačního systému Linux pod názvem Linux párty Teplice se bude konat v pátek 15. 6. 2018 v Hospůdce u černé Kočky od 18:00 hodin. Setkají se zde pamětníci příkazové řádky, vítáni jsou však i začínající uživatelé.

František Bublík | Komentářů: 21
14.6. 14:00 | Bezpečnostní upozornění

Intel potvrdil (INTEL-SA-00145) další bezpečnostní chybu ve svých procesorech. Jedná se o chybu CVE-2018-3665 s názvem LazyFP.

Ladislav Hagara | Komentářů: 18
Jak čtete delší texty z webových stránek?
 (78%)
 (22%)
 (4%)
 (7%)
 (2%)
 (11%)
Celkem 209 hlasů
 Komentářů: 36, poslední včera 21:16
    Rozcestník

    Dotaz: Postgresql: Prosím pomoct s optimalizací dotazu

    23.3.2015 23:24 Miroslav Pavelka
    Postgresql: Prosím pomoct s optimalizací dotazu
    Přečteno: 393×
    Dobrý den, Mám tabulku minutových časových řad potřebuji z ní udělat víceminutové (15 minutové či hodinové časové řady)

    Tabulky z minutovými časovými řadami mají následující strukturu:
    CREATE TABLE admiralmarkets.m1_chfjpy
    (
      datetime timestamp without time zone NOT NULL,
      open double precision,
      high double precision,
      low double precision,
      close double precision,
      volume integer,
      CONSTRAINT m1_chfjpy_pkey PRIMARY KEY (datetime)
    )
    WITH (
      OIDS=FALSE
    );
    ALTER TABLE admiralmarkets.m1_chfjpy
      OWNER TO matlab;
    
    No a ten můj dotaz který jsem vymyslel je následující:
    SELECT
    	w.time_in_hours,
    	avg( case when r1=1 then open end ) as open,
    	max(m2) as High,
    	min(m1) as Low,
    	avg( case when r2=1 then close  end) as Close,
    	sum(w.volume) as volume,
    	count(*) as bar_count,
    	max(case when r1=1 then datetime end) as time_open,
    	max(case when m2=High then datetime end) as time_high,
    	max(case when m1=Low then datetime end) as time_low,
    	max(case when r2=1 then datetime end ) as time_close
    	--w.time_in_hours+1*interval '1 hour' as time_end
    	--- skewness--
    	--(sqrt(count(*)*(count(*)-1)))/(count(*)-2) as s0
    FROM
    	(
    SELECT
    datetime,
    	High,
    	Low,
    	Open,
    	Close,
    	volume,
    	datetime- extract (minute
    FROM
    	datetime) * INTERVAL '1 minute' as time_in_hours,
    	
    	min(low) over (partition BY datetime-extract (minute
    FROM
    	datetime) * INTERVAL '1 minute' ) as m1,
    	max(high) over (partition BY datetime-extract (minute
    FROM
    	datetime) * INTERVAL '1 minute' ) as m2,
    	rank() over (partition BY datetime-extract (minute
    FROM
    	datetime) * INTERVAL '1 minute'
    ORDER BY
    	datetime) as r1,
    	rank() over (partition BY datetime-extract (minute
    FROM
    	datetime) * INTERVAL '1 minute'
    ORDER BY
    	datetime desc ) as r2
    FROM
    	admiralmarkets.m1_usdjpy
    	
    	) as w
    GROUP BY 1 
    
    Explain analyse dalo následující výsledek:
    "GroupAggregate  (cost=576914.91..659539.99 rows=200 width=84) (actual time=4357.579..6267.656 rows=17391 loops=1)"
    "  ->  WindowAgg  (cost=576914.91..605316.25 rows=1032776 width=44) (actual time=4357.530..5175.552 rows=1032776 loops=1)"
    "        ->  Sort  (cost=576914.91..579496.85 rows=1032776 width=44) (actual time=4357.523..4566.744 rows=1032776 loops=1)"
    "              Sort Key: ((m1_usdjpy.datetime - (date_part('minute'::text, m1_usdjpy.datetime) * '00:01:00'::interval))), m1_usdjpy.datetime"
    "              Sort Method: external sort  Disk: 90824kB"
    "              ->  WindowAgg  (cost=381803.08..410204.42 rows=1032776 width=44) (actual time=2841.311..3573.644 rows=1032776 loops=1)"
    "                    ->  Sort  (cost=381803.08..384385.02 rows=1032776 width=44) (actual time=2841.305..3024.597 rows=1032776 loops=1)"
    "                          Sort Key: ((m1_usdjpy.datetime - (date_part('minute'::text, m1_usdjpy.datetime) * '00:01:00'::interval))), m1_usdjpy.datetime"
    "                          Sort Method: external sort  Disk: 82752kB"
    "                          ->  WindowAgg  (cost=186691.25..215092.59 rows=1032776 width=44) (actual time=1334.691..2102.177 rows=1032776 loops=1)"
    "                                ->  Sort  (cost=186691.25..189273.19 rows=1032776 width=44) (actual time=1334.668..1564.490 rows=1032776 loops=1)"
    "                                      Sort Key: ((m1_usdjpy.datetime - (date_part('minute'::text, m1_usdjpy.datetime) * '00:01:00'::interval)))"
    "                                      Sort Method: external merge  Disk: 62568kB"
    "                                      ->  Seq Scan on m1_usdjpy  (cost=0.00..19980.76 rows=1032776 width=44) (actual time=0.039..534.610 rows=1032776 loops=1)"
    "Total runtime: 6313.651 ms"
    
    Nejsem databázový expert.., takže kdybyste to někdo uměl zjednodušit.. nebo vymyslet něco chytřejšího... Tak díky moc. M.P.

    Odpovědi

    AraxoN avatar 24.3.2015 09:13 AraxoN | skóre: 45 | blog: slon_v_porcelane | Košice
    Rozbalit Rozbalit vše Re: Postgresql: Prosím pomoct s optimalizací dotazu
    Nemáš tam WHERE - to vždy potrebuješ výcuc zo všetkých dát? Milión záznamov (rows=1032776) po jednej minúte, to sú skoro 2 roky. Obvykle sa zobrazuje pár hodín, deň, možno mesiac. Na zobrazovanie dlhších období by som si spravil osobitné tabuľky - napríklad tabuľka po hodinách a ďalšia s dennými hodnotami (high, low, open, close, volume). Ak neprepisuješ históriu, tak Ti stačí len cronom pridávať sumárny záznam po skončení hodiny a po skončení dňa. Ten denný sumár môže byť kľudne vyrátaný z hodinových a hneď namiesto 1440 záznamov spracuvávaš len 24.
    A fine is a tax for doing wrong. A tax is a fine for doing well.
    24.3.2015 12:29 Sid
    Rozbalit Rozbalit vše Re: Postgresql: Prosím pomoct s optimalizací dotazu
    Vydal by som sa troska inym smerom : 1) Bud si robit agregacie rovno pri pridavani dat do nejakych dalsich tabuliek (tj definovat tabulky pre zadane rozsahy 15,1hod,atd) 2) v zavislosti od velkosti dat pripadne pouzit nejaku historical database napr. http://opentsdb.net/ (ale mozno je to ako ist s kanonom na vrabca)
    okbob avatar 24.3.2015 17:47 okbob | skóre: 30 | blog: systemakuv_blog | Benešov
    Rozbalit Rozbalit vše Re: Postgresql: Prosím pomoct s optimalizací dotazu
    Nevím jestli jsem pochopil zadání - ale tady není potřeba jít do window funkcí. Pokud potřebuji agregaci po 15 minutách, tak převedu čas na 15 min intervaly a podle nich agreguji

    Pomůžu si funkcí, která mi timestamp zaokrouhluje na 15min:
    
    CREATE OR REPLACE FUNCTION trunc_15min(timestamp) returns timestamp as $$
    select to_timestamp(extract(epoch from $1)::integer/(15*60)*(15*60));
    $$ language sql;
    
    A pak agreguji obvyklým způsobem:
    postgres=# select * from foo;
                 t              | v  
    ----------------------------+----
     2015-03-24 17:32:19.318676 | 10
     2015-03-24 17:32:21.266594 | 20
     2015-03-24 17:32:23.55099  | 30
     2015-03-24 17:47:34.406007 | 30
     2015-03-24 18:02:38.235613 | 30
    (5 rows)
    
    Time: 0.409 ms
    postgres=# select trunc_15min(t), sum(v), avg(v) from foo group by 1;
         trunc_15min     | sum |         avg         
    ---------------------+-----+---------------------
     2015-03-24 18:00:00 |  30 | 30.0000000000000000
     2015-03-24 17:30:00 |  60 | 20.0000000000000000
     2015-03-24 17:45:00 |  30 | 30.0000000000000000
    (3 rows)
    
    Time: 1.789 ms
    
    24.3.2015 19:56 Miroslav Pavelka
    Rozbalit Rozbalit vše Re: Postgresql: Prosím pomoct s optimalizací dotazu
    Obávám se že bez windows funkcí to nepůjde. Je pravda že minimum a maximum můžu získat prostým groub by, ale potřebuji ještě první hodnotu (open) a poslední hodnotu (close) v daném časovém intervalu.

    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.