Projekt
„Nový hledač“
Unsorting
Bude se rychle stahovat velké množství WWW
stránek, odhadem 10000 stránek za sekundu.
Poběží paralelně 100 stahovacích programů (procesů) Downloader, v každém
poběží 10 paralelních částí (podprocesů).
Realizoval jsem to pomocí metody AsyncCallback programovacího jazyku C#.
Pokud by se stahovaly po sobě WWW stránky z jednoho WWW serveru (IP
adresy, domény),
mohla by tato rychlost příslušný WWW server shodit, nebo by mi mohl tamní
webmaster zakázat přístup.
Proto musím udělat unsort původního pořadí WWW adres ke stažení tak, aby
v unsortovaném pořadí, podle kterého se bude stahovat,
byly WWW adresy z jednoho a téhož WWW serveru, z jedné a téže IP
adresy plus z jedné a téže domény co nejvíce rozstrkané po celém pořadí.
Nestačí udělat unsort jen pomocí domén, protože řada domén je umístěná na
společných IP adresách
(WWW servery sledují počet spojení z jedné IP adresy, např. za den).
Také nestačí udělat unsort jen pomocí IP adres, protože různé IP adresy mohou
být umístěné na jednom WWW serveru.
Například z mých 22 WWW serverů je jich 15 umístěno na jedné společné IP
adrese a na tomtéž serveru.
Můj unsort je nyní už trojúrovňový, nejprve podle serverů, pak podle IP adres a
pak podle domén.
Tohle mám již napsané i odladěné.
Tady jsou příklady unsortu.
Nejprve názorné, pomocí domén, abyste si mohli udělat představu u účinnosti
mého algoritmu:
Příklad 1: původní pořadí – unsortované pořadí
Příklad 2: původní pořadí – unsortované pořadí
Příklad 3: původní pořadí – unsortované pořadí
Příklad 4: původní pořadí – unsortované pořadí
Příklad 5: původní pořadí – unsortované pořadí
Tady je pořadí pomocí IP adres (sekundární pořadí je děláno pomocí domén):
Příklad 1: původní pořadí – unsortované pořadí
Příklad 2: původní pořadí – unsortované pořadí
Příklad 3: původní pořadí – unsortované pořadí
Příklad 4: původní pořadí – unsortované pořadí
Příklad 5: původní pořadí – unsortované pořadí
Tady je pořadí pomocí serverů (sekundární pořadí je děláno pomocí IP adres,
terciární pořadí je děláno pomocí domén):
Příklad 1: původní pořadí – unsortované pořadí
Příklad 2: původní pořadí – unsortované pořadí
Příklad 3: původní pořadí – unsortované pořadí
Příklad 4: původní pořadí – unsortované pořadí (a) - unsortované pořadí (b)
Příklad 5: původní pořadí – unsortované pořadí
Poznámky:
Neexistující WWW adresa http://www.milionovastrankax.net
je z unsortovaného pořadí vynechána.
Ve čtvrtém příkladu je unsortované pořadí (a) včetně neexistujících WWW adres,
unsortované pořadí (b) bez neexistujících WWW adres.
Ve čtvrtém příkladu unsortovaného pořadí (a) jsem pro neexistující WWW adresy
odzkoušel různé kombinace serverů, IP adres a domén.
Tady jsou IP adresy některých mých mých
WWW serverů, podle kterých si to pořadí, dělané pomocí IP adres, můžete
zkontrolovat.
U Active24 je na jednom serveru jedna IP adresa, což ale samozřejmě neplatí
obecně.
Nezdá se to, ale je to matematicky velmi
obtížná úloha, algoritmus má řadu částí.
Naprogramovaná metoda má 732 řádků v jazyce C#.
Vymyšlení a naprogramování mi trvalo cca 5 dní a nocí (s menšími přetržkami).
Je to asi nejtěžší algoritmus co jsme kdy vymýšlel a programoval.