Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Model kolejkowania zadań w cron
amii
post
Post #1





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

Ostrzeżenie: (0%)
-----


Piszę system webowy w którym użytkownicy będą się rejestrować i dodawać pewne zadania takie jak np:
- dodawanie artykułów do blogów typu WordPress (ich lista znajduje się w bazie)
- sprawdzanie zaindeksowania artykułów
- pingowanie artykułów
System będzie również wykonywał zadania niezależne typu:
- sprawdzanie poprawności funkcjonowania blogów zdefiniowanych w bazie
- wyszukiwanie i rejestracja w nowych blogach

Plik cron.php będzie odpalany co 1 minutę. Wygląda on tak:
Minus tego systemu jest taki, że wykonuje dużo operacji na bazie. Jeśli użytkownik zdefiniuje dodawanie artykułu do 3000 blogów do bazy dodawane jest 3000 rekordów, przy liczbie użytkowników > 100 mogą się w bazie tworzyć astronomiczne liczby rekordów (które są na bieżąco usuwane).
Czy to nie będzie zbyt obciążało bazy ?

  1. include_once('functions.php');
  2. define('LICZNIK', 5); //ile zadań pobranych z bazy obslugujemy w ciagu minuty
  3. $tablica = array();
  4.  
  5. $czas = date('H:i:s');
  6. $czas1 = explode(':', $czas);
  7.  
  8. connect_to_db();
  9.  
  10.  
  11. if ($czas1[0] >= 1 && $czas1 <= 22) { //wykonujemy funkcje uzytkownikow
  12.  
  13. $sql = "SELECT TOP "LICZNIK" * FROM task"; //pobieramy pierwsze 5 zadan (tyle zadan wykonujemy co 1 minute)
  14. $result = mysql_query($sql) or die('Blad w zapytaniu: '.$sql.' o tresci: '. mysql_error());
  15.  
  16. while($row = mysql_fetch_array($result)) {
  17.  
  18. switch($row['functions']) {
  19.  
  20. case 'postuj': //jesli dodajemy do bloga
  21.  
  22. $sql = "SELECT
  23. b.id as identyfikator,
  24. b.licznik as licznik,
  25. b.licznik_ping as licznik_ping,
  26. b.last_blog as last_blog,
  27. c.tytul as tytul,
  28. c.artykul as artykul,
  29. c.tagi as tagi,
  30. c.publikuj as publikuj
  31. FROM users
  32. LEFT JOIN settings_art c ON c.user_id=b.id
  33. WHERE c.publikuj='active'"; //pobieramy aktywny artykul
  34.  
  35. $result = mysql_query($sql) or die('Blad w zapytaniu '.$sql.' o tresci'. mysql_error());
  36.  
  37. $result_func = call_user_func('postuj', $row['licznik'], $row['tytul'], $row['artykul'], $row['tagi'], $row['identyfikator']);
  38.  
  39. if ($result_func) { //jesli zadanie skompletowane to je usuwamy
  40. $sql = "DELETE * FROM task WHERE id=$row['id']";
  41. $result = mysql_query($sql) or die('Blad w zapytaniu '.$sql.' o tresci'. mysql_error());
  42. }
  43. break;
  44.  
  45. case 'ping': //inne funkcje które mogą definiować użytkownicy
  46. break;
  47.  
  48. case 'index':
  49. break;
  50.  
  51. default:
  52. break;
  53. }
  54. }
  55.  
  56.  
  57. }
  58.  
  59. else { //dwie godziny na dobe poswiecamy na funkcje systemowe czyli sprawdzanie i weryfikacje blogow, adresow proxy itp.
  60. }


Struktura tabeli sql kazdy użytkownik może tworzyć dowolną ilość artykułów
  1. CREATE TABLE `task` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `user_id` int(11) NOT NULL DEFAULT '0',
  4. `functions` varchar(80) NOT NULL DEFAULT '',
  5. PRIMARY KEY (`id`)
  6. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;
  7.  
  8.  
  9.  
  10. CREATE TABLE `users` (
  11. `id` int(11) NOT NULL AUTO_INCREMENT,
  12. `login` varchar(80) NOT NULL DEFAULT '',
  13. `pass` varchar(80) NOT NULL DEFAULT '',
  14. `email` varchar(120) NOT NULL DEFAULT '',
  15. `data` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  16. `licznik` int(11) NOT NULL DEFAULT '0',
  17. `licznik_ping` int(11) NOT NULL DEFAULT '0',
  18. `last_blog` varchar(80) NOT NULL DEFAULT ''
  19. PRIMARY KEY (`id`)
  20. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;
  21.  
  22.  
  23.  
  24. CREATE TABLE `settings_art` (
  25. `id` int(11) NOT NULL AUTO_INCREMENT,
  26. `user_id` int(11) NOT NULL DEFAULT '0',
  27. `tytul` varchar(30) NOT NULL DEFAULT '',
  28. `artykul` text NOT NULL,
  29. `tagi` varchar(100) NOT NULL DEFAULT '',
  30. `publikuj` varchar(10) NOT NULL DEFAULT '',
  31. PRIMARY KEY (`id`)
  32. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ;


Ten post edytował amii 21.04.2011, 10:21:33
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.12.2025 - 03:09