2011-10-30 21 views
16

Mam cronjob, który działa co godzinę i analizować ponad 150 000 rekordów. Każdy rekord jest sumowany indywidualnie w tabelach MySQL. Używam dwóch usług internetowych do pobierania informacji o użytkowniku.Cronjob: zapytanie do usługi sieci Web

  1. użytkownika demograficzna (ip, kraj, miasto itd.)
  2. informacja telefoniczna (jeśli telefon stacjonarny lub telefon komórkowy i czy telefon komórkowy, co jest nośnikiem)

Za każdym razem dostaję 1 rekordów I sprawdź, czy mam informacje, a jeśli nie, to zadzwonię do tych usług internetowych. Po prześledzeniu mojego kodu odkryłem, że oba te połączenia trwają od 2 do 4 sekund, co sprawia, że ​​mój cronjob jest bardzo wolny i nie mogę skompilować statystyk na czas.

Czy istnieje sposób na przyspieszenie działania tych usług?

Dzięki

Odpowiedz

22

prosta:

uzyskać dane lokalnie i wykorzystywać dane Mellissa:

  1. dla IP: http://w10.melissadata.com/dqt/websmart/ip-locator.htm
  2. na telefon: http://www.melissadata.com/fonedata.html

można również cache je za pomocą memcache lub APC, które wi Zrobię to szybciej, ponieważ nie musi żądać danych z api lub bazy danych.

+0

Czy dostępna jest darmowa wersja? – Tech4Wilco

+0

dla danych geograficznych Tak, możesz użyć maxmind, ale dla telefonu, wątpię w to –

+0

dzięki, spróbujmy, że to jest – Tech4Wilco

4

Kilka pomysłów ... jeśli powracają ci sami użytkownicy, buforowanie danych w innej tabeli byłoby bardzo pomocne ... wystarczyłoby tylko raz sprawdzić to i zwrócić je do powracających użytkowników. Po ponownym przeczytaniu pytania wygląda na to, że to robisz.

Inną opcją jest odrodzenie nowych wątków, gdy trzeba wykonać wyszukiwanie. Może to być nowy wątek dla każdego żądania lub jeśli nie jest to możliwe, możesz mieć n wątków usługowych gotowych do przeprowadzania sprawdzeń i aktualizowania wyników.

Powiązane problemy