Projekt „Nový hledač“
Zrychlování

Mám první výsledky zrychlování, a to pro stahování (viz níže)
Je zrychleno i odpovídání (také viz níže)
Další programy


Poznámky:
Pracuji s mými 22 WWW servery: http://www.jiznimorava.org/servery
Plus jsem přidal WWW adresu
http://www.milionovastrankax.net pro testování chyb stahování.
Na níže uvedených printscreenes jsou doby ve Windows, PC mám dvoujádrový, jako WWW server používám OHTTPD.
Zatím je ovšem jen jeden uživatel, což jsem já..
Pokud na printscreenes vidíte dobu 00:00:00, je to tím, že doby pod 1 milisekundu TimeSpan nezná.
Jak vidno, věnuji zrychlování programů náležitou pozornost.

Začátek

Je hotova první verze.
Protože se bude stahovat a zpracovávat asi miliarda WWW stránek, musím ji zrychlit.
Napsal jsem pomocné podprogramy, které mi ukazují, jakou dobu jednotlivé části programů běží.
Tady je ukázka:

zrychlovani_ukazka_vypisu.jpg

Worder je parsovací program, který získává z WWW stránek jednotlivá slova a zjišťuje jejich vlastnosti, např. počet výskytů na příslušné WWW stránce.
Kritický je zde zápis slov na disk, čas 10 sekund bude potřeba stáhnout na část sekundy.

Minihledač se skládá z 11 programů, je to cca 10 tisíc řádků zdrojových kódů.
Zrychlování mi bude trvat asi měsíc.
Tak vznikne druhá verze, kterou naostro spustím pravděpodobně 1.7.2011.

Fronter a Downloadery (stahování)

zrychleni_stahovani.jpg

To je první (dost dobrý) výsledek zrychlování.
Programy jsem zrychlil především:
- asynchronním stahováním
- prací se soubory pomocí StreamReader a StreamWriter (původně bylo TextReader a TextWriter).
Stáhlo se 10 WWW stránek.
Průměrná doba stažení a jednoduchého parsování stránky (v Downloaderu se parsují pouze linky) je 0.16 sekundy,
z toho je cca 0.14 sekundy stahování a 0.02 sekundy parsování.
Předběžný výpočet: jeden Downloeder stáhne 1/0.016 = 6.25 stránek za sekundu.
100 Downloaderů stáhne 100 x 6.25 = 625 stránek za sekundu.
Den má 86400 sekund, za den se tedy stáhne 86400 x 625 = 54000000 stránek.
Předpokládaný celkový počet českých WWW stránek je 1 miliarda (jsou to stránky v doméně .cz plus stránky v češtině na jiných doménách)..
Takže se bude stahovat 1000000000 / 54000000 = 18 dní.
Ovšem pak bude následovat zpracování, tedy vytažení textu a tagů plus zpracování jiných objektů (množin komponent Internetu).
Nynější hrubý odhad kompletního stažení a zpracování českých WWW stránek je 1 měsíc, což odpovídá mému dřívějšímu odhadu.

Replyer (odpovídání)

Printscreeny pro Replyer:

Před zrychlením:

images/20110620/replyer_1.jpg
images/20110620/replyer_2.jpg
images/20110620/replyer_3.jpg

Po zrychlení:

images/20110621/replyer_1.jpg
images/20110621/replyer_2.jpg
images/20110621/replyer_3.jpg

Srovnání, názorná ukázka zrychlení Replyeru

Před zrychlením

Celková doby a její části

replyer_1.jpg

Celková doba odpovědi je cca 2.5 sekundy.

Doby výpisu jednotlivých linků

replyer_2.jpg

Průměrná doba výpisu jednoho linku je cca 0.25 sekundy.

Doba výpisu linku http://www.alveo.name a její části

replyer_3.jpg

Doba výpisu tohoto linku je cca 0.8 sekundy.
Povšimněte si, prosím, řádku „Time of match in WWW page: 0.7968750“ (milisekund, tedy skoro sekunda).
Jedná se o vyhledávání částí zdrojového textu stránky, ve kterých se vyskytují hledaná slova,
a to za účelem výpisu těchto částí pod link na stránce nalezených linků.
Jen pro jeden link to trvá skoro sekundu.
Příčinou je regulární výraz, resp následný match, která se příliš dlouho vyhodnocuje.

Po zrychlení

Celková doby a její části

replyer_1.jpg

Celková doba odpovědi je cca 0.3 sekundy.
Takže jsem celkovou dobu výpisu stáhl z původních 2.5 sekundy na nových 0.3 sekundy, tedy cca 8 krát.

Doby výpisu jednotlivých linků

replyer_2.jpg

Průměrná doba výpisu jednoho linku je cca 0.03 sekundy.
Takže jsem průměrnou dobu výpisu jednoho linku stáhl z původních 0.25 sekundy na nových 0.03 sekundy, tedy cca 8 krát.

Doba výpisu linku http://www.alveo.name a její části

replyer_3.jpg

Doba výpisu tohoto linku je cca 0.03 sekundy.
Takže jsem dobu výpisu tohoto linku stáhl z původních 0.8 sekundy na nových 0.03 sekundy, tedy cca 27 krát(!).
Povšimněte
si, prosím, řádku „Time of get regex and match: 00.00.00“ (tedy méně než milisekudna).
Ten odpovídá tomu řádku „Time of match in WWW page: 0.7968750“ na předchozím printscreenu.
Parsování zdrojového textu stránky jsem zjednodušil a použil jsem jiný regulární výraz,
takže jsem původní čas 0.78 sekundy stáhl prakticky na nulu.

Další programy

Jedničkou je vždy označen printscreen pro celkovou dobu běhu programu.
Dalšími číslicemi jsou označeny printscreeny pro podrobnější rozbory částí programů.

Výsledky zrychlování k datu 20.6.2011

images/20110620/linker_1.jpg
images/20110620/linker_2.jpg
images/20110620/ranker_1.jpg
images/20110620/ranker_2.jpg
images/20110620/leveler_1.jpg
images/20110620/leveler_2.jpg
images/20110620/seter_1.jpg
images/20110620/seter_2.jpg
images/20110620/worder_1_1.jpg (při prvním zápisu slov, tedy při parsování prvních stránek)
images/20110620/worder_1_2.jpg (při dalším zápisu slov, tedy při parsování dalších stránek)
images/20110620/worder_2.jpg
images/20110620/worder_3.jpg
images/20110620/worder_4.jpg
images/20110620/worder_5.jpg
images/20110620/sorter_1.jpg
images/20110620/sorter_2.jpg
images/20110620/sorter_3.jpg
images/20110620/setsorter_1.jpg
images/20110620/setsorter_2.jpg