Trhl jsem rekord ve velikosti tabulky :)

Jak jste si mohli přečíst v jednom z předchozích článků, tak jsem se po delší době pustil zase do programování. V podstatě zkouším dávat dohromady takový velkou databázi různých keywordů a data k nim. Dneska koukám, že W01 (worker 01) za 3 dny nashromáždil 946.247 URL k 9299 nejhledanějším klíčovým slovům. Tím jsem také trhl osobní rekord v počtu záznamů v jedné MySQL tabulce.

osobni-rekord-mysql

Vím, že pro zkušené programátory to asi nebude nic zajímavé, ale já jsem na to celkem hrdej :)

Včera jsem ty data zkusil zpracovat a vytvořit první relase (z cca 660K záznamů). Kdo sleduje můj profil na FB, tak si mohl zkusit dohledat jak si vede jeho doména, anebo kouknout na jaké keywordy cílí jeho konkurence.Vzhledem k tomu, že W01 bere data z prvotního nástřelu databáze keywordů, tak jsou tam jen hodně hledaná klíčová slova. Počítám, že použitelná verze bude minimálně 5x větší.

Tady jsem narazil také na první zádrhel, který je momentálně nad moje programátorské schopnosti. Tabulka relase má 627K záznamů o celkové velikosti 166 MB (Index 98,4 MB). Zpracování dotazu (LIKE %domena% z VARCHAR (url) s indexem) trvá 2 – 3 vteřiny. Jistě dalo by se to vyřešit přesunutím domény do samostatného sloupce, ale to by pak přišel uživatel o možnost filtrovat části URL. Navíc v relase je zatím jen Seznam. Budu do ní přidávat ještě pozice na Google, hledanost Google, ranky a počet zpětných odkazů. Takže musím nastudovat jak to zrychlit, pokud to má být veřejně přístupné.

Prostě mám o zábavu postaráno. Ale stojí to za to. S dostatkem dat můžu třeba generovat seznamy jako je tento.


Jak bude reklama vypadat?
-
Kup si reklamu navždy pod tímto článkem jen za 100 Kč
Zobrazit formulář pro nákup

19 Replies to “Trhl jsem rekord ve velikosti tabulky :)”

  1. Ten like dotaz chces na vyhladavanie nie? Na vyhladavanie pouzi nejaky search engine. Konkretne na v pythone pouzivam haystack a whoosh index. V podstate ti z db na pozadovane parametre vytvori index v suboroch, ktore sa prehladavaju rychlejsie ako v db. Problemom je, ze to zabera dalsie miesto a nie je to aktualne. (update vyhladavacieho indexu tiez trochu trva)

  2. Doménu nepřesouvej, ale duplikuj z celé URL. Pak o nic nepřijdeš a index k prohledávání bude značně menší. :) Data a příklad by se musel vidět, aby se dalo něco vymyslet.

    Mám metu trošku dál, 1GB :-D

  3. Asi te překonám. :) btw, dělám něco podobného, už nejaký čast

    Formát pevný
    Porovnávání utf8_general_ci
    Řádků 152 865 163
    Délka řádku ø 40
    Velikost řádku ø 97 bajtů
    Další Autoindex 215 551 229

    Jinak používám MyISAM. Parkrát jsem zkoušel innodb, ano má váhodu v row locku namísto table locku, ale zas například restary mysqld bylo nemožné, restart nemůže trvat dve hodiny. U myisam je to naproti tomu chvilka.

    1. Restart je v pohodě, u InnoDB se dají poladit buffery aby to startovalo rychleji. Problém je, pokud budeš mít v té MyISAMové tabuli čím dál víc dat (jakmile to přeteče přes paměť i 1 řádek bude trvat uložit desítky vteřin) a pokud to budeš chtít použít pro současné čtení / zápis, rozskočí se ti celý systém pod zátěží. A pak teprve oceníš, že InnoDB to umí opravovat poměrně rychle, zatímco MyISAM tabulka takové velikosti je téměř neopravitelná

      1. Popravdě jediný důvod proč to mám v MyISAM je, že v SHOW TABLE STATUS je uložená poslední změna, což mám kvůli monitoringu. Nové tabulky co používají anebo budou používat roboti na VS už ukládají do InnoDB a status zapisují do log souboru, který si monioring stáhne.

        1. To ani nemusíš dělat – stačí mít innodb_file_per_table (což je samo o sobě lepší kvůli případnému přesunu db jinam) a z nich potom číst poslední změnu. Jinak řešením je taky přejít na MariaDB kde to tuším už neobsahuje tento dávný bug (Oracle na MysSQL už dost …)

      2. Právě, že me to vždy blokovalo to inno, restart i s menším množstvím dat 10M trval třeba hodinu, při kterém to samozřejme neobsloužilo nikoho. Zlatá MyISAM.

      1. Všechno je o klíčích, velikost pak není problém. Největší tabulku mám 2M záznamů (statistika čtenosti článků jednotlivých blogů) a odezvu má vynikající. Klíče = rychlost tabulky.

        Data 559 MiB
        Klíč 4,3 MiB

        1. Tak klíče samozřejmě používám, bez nich by to nešlo :)
          Třeba u Doménového Robota jsem na to jednou zapomněl u exportu dat a dotaz trval 12 vteřin bez klíče a s klíčem nula nula nic.

  4. Nereknu kolik ma radku, ale nas projekt crawlera byl pro mysql uz veliky, tak se pouziva noSQL databaze Cassandra – 2,6T zabrano

      1. A ještě by mě zajímala jedna věc. V kolika procesech/vláknech to pouštíš? Já svym botem stahoval asi v 5 a teprve až za několik dní jsem se dostal na 200k staženejch URL.

Comments are closed.