Een gebruiker is iemand die een job invoert op de site, zie vorige bewerkte post... hopelijk een stuk duidelijker.quote:
Was ik al bang voor, maar je ziet toch wel het gevolg van het invullen van de database tabellen? of moet ik het even voor je voormaken? zodat je zo'n 9000 url's in een overzicht krijgtquote:Op dinsdag 21 mei 2013 19:38 schreef boem-dikkie het volgende:
Ik snap echt helemaal niks van je verhaal.
Waarom doe je alles in 1 table? Da's toch niet meer bij te houden?quote:Op dinsdag 21 mei 2013 19:04 schreef Chandler het volgende:
Hoe zorg je dat een op de achtergrond lopend proces die (bv websites scant) niet door 1 gebruiker helemaal wordt overgenomen? maar netjes de taken over alle gebruikers verdeeld?
Wat is nou de juiste manier van aanpakken? iedere actieve user qua datetime nalopen op wie het laatste en het langst geleden is gescanned? hoe doet google dat? en is daar informatie over te lezen? heb al gezocht over threads, queues etc maar kon niet echt iets vinden waar ik wijzer van werd.
Voorbeeld:
Stel ik heb 2 gebruikers die websites laten scannen.
User 1 - > website.nl
User 2 -> website.com
Nu laad ik eerst user 1 en process de eerste pagina, daaruit haal ik alle links (36)
Daarna laad ik user 2 en process de eerste pagina, daaruit haal ik alle links (15).
In het tabel staat het nu zo
id 1 -> user 1 pagina 1
id 2 -> user 2 pagina 1
id 3 t/m 39 -> user 1 vervolg pagina
id 40 t/m 55 -> user 2 vervolg pagina
Dus als ik door ga met scannen gebeurd er dit.
user 1 laad de volgende pagina's in queue (3 t/m 39) en haalt daaruit 300 pagina's
user 2 laad de volgende pagina's in queue (40 t/m 55) en haalt daaruit 500 pagina's
tabel ziet er nu zo uit (vervolg)
id 56 t/m 356 -> user 1 vervolg pagina's
id 367 t/m 867 -> user 2 vervolg pagina's
user 1 laad de volgende pagina's in queue (56 t/m 356) en haalt daaruit 3000 pagina's
user 2 laad de volgende pagina's in queue (40 t/m 55) en haalt daaruit 5000 pagina's
tabel ziet er nu zo uit (vervolg) etc
id 868 t/m 3868 -> user 1 vervolg pagina's
id 3869 t/m 8869 -> user 2 vervolg pagina's
etc etc etc
Zoals je nu ziet wordt de verhouding erg scheef tussen het inlezen en het toevoegen aan de queue, dus mijn vraag is hoe ik dit beter kan oplossen?
Correctquote:Op dinsdag 21 mei 2013 19:53 schreef Crutch het volgende:
Dus ref_id is de id met de url van de pagina waarin de url gevonden is?
Oftewel z'n 'parent'-pagina?
Dat is dus het probleem, ik zou liever zien dat ik bv per gebruiker 1 url uitlees, daarvan de links in de database invoer en op ga naar de volgende user (job) en daarvan 1 url uitlees en etc etc etc..quote:Op dinsdag 21 mei 2013 19:57 schreef Crutch het volgende:
Misschien kun je een tabel met 'tasks' maken.
Als een thread dan klaar is met lezen, steelt hij een aantal taken van de andere user die nog bezig is. And so on.
Nee klopt maar het zou mooi zijn als ik de een een url kon laten opvragen, die verwerken en dan de url van de volgende opvragen ongeacht hoe lang de queue is...quote:Op dinsdag 21 mei 2013 20:08 schreef Crutch het volgende:
Dan verdeel je geen taken, maar krijgen beide users vanaf het begin een specifiek domein en blijven altijd de onderliggende pagina's en url die aanvankelijk uit dat domein gekomen zijn scannen.
Oftewel; ik denk niet dat wat jij wil kan zonder dat de processen scheef gaan lopen, want ze nemen elkaar in principe geen werk uit handen dus is er geen balans.
poehhhhhh.....quote:Op dinsdag 21 mei 2013 20:13 schreef Chandler het volgende:
[..]
Nee klopt maar het zou mooi zijn als ik de een een url kon laten opvragen, die verwerken en dan de url van de volgende opvragen ongeacht hoe lang de queue is...
Dat bedoel ik, dus als ik het op deze manier doe moet ik OF voor iedere job een apart script laten lopen OF een script maken die jobs netjes verdeeld en ongeacht de lengte van de queue de url's verwerkt...quote:Op dinsdag 21 mei 2013 20:21 schreef Crutch het volgende:
[..]
poehhhhhh.....
Dan zou je moeten bepalen wat een url is en wat een url is komende uit zo'n 'parent'-url; eenmaal begonnen loop je het risico dat er geen eind aan het scannen komt, neem bijvoorbeeld wikipedia.
Je queue kan dan wel eens exponentieel oplopen, interessant wel, maar ook dweilen met de kraan open.
Ok,quote:Op woensdag 22 mei 2013 08:48 schreef Maringo het volgende:
Wat perspectief is misschien ook handig. Om hoeveel websites gaat het? Hoeveel user? Hoe groot zijn de websites?
Daar ga ik natuurlijk ook niet vanuit maar er zijn genoeg sites die dit soort zaken regelen met 1 job controller oid!? zie iets beter geschetst voorbeeld;quote:En op de vraag hier Google het doet, weet alleen Google het antwoord. Maar ga er vanuit dat hun niet 1 job per keer laten draaien.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 4 klanten die informatie willen invoeren Klant A -> wil www.kleinewebsite.nl uitlezen Klant B -> wil www.google.com uitlezen Klant C -> wil www.anderekleinesite.nl uitlezen Klant D -> wil www.fok.nl uitlezen Eerste run; Klant A leest site en vind 50 links = ID 1 t/m 50 (tijd 1 seconde) Klant B leest site en vind 500 links = ID 51 t/m 551 (tijd 1 seconde) Klant C leest site en vind 10 links = ID 551 t/m 561 (tijd 1 seconde) Klant D leest site en vind 4 links = ID 562 t/m 566 (tijd 1 seconde) Tweede run Klant A leest volgende links uit en vind 500 links in de 50 uitgelezen links = ID 567 t/m 1067 (tijd 50 seconde) Klant B leest volgende links uit en vind 50000 links in de 500 uitgelezen links = ID 1068 t/m 6068 (tijd 4 minuten) Klant C leest volgende links uit en vind 200 links in de 10 uitgelezen links = ID 6069 t/m 6269 (tijd 1 minuut) Klant D leest volgende links uit en vind 20 links in de 4 uitgelezen links = ID 6270 t/m 6280 (tijd 20 seconden) Derde run; Klant A leest volgende links uit en vind 5000 links in de 500 uitgelezen links = ID 6281 t/m 12281 (tijd 4 minuten) Klant B leest volgende links uit en vind 500000 links in de 50000 uitgelezen links = ID 12281 t/m 512281 (tijd 66 uur) Klant C leest volgende links uit en vind 2000 links in de 200 uitgelezen links = ID 512282 t/m 514282 (tijd 2 minuten) Klant D leest volgende links uit en vind 5 links in de 20 uitgelezen links = ID 514282 t/m 514287 (tijd 25 seconden) |
Ik zou gewoon queue's maken. Je hebt verschillende q-runners die een zooi links uitlezen. Onafhankelijk vd gebruiker.quote:Op woensdag 22 mei 2013 09:10 schreef Chandler het volgende:
[..]
Ok,
5 users, 5 sites en hoe groot de websites zijn maakt op zich weinig uit, de ene heeft 20 pagina's de andere 20.000.000
Een ander voorbeeld: Stel er zijn mensen die op youtube video's uploaden (LOL, wie doet dat nou?) en youtube kan maar 1 video per keer converteren!. Er is dan een wachtrij waarin video's gezet worden. Opeens is er een gebruiker die 20 video's toevoegt (speeltijd: 6000 uur) en deze komen allemaal in de wachtrij, daarna komt er 1 gebruiker en die upload een videotje van 30 seconden. Nu moet deze laatste gebruiker wachten totdat de 20 video's van de vorige gebruiker is voltooid, terwijl het eerlijker zou zijn als er van de ene gebruiker 1 video verwerkt wordt en daarna die van de ander en etc etc etc..
Duidelijker?
Maar uit de respons blijkt dat er blijkbaar niemand hier gewerkt heeft aan zo'n systeem
Even een grof voorbeeld; gebruiker B die dus zorgt dat andere websites ERG lang moeten wachten voordat ze klaar.
[..]
Daar ga ik natuurlijk ook niet vanuit maar er zijn genoeg sites die dit soort zaken regelen met 1 job controller oid!? zie iets beter geschetst voorbeeld;
[ code verwijderd ]
Alles is fictief maar laat zien dat 1 gebruiker dus de queue erg lang in gebruik kan nemen terwijl het eerlijker zou zijn als ik per gebruiker per ronde 1 link uitlees oid?!
Mocht iemand leesvoer hebben dan zie ik die graag gepost!
Kun je dat iets breder uitleggen? q-runners? zal eens googlen!quote:Op woensdag 22 mei 2013 09:38 schreef slacker_nl het volgende:
[..]
Ik zou gewoon queue's maken. Je hebt verschillende q-runners die een zooi links uitlezen. Onafhankelijk vd gebruiker.
Waarom zou dat eerlijker zijn? Gewoon first in, first out lijkt me juist het toonbeeld van eerlijkheid.quote:Op woensdag 22 mei 2013 09:10 schreef Chandler het volgende:
[..]
Opeens is er een gebruiker die 20 video's toevoegt (speeltijd: 6000 uur) en deze komen allemaal in de wachtrij, daarna komt er 1 gebruiker en die upload een videotje van 30 seconden. Nu moet deze laatste gebruiker wachten totdat de 20 video's van de vorige gebruiker is voltooid, terwijl het eerlijker zou zijn als er van de ene gebruiker 1 video verwerkt wordt en daarna die van de ander en etc etc etc..
Je hebt een queue, daarin staan je links (of verwijzingen ernaar), en je hebt een queue runner. Dan pakt je q-runner een zut links, tagged de queue (zodat andere runners niet dezelfde links gaan ophalen), processed een qitem, en sluit spul af. Voordeel is dat je meerdere queue-runners kan hebben, simultaan kan draaien, je hoeft niet te kijken naar de gebruiker, maar je pakt gewoon shit op wat in de queue staat. Is er niks, dan draait de qrunner niet (of heel kort), is er veel, dan pakt ie alles in batches op en doet ie z'n ding.quote:Op woensdag 22 mei 2013 09:41 schreef Chandler het volgende:
[..]
Kun je dat iets breder uitleggen? q-runners? zal eens googlen!
Omdat iemand op zo'n manier kan zorgen dat hij 3 dagen de site voor zch aan het werk heeft en de ander daarna pas zijn job kan doen... en daarvoor wil ik dus een passende oplossing vinden..quote:Op woensdag 22 mei 2013 09:49 schreef Tijn het volgende:
Waarom zou dat eerlijker zijn? Gewoon first in, first out lijkt me juist het toonbeeld van eerlijkheid.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | array( 1 => array ( "name" => "user1", "websites" => array ( 1 => "website1a", 2 => "website1b", 3 => "website1c" ) ), 2 => array ( "name" => "user2", "websites" => array ( 1 => "website2a" ) ), 3 => array ( "name" => "user3", "websites" => array ( 1 => "website3a", 2 => "website3b" ) ) ); |
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |