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 11:33 | Pozvánky

Konference LinuxDays 2017 proběhne o víkendu 7. a 8. října v Praze v Dejvicích v prostorách FIT ČVUT. Konference OpenAlt 2017 proběhne o víkendu 4. a 5. listopadu na FIT VUT v Brně. Organizátoři konferencí vyhlásili CFP (LinuxDays, OpenAlt). Přihlaste svou přednášku nebo doporučte konference známým.

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

Byla vydána verze 1.3.0 odlehčeného desktopového prostředí Lumina (Wikipedie, GitHub) postaveného nad toolkitem Qt. Z novinek lze zmínit nový motiv ikon nahrazující Oxygen (material-design-[light/dark]) nebo vlastní multimediální přehrávač (lumina-mediaplayer).

Ladislav Hagara | Komentářů: 2
včera 17:33 | Bezpečnostní upozornění

Před šesti týdny byly publikovány výsledky bezpečnostního auditu zdrojových kódů OpenVPN a nalezené bezpečnostní chyby byly opraveny ve verzi OpenVPN 2.4.2. Guido Vranken minulý týden oznámil, že v OpenVPN nalezl další čtyři bezpečnostní chyby (CVE-2017-7520, CVE-2017-7521, CVE-2017-7522 a CVE-2017-7508). Nejzávažnější z nich se týká způsobu, jakým aplikace zachází s SSL certifikáty. Vzdálený útočník může pomocí speciálně

… více »
Ladislav Hagara | Komentářů: 1
včera 06:55 | Zajímavý projekt

V Edici CZ.NIC vyšla kniha Průvodce labyrintem algoritmů. Kniha je ke stažení zcela zdarma (pdf) nebo lze objednat tištěnou verzi za 339 Kč (připojení přes IPv4) nebo 289 Kč (připojení přes IPv6).

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

Byla vydána verze 2.2.0 svobodného správce hesel KeePassXC (Wikipedie). Jedná se o komunitní fork správce hesel KeePassX s řadou vylepšení.

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

Vývojář Debianu Henrique de Moraes Holschuh upozorňuje v diskusním listu debian-devel na chybu v Hyper-Threadingu v procesorech Skylake a Kaby Lake od Intelu. Za určitých okolností může chyba způsobit nepředvídatelné chování systému. Doporučuje se aktualizace mikrokódu CPU nebo vypnutí Hyper-Threadingu v BIOSu nebo UEFI [reddit].

Ladislav Hagara | Komentářů: 0
24.6. 01:23 | Komunita

Phoronix spustil 2017 Linux Laptop Survey. Tento dotazník s otázkami zaměřenými na parametry ideálního notebooku s Linuxem lze vyplnit do 6. července.

Ladislav Hagara | Komentářů: 3
23.6. 22:44 | Nová verze

Po třech měsících vývoje od vydání verze 5.5.0 byla vydána verze 5.6.0 správce digitálních fotografií digiKam (digiKam Software Collection). Do digiKamu se mimo jiné vrátila HTML galerie a nástroj pro vytváření videa z fotografií. V Bugzille bylo uzavřeno více než 81 záznamů.

Ladislav Hagara | Komentářů: 1
23.6. 17:44 | Nová verze

Byla vydána verze 9.3 open source alternativy GitHubu, tj. softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech, GitLab. Představení nových vlastností v příspěvku na blogu a na YouTube.

Ladislav Hagara | Komentářů: 3
23.6. 13:53 | Nová verze

Simon Long představil na blogu Raspberry Pi novou verzi 2017-06-21 linuxové distribuce Raspbian určené především pro jednodeskové miniaturní počítače Raspberry Pi. Společně s Raspbianem byl aktualizován také instalační nástroj NOOBS (New Out Of the Box Software). Z novinek lze zdůraznit IDE Thonny pro vývoj v programovacím jazyce Python a především offline verzi Scratche 2.0. Ten bylo dosud možné používat pouze online. Offline bylo možné používat pouze Scratch ve verzi 1.4. Z nového Scratchu lze ovládat také GPIO piny. Scratch 2.0 vyžaduje Flash.

