最近对mongoDB数据库进行性能分析,需要对数据库进行加压。

加压时,最初采用threading模块写了个多线程程序,测试的效果不理想。

单机读数据库每秒请求数只能达到1000次/s.而开发的java程序请求数能达到6000-7000次/s。

证明受限于GIL,python的多线程表现确实不理想。

后来,采用了multiprocessing模块,采用多进程的方式进行加压。

经过测试证明,multiprocessing的性能还是不错,和开发java程序的性能相当。

脚本如下:

#!/usr/bin/env python

from pymongo import Connection,MongoClient,MongoReplicaSetClient
import multiprocessing
import time #connection = MongoClient('mongodb://10.120.11.212:27017/')
#connection = Connection(['10.120.11.122','10.120.11.221','10.120.11.212'], 27017)
'''数据库采用了读写分离设置,连接mongoDB的模式要配对'''
connection=MongoReplicaSetClient(
'10.120.11.122:27017,10.120.11.221:27017,10.120.11.212:27017',
replicaSet='rs0',
read_preference=3
# read_preference=3
)
db = connection['cms']
db.authenticate('cms', 'cms') #计时器
def func_time(func):
def _wrapper(*args,**kwargs):
start = time.time()
func(*args,**kwargs)
print func.__name__,'run:',time.time()-start
return _wrapper
#插入测试方法
def insert(num):
posts = db.userinfo
for x in range(num):
post = {"_id" : str(x),
"author": str(x),
"text": "My first blog post!"
}
     posts.insert(post)
#查询测试方法
def query(num):
get=db.device
for i in xrange(num):
get.find_one({"scanid":"010000138101010000009aaaaa"}) @func_time
def main(process_num,num):
pool = multiprocessing.Pool(processes=process_num)
for i in xrange(num):
pool.apply_async(query, (num, ))
pool.close()
pool.join()
print "Sub-process(es) done." if __name__ == "__main__":
# query(500,1)
main(800,500)

python 对mongodb进行压力测试的更多相关文章

  1. 详细介绍windows下使用python pylot进行网站压力测试

    windows下使用python进行网站压力测试,有两个必不可少的程序需要安装,一个是python,另一个是pylot.python是一个安装软件,用来运行python程序,而pylot则是pytho ...

  2. 【转】 详细介绍windows下使用python pylot进行网站压力测试

    windows下使用python进行网站压力测试,有两个必不可少的程序需要安装,一个是python,另一个是pylot.python是一个安装软件,用来运行python程序,而pylot则是pytho ...

  3. Python Web 性能和压力测试 multi-mechanize

    http://www.aikaiyuan.com/5318.html 对Web服务做Performance & Load测试,最常见的工具有Apache Benchmark俗称ab和商用工具L ...

  4. Mongodb千万级数据在python下的综合压力测试及应用探讨

    http://rfyiamcool.blog.51cto.com/1030776/1329351

  5. python 使用多线程进行压力测试

    #coding=utf-8 import urllib2 import threading import time TOTAL = 0 #总数 SUCC = 0 #响应成功数 FAIL = 0 #响应 ...

  6. pylot网站压力测试

    windows下使用python进行网站压力测试,有两个必不可少的程序需要安装,一个是python,另一个是pylot.python是一个 安装软 件,用来运行python程序,而pylot则是pyt ...

  7. pylot压力测试工具

    博客搬家了,欢迎大家关注,https://bobjin.com 由于版本的兼容性问题,现在在windows下搭建pylot+matplotlib压力测试环境真的会令人吃尽苦头.这是因为,pylot从2 ...

  8. python的web压力测试工具-pylot安装使用

    http://blog.csdn.net/chenggong2dm/article/details/10106517 pylot是python编写的一款web压力测试工具.使用比较简单.而且测试结果相 ...

  9. python对web服务器做压力测试并做出图形直观显示

    压力测试有很多工具啊.apache的,还有jmeter, 还有loadrunner,都比较常用. 其实你自己用python写的,也足够用. 压力测试过程中要统计时间. 比如每秒的并发数,每秒的最大响应 ...

随机推荐

  1. 使用mybatis提供的各种标签方法实现动态拼接Sql。使用sql片段提取重复的标签内容

    Sql中可将重复的sql提取出来,使用时用include引用即可,最终达到sql重用的目的,如下: <select id="findUserByNameAndSex" par ...

  2. 配置Linux防火墙

    配置防火墙(服务器安全优化)(转) 安全规划:开启 80  22 端口并 打开回路(回环地址 127.0.0.1) # iptables –P INPUT ACCEPT # iptables –P O ...

  3. 谈谈WhatsApp一年设计经历和收获

    以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具.   关于WhatApp和Facebook如何实现规模设计的思考 我已经在Facebook担任产品经理 ...

  4. vue.js和angular.js的区别

    关于Vue的描述: HTML模版+JSON数据,再创建一个Vue实例,就这么简单 关于Angular的描述: AngularJS是为了克服HTML在构建应用上的不足而设计的.HTML是一门很好的为静态 ...

  5. 【转】简说GNU, GCC and MinGW (Lu Hongling)

    原地址:https://my.oschina.net/u/588967/blog/73478 GNU, GCC, MinGW是开源社区常常要遇到的概念. 网上一般的解释比较繁琐, 让人如坠云雾. 本文 ...

  6. 在Linux下使用logrotate管理日志(转)

    原文地址:http://www.tuicool.com/articles/ieAnMjN logrotate是日志循环管理工具,可以分割日志文件,删除旧的日志文件,创建新的日志文件,循环管理日志从而节 ...

  7. python3 二叉树的存储和三种遍历

    #coding:utf-8 class node(): def __init__(self,k=None,l=None,r=None): self.key=k; self.left=l; self.r ...

  8. solr特点三: defType(查询权重排序)

    Solr的defType有dismax/edismax两种,这两种的区别,可参见:http://blog.csdn.net/duck_genuine/article/details/8060026 e ...

  9. Hadoop map任务数量的计算

    Hadoop中决定map个数的的因素有几个,由于版本的不同,决定因素也不一样,掌握这些因素对了解hadoop分片的划分有很大帮助, 并且对优化hadoop性能也很有大的益处. 旧API中getSpli ...

  10. Hadoop 新建集群namenode format

    在hadoop部署好了之后是不能马上应用的,还要对配置的文件系统进行格式化. 使用命令: hadoop namenode -format 注释:namenode和secondary namenode均 ...