Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Скорость выборки MongoDB: MapReduce vs aggregate 
:(
    Опции темы
monapi
Дата 9.9.2013, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 9.9.2013

Репутация: нет
Всего: нет



добрый день, коллеги

mongodb используется в тестовом режиме для сбора статистики посещений страниц сайта, без шардинга

существует коллекция для учета входящих посетителей
Код

 "_id"
"ip"
"referer"


на данный момент в ней порядка 250 000 записей

при выводе статистики по реферам, или, к примеру, странам, время выполнения запроса достигает ~5,5 секунд при использовании aggregate, и ~6 секунд при использовании mapreduce

каким образом можно ускорить выборку и формирование статистики, учитывая что в дальнейшем размеры коллекции будут в десятки раз больше

php 5.5.3, драйвер mongo стандартный, версия mongodb 2.4.6

запрос aggregate
Код

$request = $db->incoming->aggregate(
                                    array(
                                        '$project' => array(
                                            '_id' => 0,
                                            'referer' => 1,
                                            'count' => array(
                                                '$add' => 1
                                            )
                                        )
                                    ),
                                    array(
                                        '$group' => array(
                                            '_id' => '$referer',
                                            'num' => array(
                                                '$sum' => '$count'
                                            )
                                        )
                                    ),
                                    array(
                                        '$sort' => array(
                                            'num' => -1
                                        )
                                    ),
                                    array(
                                        '$limit' => 20
                                    )
        );
        foreach ($request['result'] as $referer)
        {
            echo $referer['_id'] . '"\t" . $referer['num'] . "\n";
        }


использование mr
Код

$map    = 'function() {emit(this.referer, 1);}';
$reduce = 'function(key,val) {var sum = 0; for(var i = 0; i < val.length; i++){sum += val[i];}return sum;}';

$request = $db->command(array(
                'mapreduce' => 'incoming',
                'map'       => new MongoCode($map),
                'reduce'    => new MongoCode($reduce),
                'out'       => 'myres'
));

$refstats  = $db->myres->find()->sort(array('value' => -1))->limit(20);

foreach( $refstats as $refval)
{
    echo $refval['_id'] . "\t" . $refval['value'] . "\n";
}


Это сообщение отредактировал(а) monapi - 9.9.2013, 21:41
PM MAIL   Вверх
Wowa
Дата 10.9.2013, 02:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Цитата(monapi @  9.9.2013,  20:40 Найти цитируемый пост)
каким образом можно ускорить выборку и формирование статистики, учитывая что в дальнейшем размеры коллекции будут в десятки раз больше

тогда лучше в фоне делать, т.к. map-reduce не предназначен для реал-тайм выполнения из-за медлительности. Тоже самое касается Aggregation framework, который имхо лишь обертка для map-reduce.

Добавлено через 2 минуты и 9 секунд
Цитата(monapi @  9.9.2013,  20:40 Найти цитируемый пост)
драйвер mongo стандартный

Попробуй драйвер версиси 1.3.3, т.к. в 1.4.х были замечены сильные тормоза(в 2-2.5 раза) в некоторых случаях. Я не думаю, что это касается твоего случая, но вдруг. 
PM WWW   Вверх
monapi
Дата 10.9.2013, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 9.9.2013

Репутация: нет
Всего: нет



Wowa, спасибо за ответ

драйвер 1.5.0dev


походу да, нужно менять алгоритм выборки статистики
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | NoSQL | Следующая тема »


 




[ Время генерации скрипта: 0.1192 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.