2013-08-28 6 views
1

У меня есть сервер с 64G RAM, и я запускаю скрипт, который сравнивает миллион данных в csv-файле с базой данных. Если совпадения найдены, сценарий просто печатает количество совпадений в конце выполнения.запросов mongodb в секунду

Сценарий, когда бежал, занимает 3 минуты, чтобы закончить. Протестировано 50 000, 1 lakh, 3 lakh, 5 lakh файлов данных, а также скорость или скорость, с которой выполняется скрипт, пропорциональны. На сервере достаточно свободного места. Вывод mongostat, когда скрипт запускается, вставлен ниже. Мои вопросы: я считаю, что скрипт выполняет около 5000 запросов в секунду. Я читал во многих сообщениях, что они получают в среднем 50 тыс. Запросов в секунду. Как это можно достичь? На моем сервере запущены Ubuntu, 64 бит и 24 ядра.

insert query update delete getmore command flushes mapped vsize res faults   locked db idx miss %  qr|qw ar|aw netIn netOut conn  time 
    *0 3885  *0  *0  0  1|0  0 12g 24.2g 64m  0 db_list_restore:0.0%   0  0|0  1|0 380k 142k  2 03:09:26 
    *0 4188  *0  *0  0  1|0  0 12g 24.2g 68m  0 db_list_restore:0.0%   0  0|0  0|0 410k 153k  2 03:09:27 
    *0 4462  *0  *0  0  1|0  0 12g 24.2g 72m  0 db_list_restore:0.0%   0  0|0  0|0 440k 163k  2 03:09:28 
    *0 4401  *0  *0  0  1|0  0 12g 24.2g 76m  0 db_list_restore:0.0%   0  0|0  0|0 435k 161k  2 03:09:29 
    *0 4368  *0  *0  0  2|0  0 12g 24.2g 81m  0 db_list_restore:0.0%   0  0|0  1|0 432k 160k  2 03:09:30 
    *0 4416  *0  *0  0  1|0  0 12g 24.2g 84m  0 db_list_restore:0.0%   0  0|0  1|0 437k 161k  2 03:09:31 
    *0 4245  *0  *0  0  1|0  0 12g 24.2g 89m  0 db_list_restore:0.0%   0  0|0  0|0 420k 155k  2 03:09:32 
    *0 4561  *0  *0  0  1|0  0 12g 24.2g 93m  0 db_list_restore:0.0%   0  0|0  1|0 451k 167k  2 03:09:33 
    *0 3920  *0  *0  0  1|0  0 12g 24.2g 97m  0 db_list_restore:0.0%   0  0|0  0|0 388k 144k  2 03:09:34 
    *0 4307  *0  *0  0  2|0  0 12g 24.2g 105m  0 db_list_restore:0.0%   0  0|0  0|0 426k 157k  2 03:09:35 
+0

Это может быть 50K запросов в секунду, но не для каждого скрипта, я бы попытался использовать $ в запросах больше, в конце дня PHP cna работает только так быстро, делая так много вещей одновременно, плюс драйвер синхронизируется не async – Sammaye

+0

спасибо Sammaye, есть ли что-нибудь на стороне сервера, которое можно сделать, чтобы ускорить работу? – user2709899

+0

Я так не думаю, что mongostat довольно чист, мне может что-то не хватает, но я думаю, что это просто скорость PHP в конце дня. – Sammaye

ответ

1

Эти номера выглядят относительно разумными для одного процесса, выполняющего всю работу - в зависимости от того, какой запрос вы делаете, конечно.

В целом вы будете иметь тысячи процессов веб-сервера (в зависимости от рабочей нагрузки вашего приложения и количества процессоров, может быть, всего несколько сотен), которые будут генерировать трафик, поэтому у вас будет множество сокетов, открытых для сервера, вы можете независимо масштабировать какой бы компонент в своей инфраструктуре.

Для одного приложения процесса вы застряли в «циклах ожидания», так как каждый отдельный запрос запрашивается у каждого отдельного ресурса, поэтому вы никогда не сможете максимизировать свой потенциал только с одним процессом, одним сокет, одна задача. Вы хотите постоянно занимать все свои ресурсы.

Для этого вы хотели бы распараллелить свой рабочий процесс настолько, насколько сможете. Нет предопределенного числа рабочих, что является правильным ответом, поэтому, сколько работы каждый процесс должен делать, вам нужно разобраться в себе, попробовав его.

Если у вас есть миллион записей в CSV-файле, вы можете начать делить работу в 10-ти шагах, создать 10 процессов PHP, которые ищут файл и работают, прочитав 100 000 записей. Тест, который, а затем, возможно, пробует 100 процессов, каждый из которых работает по 10.000 записей за раз и сравнивается с предыдущими результатами.

Смежные вопросы