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

Laboratoře CZ.NIC vydaly novou verzi 4.16.0 aplikace Datovka, tj. svobodné multiplatformní desktopové aplikace pro přístup k datovým schránkám a k trvalému uchovávání datových zpráv v lokální databázi. Nově je pro překlad aplikace potřeba použít knihovnu libdatovka. Ta byla vydána ve verzi 0.1.0.

Ladislav Hagara | Komentářů: 0
dnes 09:00 | Zajímavý článek

Brian Exelbierd, zástupce Red Hatu v představenstvu distribuce CentOS, poskytl rozhovor webu The Register. Ukončení vydávání CentOS jako sestavení RHEL vysvětluje tak, že Red Hat ho odmítl nadále sponzorovat. Dále hovoří o roli a omezeních nového bezplatného vydání RHEL.

Fluttershy, yay! | Komentářů: 13
dnes 06:00 | Bezpečnostní upozornění

Balíček s utilitou sudo byl vydán ve verzi 1.9.5p2. Řešena je bezpečnostní chyba CVE-2021-3156. Lokální uživatel může získat práva roota i když není uveden v souboru sudoers. Podrobnosti i s videoukázkou v příspěvku na blogu společnosti Qualys. Chyba byla do kódu sudo zanesena na konci července 2011 (commit 8255ed69). Týká se tedy verzí 1.8.2 až 1.8.31p2 a 1.9.0 až 1.9.5p1.

Ladislav Hagara | Komentářů: 16
včera 19:00 | Zajímavý článek

Společnost Backblaze zveřejnila statistiky spolehlivosti pevných disků používaných ve svých datových centrech za rok 2020. Ke konci roku vlastnila 165 530 pevných disků. V průběhu roku jich přibylo 39 792. Průměrná AFR (Annualized Failure Rate), tj. pravděpodobnost, že disk během roku selže, klesla na 0,93 %. V roce 2019 to bylo 1,89 %. V roce 2018 to bylo 1,25 %. V roce 2017 to bylo 1,77 %. V roce 2016 1,95 %.

Ladislav Hagara | Komentářů: 6
včera 18:11 | Nová verze

Dle plánu byl vydán Mozilla Firefox 85.0. Přehled novinek v poznámkách k vydání, poznámkách k vydání pro firmy a na stránce věnované vývojářům. Přibyla ochrana před supercookies. Odstraněna byla podpora Flashe. Řešeny jsou také bezpečnostní chyby. Nejnovější Firefox je již k dispozici také na Flathubu.

Ladislav Hagara | Komentářů: 6
včera 12:44 | Nová verze

Byla vydána nová verze 4.15 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Přehled změn v příslušném seznamu. Tor Browser byl aktualizován na verzi 10.0.9. Thunderbird byl aktualizován na verzi 78.6.0. Linux byl aktualizován na verzi 5.9.15.

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

Projekt Mozilly MDN Web Docs dokumentující webové standardy včetně jejich podpory v jednotlivých prohlížečích byl loňským propouštěním citelně zasažen. Poté, co se obsah MDN přesunul na GitHub, čímž se z určitého pohledu více otevřel pro přispívání z řad webových vývojářů, vznikla nová organizace Open Web Docs. Na Open Collective už má přes 60 finančních přispěvatelů a největší mezi nimi jsou Google, Microsoft a Coil. Dále se do projektu zapojuje samozřejmě Mozilla, Samsung a W3C [Mozilla.cz].

Ladislav Hagara | Komentářů: 0
včera 11:55 | Komunita

Od verze 7.1 (vyjde na začátku února) bude mít LibreOffice přívlastek Community - přesný název tedy bude LibreOffice Community 7.1. Kromě názvu se nic nemění, nedochází k omezování funkcí apod. Přejmenování je výsledek dlouhých diskuzí nad novým marketingovým plánem a snahou odlišit komunitní a firemní verze LibreOffice. Vznikají také další nové pojmy: LibreOffice Technology - brand pro veškerý software založený na LibreOffice a LibreOffice Enterprise - pro partnery ekosystému a jejich enterprise verze LibreOffice.

Zdeněk Crhonek | Komentářů: 0
včera 07:00 | Humor

Umělec a designer Rocky Bergen má na svých stránkách volně ke stažení papírové modely počítačů Amiga 500, Amstrad CPC 464, Apple II a dalších. Čtenáři AbcLinuxu na ně jistě dokážou dostat i Linux. :-)

