最近对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. final关键字的简单理解

    final可以修饰类,方法,变量. 1.final修饰的类,不可以被继承. 2.final修饰方法,可以把方法锁定,以防任何继承类修改它的含义. 3.fianl修饰的变量,如果是基本数据类型的变量,则 ...

  2. Shrio02 Realm作用、自定义简洁Realm、Realm实现类使用

    1 Realm简介 1.1 Realm作用 shiro最终是通过Realm获取安全数据的(如用户.角色.权限),也就是说认证或者授权都会通过Realm进行数据操作 1.2 Realm接口 1.2.1 ...

  3. 282 expression and operations添加运算符

    [抄题]: 给定一个仅包含数字 0 - 9 的字符串和一个目标值,返回在数字之间添加了 二元 运算符(不是一元)+, - 或 * 之后所有能得到目标值的情况. "123", 6 - ...

  4. Entity Framework 6.0 对枚举的支持/实体添加后会有主键反回

    实验 直接上代码,看结果 实体类 [Flags] public enum FlagsEnum { Day = , Night = } public class EntityWithEnum { pub ...

  5. 获取地址栏的URL: PHP JS

    1. PHP 获取上一页的URL 在php中可以通过内置的变量的属性来获取上一页的URL: $_SERVER['HTTP_REFERER']. 但是在IE中如果跳转是通过js函数如: window.l ...

  6. Alpha阶段测试报告(示例)

    http://www.cnblogs.com/Flamenco/p/7834393.html Alpha阶段测试报告

  7. ros kinect calibration

    RGB camera Bring up the OpenNI driver: roslaunch openni_launch openni.launch Now follow the standard ...

  8. [转]WCF Data Services OData

    http://martinwilley.com/net/data/wcfds.html WCF Data Services About OData Server code Client For .ne ...

  9. B-spline Curves 学习之B样条曲线的导数(8)

    Derivatives of a B-spline Curve 本博客转自前人的博客的翻译版本,前几章节是原来博主的翻译内容,但是后续章节博主不在提供翻译,后续章节我在完成相关的翻译学习. (原来博客 ...

  10. test4 结对项目

    [必做 1] 基于作业3的结果,读取一个较小的文本文件A_Tale_of_Two_Cities.txt,统计该文件中的单词的频率,并将统计结果输出到当前目录下的 Result1.txt 文件. 结对对 ...