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 ?
include_once('functions.php');
define('LICZNIK', 5
); //ile zadań pobranych z bazy obslugujemy w ciagu minuty
connect_to_db();
if ($czas1[0] >= 1 && $czas1 <= 22) { //wykonujemy funkcje uzytkownikow
$sql = "SELECT TOP "LICZNIK" * FROM task"; //pobieramy pierwsze 5 zadan (tyle zadan wykonujemy co 1 minute)
switch($row['functions']) {
case 'postuj': //jesli dodajemy do bloga
$sql = "SELECT
b.id as identyfikator,
b.licznik as licznik,
b.licznik_ping as licznik_ping,
b.last_blog as last_blog,
c.tytul as tytul,
c.artykul as artykul,
c.tagi as tagi,
c.publikuj as publikuj
FROM users
LEFT JOIN settings_art c ON c.user_id=b.id
WHERE c.publikuj='active'"; //pobieramy aktywny artykul
$result_func = call_user_func('postuj', $row['licznik'], $row['tytul'], $row['artykul'], $row['tagi'], $row['identyfikator']);
if ($result_func) { //jesli zadanie skompletowane to je usuwamy
$sql = "DELETE * FROM task WHERE id=$row['id']";
}
break;
case 'ping': //inne funkcje które mogą definiować użytkownicy
break;
case 'index':
break;
default:
break;
}
}
}
else { //dwie godziny na dobe poswiecamy na funkcje systemowe czyli sprawdzanie i weryfikacje blogow, adresow proxy itp.
}
Struktura tabeli sql kazdy użytkownik może tworzyć dowolną ilość artykułów
CREATE TABLE `task` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL DEFAULT '0',
`functions` varchar(80) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`login` varchar(80) NOT NULL DEFAULT '',
`pass` varchar(80) NOT NULL DEFAULT '',
`email` varchar(120) NOT NULL DEFAULT '',
`data` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`licznik` int(11) NOT NULL DEFAULT '0',
`licznik_ping` int(11) NOT NULL DEFAULT '0',
`last_blog` varchar(80) NOT NULL DEFAULT ''
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;
CREATE TABLE `settings_art` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL DEFAULT '0',
`tytul` varchar(30) NOT NULL DEFAULT '',
`artykul` text NOT NULL,
`tagi` varchar(100) NOT NULL DEFAULT '',
`publikuj` varchar(10) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ;
Ten post edytował amii 21.04.2011, 10:21:33