最近对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. CHEMISTS DISCOVER A SAFE, GREEN METHOD TO PROCESS RED PHOSPHORUS

                   When it comes to making phosphorus compounds, chemists have traditionally relied on w ...

  2. jmeter 使用cookie管理器

    1.jmeter.properties  中 将CookieManager.save.cookies 设置为true 2.添加一个cookie管理器,什么都不用填 3.把需要用到的请求放到登录后面.后 ...

  3. 切线空间(Tangent Space)

    http://download.autodesk.com/global/docs/maya2012/zh-cn/index.html?url=files/Polygons_nodes_Tangent_ ...

  4. 「这样玩Hexo」修改主题自定义实现界面和功能的自定义

    首发于个人博客 想获得更好的阅读体验,烦请移步⬆️ 前言 作为一个颜党,在换了许多Hexo的主题后,选择了现在使用的fexo主题.但是相比于大多数博主使用的NEXT,fexo还是不够powerful, ...

  5. log日志查看

    (1)类型1: TcLogCls::add_log($data, __METHOD__ . '::订单号:' . $order_no, 'tc_order'); (2)类型2:

  6. jquery判断页面元素是否存在的方法

  7. SpringBoot里的一些注解

    Spring不仅可以通过xml配置获取*.properties,还可以通过@Value注解的方式来获取,将properties配置文件中的属性值注入到java成员变量. 如果不想每次都写private ...

  8. 关于Safari浏览器使用的几点总结

    声明:下载的是Safari英文版本,在Windows操作系统下使用. 一.Safari浏览器中的开发者调试工具隐藏得比较深,找了好久才找到的,方法:按一下键盘上的alt键,浏览器上方就会弹出一个开发者 ...

  9. POJ 2396 Budget (有源汇有上下界最大流)

    题意:给定一个矩阵的每行的和和每列的和,以及每个格子的限制,让你求出原矩阵. 析:把行看成X,列看成Y,其实就是二分图,然后每个X到每个Y边一条边,然后加一个超级源点和汇点分别向X和Y连边,这样就形成 ...

  10. CodeForces 518B Tanya and Postcard (题意,水题)

    题意:给定两个字符串,然后从第二个中找和第一个相同的,如果大小写相同,那么就是YAY,如果大小写不同,那就是WHOOPS.YAY要尽量多,其次WHOOPS也要尽量多. 析:这个题并不难,难在读题懂题意 ...