Счётчик читателей статей на MongoDB
Добавил в этом блоге простейший счётчик посетителей, показывает сколько человек прочитало каждую статью. Различает посетителей по IP адресу, если в будущем понадобится информация и об хитах, то её можно будет взять из суммы в поле count
.
Можно использовать для множества сайтов.
Чтобы через некоторое время не начал тормозить поиск данных, нужно заранее создать индексы:
$ mongo
> use counter
> db.counter.ensureIndex({site:1, url:1})
> db.counter.ensureIndex({ip:1})
Или то же самое на PHP:
$m = new Mongo();
$db = $m->selectDB('counter');
$db->counter->ensureIndex(array('site'=>1, 'url'=>1));
$db->counter->ensureIndex(array('ip'=>1));
Код счётчика:
function counter($site, $url) {
$count = '?';
try {
$m = new Mongo();
$db = $m->selectDB('counter');
$db->counter->update(
array('site'=>$site, 'url'=>$url, 'ip'=>$_SERVER['REMOTE_ADDR']),
array('$inc'=>array('count'=>1)),
array('upsert'=>true)
);
$count = $db->counter->find(array('site'=>$site, 'url'=>$url))->count();
} catch(Exception $e) {
// TODO: сделать отправку в лог сообщение об ошибке
}
return $count;
}
Для работы с MongoDB в PHP необходимо установить PHP Pear библиотеку mongo:
$ sudo apt-get install php-pear
$ sudo pear instal mongo
После чего нужно создать файл /etc/php5/apache/mongo.ini
со следующим содержимым:
extension=mongo.so
После перезагрузки апача всё должно заработать.
$ sudo service apache2 reload
Не забудьте закрыть все неиспользуемые порты, или закройте свою базу данных в MongoDB паролем.
Хорошая книга по MongoDB: The Little MongoDB Book (переведена на русский язык).