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:44 | Nová verze

    Bitwig Studio (Wikipedie) bylo vydáno ve verzi 6. Jedná se o proprietární multiplatformní (macOS, Windows, Linux) digitální pracovní stanici pro práci s audiem (DAW).

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

    Společnost Igalia představila novou linuxovou distribuci (framework) s názvem Moonforge. Jedná se o distribuci určenou pro vestavěné systémy. Vychází z projektů Yocto a OpenEmbedded.

    Ladislav Hagara | Komentářů: 0
    dnes 00:44 | Nová verze

    Google Chrome 146 byl prohlášen za stabilní. Nejnovější stabilní verze 146.0.7680.71 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 29 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.

    Ladislav Hagara | Komentářů: 0
    dnes 00:22 | Nová verze

    D7VK byl vydán ve verzi 1.5. Jedná se o fork DXVK implementující překlad volání Direct3D 3 (novinka), 5, 6 a 7 na Vulkan. DXVK zvládá Direct3D 8, 9, 10 a 11.

    Ladislav Hagara | Komentářů: 0
    včera 23:22 | Nová verze

    Bylo vydáno Eclipse IDE 2026-03 aneb Eclipse 4.39. Představení novinek tohoto integrovaného vývojového prostředí také na YouTube.

    Ladislav Hagara | Komentářů: 2
    včera 10:22 | Upozornění

    Ze systému Slavia pojišťovny uniklo přibližně 150 gigabajtů citlivých dat. Jedná se například o pojistné dokumenty, lékařské záznamy nebo přímou komunikaci s klienty. Za únik může chyba dodavatelské společnosti.

    Ladislav Hagara | Komentářů: 9
    včera 10:11 | IT novinky

    Sněmovna propustila do dalšího kola projednávání vládní návrh zákona o digitální ekonomice, který má přinést bezpečnější on-line prostředí. Reaguje na evropské nařízení DSA o digitálních službách a upravuje třeba pravidla pro on-line tržiště nebo sociální sítě a má i víc chránit děti.

    Ladislav Hagara | Komentářů: 26
    včera 09:33 | IT novinky

    Meta převezme sociální síť pro umělou inteligenci (AI) Moltbook. Tvůrci Moltbooku – Matt Schlicht a Ben Parr – se díky dohodě stanou součástí Meta Superintelligence Labs (MSL). Meta MSL založila s cílem sjednotit své aktivity na poli AI a vyvinout takovou umělou inteligenci, která překoná lidské schopnosti v mnoha oblastech. Fungovat by měla ne jako centralizovaný nástroj, ale jako osobní asistent pro každého uživatele.

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

    Byla vydána betaverze Fedora Linuxu 44 (ChangeSet), tj. poslední zastávka před vydáním finální verze, která je naplánována na úterý 14. dubna.

    Ladislav Hagara | Komentářů: 1
    10.3. 12:11 | IT novinky

    Open source router Turris Omnia NG Wired je v prodeji. Jedná se o Turris Omnia NG bez Wi-Fi. Je připraven pro zamontování do racku.

    Ladislav Hagara | Komentářů: 6
    Které desktopové prostředí na Linuxu používáte?
     (16%)
     (7%)
     (0%)
     (11%)
     (29%)
     (2%)
     (5%)
     (2%)
     (13%)
     (25%)
    Celkem 1055 hlasů
     Komentářů: 26, poslední dnes 08:56
    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: 461×
    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: 47 | 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.
    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.