Счётчик читателей статей на 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 (переведена на русский язык).

03 марта 2013

mongodb php blog