Ladislav Hagara | Komentářů: 0
25.1. 21:22 | Nová verze

OctoPi, linuxová distribuce pro Raspberry Pi s předinstalovaným webovým rozhraním pro ovládání 3D tiskáren OctoPrint, byla vydána ve verzi 0.18.0. Přehled novinek v oznámení na blogu a na GitHubu.

Ladislav Hagara | Komentářů: 0
Jestliže používáte distribuci CentOS, kterou náhradu plánujete vzhledem k oznámenému ukončení vydávání?
 (28%)
 (4%)
 (1%)
 (21%)
 (0%)
 (3%)
 (42%)
Celkem 212 hlasů
 Komentářů: 4, poslední 25.1. 03:13
Rozcestník

Dotaz: SQLite zpomaluje během INSERT OR IGNORE

21.5.2020 07:03 Aleš Nehyba | skóre: 1
SQLite zpomaluje během INSERT OR IGNORE
Přečteno: 646×
ahoj,

Při vkládání velkého množství záznamů do SQLite pomocí příkazu INSERT OR IGNORE pozoruji výrazné zpomalení. Data vkládám přes python z csv souborů. Mám desítky souborů o velikosti cca 300 MB a každý obsahuje statisíce až milion záznamů - textové popisky definující význam a k nim přiřazená číselné hodnoty. Python vytváří několik číselníků, do kterých se ukládají ty popisky, aby se šetřilo místo, protože ty jsou hodně duplicitní.

Zpracování prvních takových souborů trvá pár desítek vteřin/několik minut na každý soubor. Postupně se čas zpracování souboru prodlužuje a dosahuje i desítek minut/pár hodin. Nějak významně nepomohlo ani vypnutí indexování během vkládání. Transakce používám.

K datům bude přistupovat pouze jeden program běžící lokálně. Proto jsem volil sqlite. To zpomalování při vkládání mě ale nutí zeptat se, jestli by na tom jiné databáze nebyly lépe?


Řešení dotazu:


Odpovědi

21.5.2020 12:10 debian+
Rozbalit Rozbalit vše Re: SQLite zpomaluje během INSERT OR IGNORE
Urcite lepsie.

Mas na vyber SQL alebo NoSQL databazy. SQLite pri ukladany zmeny potrebuje ulozit databazu ako SQL dotaz (RAW -> SQL), co pri tom mnozstve chce cas a blokuje pracu s DB.
21.5.2020 12:46 EtDirloth | skóre: 10
Rozbalit Rozbalit vše Re: SQLite zpomaluje během INSERT OR IGNORE
Ako vzdy, aj tu plati, ze DB engine treba vyberat podla potrieb aplikacie. Takze tazko povedat, ako by na tom boli ine databazy.

Nevieme, ako vyzeraju data. Mohol by tu pomoct bulk load CSV do docasnej tabulky v sqlite a nasledny podmieneny INSERT INTO trvale SELECT FROM docasne WHERE NOT IN/NOT EXISTS (trvale). Toto sa potom da urobit aj z CLI, resp. v bashi cez sqlite3 klienta.

Nepozname tvoju aplikaciu - a v akej forme robis dotazy. Python je dost pomaly a ten bottleneck mozes mat v nejakom tvojom foreach. Skus si spravit profiling, nech vidis, kde ten program travi cas.

Nevieme, ci potrebujes mat data perzistentne. Subor so Sqlite databazou je mozne nacitat aj do RAM a pouzit ju ako in-memory DB. Spatne ulozenie do suboru vsak bolo par rokov dozadu trochu zlozitejsie, ale islo aj to. Ak potrebujes len key-value, potom by mozno taky Redis bol pre teba vhodnejsi.
21.5.2020 18:09 Aleš Nehyba | skóre: 1
Rozbalit Rozbalit vše Re: SQLite zpomaluje během INSERT OR IGNORE

Díky za tip. Zkusím tu dočasnou tabulku.

Data převádím do databáze pro trvalé uložení. Vyhledávání v původních csv souborech celkem trvá. Dotaz do SQL je mnohonásobně rychlejší. Těch dotazů může být v dávce několik tisíc, výsledkem každého je několik desítek řádků pro další zpracování. Zpočátku to vypadalo, že databáze je řešení. Ale s prodlužujícím se časem zpracování insertů už to tak růžové není. Už je skoro jedno, jestli čekat hodiny na přípravu dat pro sql dotazy, nebo hodiny na zpracování dotazů do csv.

