Поиск:

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


Новичок



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

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



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

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

существует коллекция для учета входящих посетителей
Выделить всёкод Javascript
1:
2:
3:
 "_id"
"ip"
"referer"


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

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

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

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

запрос aggregate
Выделить всёРазвернуть кодкод PHP
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
$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
Выделить всёкод PHP
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
$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   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | NoSQL | Следующая тема »


 




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


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

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