Ladislav Hagara | Komentářů: 1
Chystáte se pořídit CPU AMD Ryzen?
 (6%)
 (31%)
 (1%)
 (9%)
 (44%)
 (9%)
Celkem 849 hlasů
 Komentářů: 65, poslední 1.6. 19:16
    Rozcestník

    Dotaz: Jak dát indexy nebo jak navrhnout, aby to šlapalo

    19.5.2016 22:09 MP
    Jak dát indexy nebo jak navrhnout, aby to šlapalo
    Přečteno: 2227×
    Mám následující tabulku, kde jsou burzovní data:

    create table admiralmarkets.empty_table_1m( symbol varchar(10) not null, datetime timestamp without time zone not null , open double precision, high double precision, low double precision, close double precision, tick_volume integer, spread integer, real_volume integer );

    Unikátní je kombinace symbol + datetime ("datetime" mám jako název pole, snad to nevadí...?)

    Jak to postavit aby se dobře dělaly selekty typu select * from admiralmarkets.empty_table_1m where datetime between .... and symbo in ('AA', 'BB' 'CC');


    Řešení dotazu:


    Odpovědi

    20.5.2016 00:00 EtDirloth | skóre: 4
    Rozbalit Rozbalit vše Re: Jak dát indexy nebo jak navrhnout, aby to šlapalo
    • Spravil by som dvojstlpcovy UNIQUE INDEX bud na (symbol, "datetime") alebo ("datetime", symbol) - poradie by som volil podla velkosti time spanu v selecte a tiez variability symbolov v tabulke. EXPLAIN konkretnej query na konkretnych datach napovie.
    • Vykonanie dotazu by mozno zrychlilo vyclenenie symbolov do inej tabulky, napr. (smallint primary key, varchar(10) not null) a previazanie cez cudzi kluc.
    • Neviem o aku DB ide, ale ak je to PostgreSQL, tak namiesto double precision by som pouzil numeric.
    20.5.2016 14:46 OldFrog {Ondra Nemecek} | skóre: 26 | blog: Žabákův notes | Praha
    Rozbalit Rozbalit vše Re: Jak dát indexy nebo jak navrhnout, aby to šlapalo
    Vykonanie dotazu by mozno zrychlilo vyclenenie symbolov do inej tabulky, napr. (smallint primary key, varchar(10) not null) a previazanie cez cudzi kluc
    Jak to?
    -- OldFrog
    20.5.2016 15:06 Filip Jirsák | skóre: 66 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Jak dát indexy nebo jak navrhnout, aby to šlapalo
    Protože SMALLINT se indexuje lépe, než VARCHAR(10).
    20.5.2016 15:09 EtDirloth | skóre: 4
    Rozbalit Rozbalit vše Re: Jak dát indexy nebo jak navrhnout, aby to šlapalo
    priklady pre pgsql (stale nepozname cielovu DB):
  • smallint je fixed-size a ma len 2 bajty (a dovoluje pass-by-value), teda je efektivnejsi pri spracovani a indexovani, jednoducho nema overhead, ktorym "trpi" varlena;
  • smallint je mensi, takze sa zmensi velkost riadku a teda sa ich viac zmesti na stranku, takze sa zmensuje IO;
  • 23.5.2016 18:12 OldFrog {Ondra Nemecek} | skóre: 26 | blog: Žabákův notes | Praha
    Rozbalit Rozbalit vše Re: Jak dát indexy nebo jak navrhnout, aby to šlapalo
    Protože SMALLINT se indexuje lépe, než VARCHAR(10).
    ---
    priklady pre pgsql (stale nepozname cielovu DB):
  • smallint je fixed-size a ma len 2 bajty (a dovoluje pass-by-value), teda je efektivnejsi pri spracovani a indexovani, jednoducho nema overhead, ktorym "trpi" varlena;
  • smallint je mensi, takze sa zmensi velkost riadku a teda sa ich viac zmesti na stranku, takze sa zmensuje IO;
  • Ano, asi se lépe indexuje, ale vyhledávání je pak už stejně rychlé, ne?
    -- OldFrog
    Josef Kufner avatar 23.5.2016 18:45 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: Jak dát indexy nebo jak navrhnout, aby to šlapalo
    Stejně jako se lépe indexuje, tak se i lépe porovnává, když se prochází index. I když tam už to nebude tolik znát, jako při sestavování indexu.
    Hello world ! Segmentation fault (core dumped)
    23.5.2016 23:13 OldFrog {Ondra Nemecek} | skóre: 26 | blog: Žabákův notes | Praha
    Rozbalit Rozbalit vše Re: Jak dát indexy nebo jak navrhnout, aby to šlapalo
    Teoreticky ano, ale pochybuju že by to byl významný rozdíl.
    -- OldFrog
    Josef Kufner avatar 24.5.2016 00:13 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: Jak dát indexy nebo jak navrhnout, aby to šlapalo
    Na pár tisících řádcích to možná bude měřitelné. U milionů to znát už bude.
    Hello world ! Segmentation fault (core dumped)
    20.5.2016 08:31 Xerces
    Rozbalit Rozbalit vše Re: Jak dát indexy nebo jak navrhnout, aby to šlapalo
    Můžu se zeptat proč tam je primary key ta kombinace času a symbolu? To jako že nemůže existovat více záznamů se shodným symbolem v jeden čas? Opravdu? Není to zbytečné omezení? Já bych zvážil vytvoření umělého klíče, místo multiklíče nad existujícími sloupci a jednotlivé sloupce indexoval zvlášť. Chybí informace o použité db, to je dost podstatné pro případné návrhy optimalizací. :-)
    23.5.2016 22:44 MP
    Rozbalit Rozbalit vše Re: Jak dát indexy nebo jak navrhnout, aby to šlapalo
    Ano, nemůže, teda lépe řečeno nesmí nastat situace, aby pro jeden symbol existoval více jak jeden záznam se stejným časem. Kombinace čas+symbol musí být unikátní.
    24.5.2016 00:33 dustin | skóre: 61 | blog: dustin
    Rozbalit Rozbalit vše Re: Jak dát indexy nebo jak navrhnout, aby to šlapalo
    Jak je to "nesmí" ošetřeno? Samozřejmě pokud bude primární klíč obojí, pak si to hlídá sama db (ale aplikace musí počítat s chybou query (což by stejně měla, ale...)
    24.5.2016 08:26 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Jak dát indexy nebo jak navrhnout, aby to šlapalo
    Většinou není čas jako součást primárního klíče nepříliš vhodný (mockrát už jsem viděl timestamp vytvoření záznamu nesmyslně použitý jako primární klíč místo generovaného číselného identifikátoru), ale existují situace, kdy to smysl dává, protože je timestamp přirozeným identifikátorem. Např. pokud budu zpracovávat hodnoty z meteorologických stanic snímané třeba každou hodinu, je přirozené jako primární klíč použít kombinaci id stanice, id měřené veličiny a čas měření.
    24.5.2016 09:27 dustin | skóre: 61 | blog: dustin
    Rozbalit Rozbalit vše Re: Jak dát indexy nebo jak navrhnout, aby to šlapalo
    Jasně, pokud mám opravdu zajištěnou jedinečnost kombinace, pak nic proti timestampu v primárním klíči. Ale taky by to zde mohlo být jen "malá šance, že se potkají", proto se ptám.
    24.5.2016 10:54 Filip Jirsák | skóre: 66 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Jak dát indexy nebo jak navrhnout, aby to šlapalo
    V takovém případě by ale měla být u toho datového typu uvedena přesnost. Protože je potřeba přesnost nastavit stejně, jakou mají ta vstupní data (když mi budou meteorologické stanice poskytovat data s přesností na desetinu sekundy, bude chyba, pokud to budu v databázi ukládat s přesností na sekundy nebo i s přesností na milisekundy – akorát v tom druhém případě ty chyby budou nejspíš záhadnější). Spoléhat na to, že výchozí hodnota přesnosti v databázi je zrovna stejná, jako u vstupních dat, je cesta do pekel.
    24.5.2016 11:16 EtDirloth | skóre: 4
    Rozbalit Rozbalit vše Re: Jak dát indexy nebo jak navrhnout, aby to šlapalo
    Mam problem pochopit, co sa riesi v tomto vlakne. Z povodnej otazky sa mi data javia ako time-series. Na granularite ani presnosti takemu klucu nezalezi. Ak dojde ku kolizii hodnot, potom prvy vyhrava. Zatial to nevidim ako "cestu do pekel", ale mozno na peknom pekelnom priklade by to bolo zjavnejsie.

    Stlpec "datetime" by sice islo abstrahovat do formy dalsej tabulky so zoznamom timestampov a cudzieho kluca, ale pokial by som nebol tlaceny potrebou optimalizacie (vid #5) na hranice moznosti, tak by som to povazoval za zbytocny over-engineering.
    24.5.2016 17:27 Filip Jirsák | skóre: 66 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Jak dát indexy nebo jak navrhnout, aby to šlapalo
    MP tvrdí, že kombinace čas+symbol musí být unikátní. Představte si následující data:
    Čas                       Symbol 
    2016-05-24 17:15:59.030   A
    2016-05-24 17:15:59.035   A
    2016-05-24 17:15:59.123   A
    
    To mohou být tři unikátní záznamy, mohou to být tři „duplicitní“ záznamy, nebo dva duplicitní záznamy a jeden unikátní. Záleží na tom, s jakou přesností čas rozlišujete.

    Když MP tvrdí, že ta kombinace musí být unikátní, chápu to tak, že to tak je z povahy okolního světa, že ta data prostě takto unikátně vznikají. Pak ale potřebuje vědět, jakou přesnost mají ta reálná data, a stejnou přesnost pak nastavit i v databázi.

    Také to ale může znamenat, že na vstupu mohou být duplicitní záznamy, a splnění podmínky „musí být unikátní“ se musí zařídit až při vkládání dat do databáze (třeba způsobem, že první nebo poslední vyhrává).
    Zatial to nevidim ako "cestu do pekel", ale mozno na peknom pekelnom priklade by to bolo zjavnejsie.
    Když budete mít na vstupu údaje s přesností na desetinu sekundy, a sloupec bude s přesností na sekundy, můžete na vstupu získat duplicitní údaje. Do databáze je nezapíšete a o data přijdete.

    Když budete mít na vstupu data s přesností na sekundy a ukládat je budete s přesností na milisekundy, a budete potřebovat třeba 5 minut starý záznam, vezmete aktuální čas, odečtete od něj 5 minut a výsledný údaj budete hledat v databázi. A nenajdete nic, protože hledaná čas bude mít na místě milisekund nejspíš nějaké nenulové číslo, jenže v databázi budou samé nuly.
    24.5.2016 17:32 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Jak dát indexy nebo jak navrhnout, aby to šlapalo
    Když budete mít na vstupu data s přesností na sekundy a ukládat je budete s přesností na milisekundy, a budete potřebovat třeba 5 minut starý záznam, vezmete aktuální čas, odečtete od něj 5 minut a výsledný údaj budete hledat v databázi. A nenajdete nic, protože hledaná čas bude mít na místě milisekund nejspíš nějaké nenulové číslo, jenže v databázi budou samé nuly.

    Nebo s tím budu počítat a vezmu poslední záznam před daným časem, poslední záznam po něm nebo interpolaci. Nebo ta tabulka může být jen mezistupněm pro generování kumulovaných dat. Nejde naslepo tvrdit, že něco je špatně, pokud nevíte, k čemu ta data slouží a jak se s nimi pracuje.

    24.5.2016 18:01 Filip Jirsák | skóre: 66 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Jak dát indexy nebo jak navrhnout, aby to šlapalo
    Pokud s tím budu počítat, dělám to vědomě a není to případ „spoléhám na to, že výchozí hodnota přesnosti je zrovna ta, kterou potřebuji“, o kterém jsme tvrdil, že je špatně.

    Když někde vidím timestamp without time zone not null a u toho komentář, že to musí být unikátní, rovnou se ptám, při jaké přesnosti to má být unikátní. Je možné, že to autor ví, ale pak je vhodné to doplnit i do té definice, čímž se těm otázkám předejde.
    22.5.2016 06:27 MP
    Rozbalit Rozbalit vše Re: Jak dát indexy nebo jak navrhnout, aby to šlapalo
    Ano, je to postgress. Díky za odpovědi. Index na datetime a symbol jsem tam dal. Ještě by mě zajímalo jak zrychlit načítání. Použil jsem pomocnou tabulku bez indexů kam to načtu a pak to přesypu do cílové tabulky se stejnou strukturou, ale i tak je to pomalé.
    22.5.2016 08:35 Filip Jirsák | skóre: 66 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Jak dát indexy nebo jak navrhnout, aby to šlapalo
    Čemu říkáte „načítání“? Co znamená „pomalé“? Popište, o co se snažíte,a co se vám na tom nezdá.
    15.6.2016 11:39 Tonda
    Rozbalit Rozbalit vše Re: Jak dát indexy nebo jak navrhnout, aby to šlapalo
    Ahoj, U nas se to dela trosku jinak nez to co navrhujete. Strasne zalezi na tom co mate za data a hlavne kolik toho je

    Nas system uklada za nejakych 16 hodin neco kolem 250mil. radek do database a to je docela dost takze jsem museli hodne optimilizovat

    1) myslim ze index na datetime and symbol je nanic, pokud pouzivate insert vzdy se vam po transakci bude prepocitavat index to bude asi duvod proc rikate ze to mate pomale, zkuste copy from stdin 2) pouzivejte partitions my mame partitions per day. takze pokud potrebuju pracovat s jednim dnem pracuju s mene daty. udelejte si views abyste pracoval s co nejmene daty 3) mysql, oracle, sybase, db2 ani informix nam nedali dost rychlosi ulozit co potrebujem v realnem case, Je mi trapne priznat ale MSSQL to zvladlo - kdyz jsme to ukazali Microsoftu neverili nam ;-). Ted pouzivame vertica, KDB a zkousime pgsql - zatim dobry ale nemame tam 100% nasich data takze jeste nevime presne 4) napiste is jiny load a zapoment na index pres dva sloupce, ano na DB urovni je to jak to ma byt ale budete tim trpet, loader tohler vyresi, size za cenu toho ze bude muset vedet o vsech symbolech na den co loadujete ale to se da chytre vyrseit. 5) data co popisujete nevypadaji tak strasne, mate tam vlastne jen symbol,den,open and close price a par dalsich blbosti to by se melo veji do nejakych 2 milionu radek za den 6) 100% musite rozumet vasim datum jinak oprimalizaci neudelate

    Pokud mate tick data - coz je mozne jen nam to nerikate, zalezi na tom kolik toho je, je trba prizpusobit strukturu database . A asi nejlepe nepouzivat SQL ale neco jako vertica nebo KDB, my do toho cpemene zatim neco kolem 0.7TB/den a ani o tom nevime.

    je potreba zkouset

    4.7.2016 08:43 mongodb
    Rozbalit Rozbalit vše Re: Jak dát indexy nebo jak navrhnout, aby to šlapalo
    Ja len zo zaujimavosti sa chcem spytat, ze preco pre ukladanie takychto dat nevolite radsej nosql databazu, ktora je na to stavana? To robite tak komplikovane selecty ze potrebujete sql syntax a pre nosql to napisat neviete, alebo aky je dovod?
    25.7.2016 21:04 MP
    Rozbalit Rozbalit vše Re: Jak dát indexy nebo jak navrhnout, aby to šlapalo
    Díky za odpovědi. No, zkusil jsem partitioning, ale buď jsem ho udělal blbě nebo.. zkrátka to nepomohlo. Holt nejsem DB expert.. tak jsem zvolil nejjednodušší řešení: Valím to do souborů a ančítám z nich zpět.. .. Ty soubory mám na SSD, takže rychlost OK. Možná je taky chyba že ten Postgres běžel pod windows.. no.. Když budu uvažovat o DB, tak si to raděj nechám někým napsat.. A ticková data to nejsou.. jen minutová, s výhledem že budou vteřinová.. Podle mě ticková data moc na SQL databáhi nejsou vhodná..

    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.