Velikost databáze je dnes cca 12 GB. Za rok naroste cca o 1 GB, to je asi 6 mio záznamů.

28.5.2020 11:33 Aleš Nehyba | skóre: 1
Rozbalit Rozbalit vše Re: SQLite zpomaluje během INSERT OR IGNORE
Tak ta úprava INSERT pomohla. Díky.
21.5.2020 12:50 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: SQLite zpomaluje během INSERT OR IGNORE
Bez znalostí požadavků na systém (typy dotazů) se dá těžko odpovědět. Plnění SQLite skutečně trvá déle a možná bude stát za to vydržet i několikadenní plnění, protože čtení bývá rychlé.

Ovšem pokud to má být KVS, tak se dá najít pár vhodnějších databází. Je možné i využití NoSQL.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
21.5.2020 14:05 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: SQLite zpomaluje během INSERT OR IGNORE
Na tohle by se dala využít DB4, která je pro podobné účely fakt rychlá. Zkoušel jsem i Tokyo Cabinet, který také podával zajímavé výkony.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
21.5.2020 20:32 OldFrog {Ondra Nemecek} | skóre: 34 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: SQLite zpomaluje během INSERT OR IGNORE
Bulk insert se tu řeší v diskuzích pravidelně (pro různé databáze). Každá databáze se chová jinak a řada databází umí nacpat csv do tabulky přímým importem - je to mnohonásobně rychlejší než normální insert (i multi-insert, kdy se vkládá více záznamů jediným dotazem). Některé databáze umí mít jako storage i csv, takže by pak stálo za to zkusit načíst csv takto a pak selectem překopírovat do cílové tabulky. Zkusit jak je na tom databáze s výkonem v režimu in-memory. Při importu koukat na obsazení RAM, vytížení CPU a vytížení IO. Pokud jde o data ze sensorů existují specializované time-series databáze, které řeší některá specifika efektivněji.

Nakonec stojí za zvážení změna workflow, zda by nešlo vkládat záznamy do databáze bez csv mezikroku.

Pokud to chcete řešit podrobněji, chce to vidět ten python script a vzorek dat.
-- OldFrog
21.5.2020 20:42 OldFrog {Ondra Nemecek} | skóre: 34 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: SQLite zpomaluje během INSERT OR IGNORE
PS: Ruční tvorbě číselníků by se šlo asi vyhnout, například by šlo popisky uložit do jiné 1:1 tabulky a na tu tabulku nastavit vhodný typ úložiště (s kompresí) nebo prostě jen nastavit jiný vhodnější typ sloupce (trigramy). To by odvedlo stejnou práci - a oproti skriptu by to bylo určitě efektivnější. Jsem celkově přesvědčen, že vhodné řešení může přinést řádové urychlení.
-- OldFrog
23.5.2020 21:47 Tom K | skóre: 20
Rozbalit Rozbalit vše Re: SQLite zpomaluje během INSERT OR IGNORE
sqlite3 má jako vlastnost, že při určitém počtu záznamů začne výrazně zpomalovat insert. Ten počet je někde okolo milionu řádků. Souvisí to s implicitním indexem a UNIQUE sloupci, které se chovají jako indexy. Na jednom projektu, kde jsem potřeboval řádově desítky milionů řádků jsem to řešil rozdělením do samostatných databází, které jsem následně spojil (bylo jich 512).
Při spojování je důležité klíčové slovo WITHOUT ROWID.
Zajímavý odkaz je tady: https://stackoverflow.com/questions/15778716/sqlite-insert-speed-slows-as-number-of-records-increases-due-to-an-index/15809806
echo -n "u48" | sha1sum | head -c3; echo
24.5.2020 21:18 Aleš Nehyba | skóre: 1
Rozbalit Rozbalit vše Re: SQLite zpomaluje během INSERT OR IGNORE
Díky. Ve dvou největších tabulkách mám 25 mio a 60 mio řádků. Zkusím ta data rozdělit podle let.
24.5.2020 23:11 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: SQLite zpomaluje během INSERT OR IGNORE
Však už to máš rozděleno. Z každého vstupního souboru uděláš jednu databázi a následně je spojíš do jedné.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.

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.