Счётчик читателей статей на 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