2013-08-28 6 views
1

J'ai un serveur avec 64G RAM et je cours un script qui compare un million de données dans un fichier csv contre la base de données. Si des correspondances sont trouvées, le script imprime juste le nombre de correspondances à la fin de l'exécution.requêtes mongodb par seconde

Le script exécuté, prend 3 minutes pour se terminer. Testé avec 50 000, 1 lakh, 3 lakh, 5 lakh fichiers de données ainsi et le taux de performance ou le taux auquel le script est exécuté est proportionnelle. Il y a assez de mémoire libre dans le serveur. La sortie mongostat lorsque le script était en cours d'exécution est collée ci-dessous. Mes questions sont, je crois que le script exécute près de 5000 requêtes par seconde. J'ai lu dans beaucoup de messages, qu'ils obtiennent une moyenne de 50K requêtes par seconde. Comment cela peut il etre accompli? Mon serveur exécute Ubuntu, 64 bits et 24 cœurs.

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

Il peut être 50K requêtes par seconde, mais pas par script, j'essayerais d'utiliser $ dans les requêtes plus, à la fin de la journée PHP cna seulement courir si vite faire beaucoup de choses à la fois, plus le pilote est sync pas async – Sammaye

+0

merci Sammaye, y at-il quelque chose sur le côté serveur qui peut être fait pour accélérer les performances? – user2709899

+0

Je ne pense pas, que mongostat est assez propre, je pourrais manquer quelque chose, mais je pense que c'est juste la vitesse de PHP à la fin de la journée – Sammaye

Répondre

1

Ces Look relativement raisonnable pour un seul processus fait tout le travail - en fonction de ce type de requête que vous faites bien sûr. En général, vous aurez des milliers de processus serveur web (en fonction de la charge de votre application et du nombre de CPU, peut-être seulement quelques centaines), ce qui générera le trafic - vous aurez ainsi des milliers de sockets vous pouvez mettre à l'échelle n'importe quel composant de votre infrastructure indépendamment. Pour une application de processus unique, vous serez bloqué dans des "boucles d'attente" car il n'y a que très peu de ressources individuelles à faire à chaque fois, de sorte que vous ne serez jamais capable de maximiser votre potentiel avec un seul processus, un seul. socket, une tâche. Vous voulez occuper toutes vos ressources tout le temps.

Pour ce faire, vous voudrez paralléliser votre flux de travail autant que vous le pouvez. Il n'y a pas de nombre prédéfini de travailleurs qui est la bonne réponse, alors combien de travail chaque processus devrait faire est quelque chose que vous aurez à vous débrouiller en l'essayant.

Si vous avez des millions d'entrées dans le fichier CSV, vous pouvez commencer à diviser le travail en 10 pieaces, créer 10 processus PHP qui cherchent dans le fichier et travailler à travers 100.000 entrées. Reportez-vous à cette valeur, puis essayez peut-être 100 processus, chacun travaillant sur 10.000 entrées à la fois, et comparez-les aux résultats précédents.

Questions connexes