单线程

500+w条数据,插入时间:1小时,13分钟。

脚本:

[root@10 hurl]# cat insert-mongo2.py

#!/usr/bin/env python

#coding=utf-8

import time,datetime

import pymongo

from pymongo import MongoClient

client = MongoClient('mongodb://test:test123@172.16.100.26:27019/test')

db = client.test

#from pymongo import Connection

#connection = Connection('127.0.0.1', 27017)

#db = connection['test']

#时间记录器

def func_time(func):

def _wrapper(*args,**kwargs):

start = time.time()

func(*args,**kwargs)

print func.__name__,'run:',time.time()-start

return _wrapper

@func_time

def insert(num):

posts = db.userinfo

for x in range(num):

post = {"_id" : str(x),

"author": str(x)+"Mike",

"description1":"this is a very long description for " + str(x),

"description2":"this is a very long description for " + str(x),

"description3":"this is a very long description for " + str(x),

"description4":"this is a very long description for " + str(x),

"description5":"this is a very long description for " + str(x),

"text": "My first blog post!",

"tags": ["mongodb", "python", "pymongo"],

"date": datetime.datetime.utcnow()}

posts.insert_one(post)

if x%100000 == 0:

print "100000 !  --  %s"%(datetime.datetime.now())

if __name__ == "__main__":

#设定循环1000万次

num = 10000000

insert(num)

插入总数:

mongos> db.userinfo.count()

5033914

mongos>

多进程并发:

测试脚本:

[root@10 hurl]# cat insert-mongo3.py

#!/usr/bin/env python

#coding=utf-8

import multiprocessing,random,string

import time,datetime

import pymongo

from pymongo import MongoClient

def gen_load(x,taskid):

client = MongoClient('mongodb://test:test123@172.16.100.26:27019/test')

db = client.test

posts = db.userinfo2

for x in range(1000000):

post = {"_id" : str(x),

"author": str(x)+"Mike",

"text": "My first blog post!",

"tags": ["mongodb", "python", "pymongo"],

"date": datetime.datetime.utcnow()}

posts.insert_one(post)

if x%100000 == 0:

print "100000 !  --  %s"%(datetime.datetime.now())

if __name__ == '__main__':

inser_number=2500

pro_pool = multiprocessing.Pool(processes=100)

print time.strftime('%Y-%m-%d:%H-%M-%S',time.localtime(time.time()))

start_time=time.time()

manager = multiprocessing.Manager()

for i in xrange(10):

taskid=i

pro_pool.apply_async(gen_load,args=(inser_number,taskid))

pro_pool.close()

pro_pool.join()

elapsed = time.time()-start_time

print elapsed

time.sleep(1)

print "Sub-process(es) done."

10w条数据插入

100个线程,10w条数据,86秒

[root@10 hurl]# python insert-mongo3.py

2015-12-08:13-54-53

10000 !  --  2015-12-08 13:54:53.822510

10000 !  --  2015-12-08 13:55:02.329206

10000 !  --  2015-12-08 13:55:10.624850

10000 !  --  2015-12-08 13:55:19.763308

10000 !  --  2015-12-08 13:55:28.384718

10000 !  --  2015-12-08 13:55:36.957917

10000 !  --  2015-12-08 13:55:45.426113

10000 !  --  2015-12-08 13:55:53.872843

10000 !  --  2015-12-08 13:56:02.898263

10000 !  --  2015-12-08 13:56:11.243706

86.4502689838

Sub-process(es) done.

100个进程:

[root@10 hurl]# ps -ef| grep python | wc -l

103

100w条数据:

100个线程,100w条数据,858秒:

[root@10 hurl]# python insert-mongo3.py

2015-12-08:14-04-21

100000 !  --  2015-12-08 14:04:21.481368

100000 !  --  2015-12-08 14:05:43.069700

100000 !  --  2015-12-08 14:07:05.694774

100000 !  --  2015-12-08 14:08:28.375586

100000 !  --  2015-12-08 14:09:51.335589

100000 !  --  2015-12-08 14:11:18.619572

100000 !  --  2015-12-08 14:12:45.748144

100000 !  --  2015-12-08 14:14:12.534341

100000 !  --  2015-12-08 14:15:43.059457

100000 !  --  2015-12-08 14:17:11.387942

858.129628897

Sub-process(es) done.

[root@10 hurl]#

查询:

在500w条数据中随机查询100w次,用时15秒。

[root@10 hurl]# python find-mongo2.py

find 0 .

find 100000 .

find 200000 .

find 300000 .

find 400000 .

find 500000 .

find 600000 .

find 700000 .

find 800000 .

find 900000 .

mread run: 15.3293960094

[root@10 hurl]#

脚本:

[root@10 hurl]# cat find-mongo2.py

#!/usr/bin/env python

#coding=utf-8

import time,datetime

import random

import pymongo

from pymongo import MongoClient

client = MongoClient('mongodb://test:test123@172.16.100.26:27019/test')

db = client.test

def func_time(func):

def _wrapper(*args,**kwargs):

start = time.time()

func(*args,**kwargs)

print func.__name__,'run:',time.time()-start

return _wrapper

#@func_time

def randy():

rand = random.randint(1,5000000)

return rand

@func_time

def mread(num):

find = db.userinfo

for i in range(num):

rand = randy()

#随机数查询

find.find({"author": str(rand)+"Mike"})

if i%100000 == 0:

print "find %s ."%i

if __name__ == "__main__":

#设定循环100万次

num = 1000000

mread(num)

无索引Update

在500w数据中,无索引update100条数据,567秒:

[root@10 hurl]# python update-mongo2.py

mread run: 567.210422993

[root@10 hurl]#

脚本:

[root@10 hurl]# cat update-mongo2.py

#!/usr/bin/env python

#coding=utf-8

import time,datetime

import random

import pymongo

from pymongo import MongoClient

client = MongoClient('mongodb://test:test123@172.16.100.26:27019/test')

db = client.test

def func_time(func):

def _wrapper(*args,**kwargs):

start = time.time()

func(*args,**kwargs)

print func.__name__,'run:',time.time()-start

return _wrapper

#@func_time

def randy():

rand = random.randint(1,5000000)

return rand

@func_time

def mread(num):

update = db.userinfo

for i in range(num):

rand = randy()

name = str(rand)+"Mike"

#随机数查询

print "uodate %s  "%name

update.update_one({"author": name},{"$set":{"text":"My second blog post!"}})

if __name__ == "__main__":

#设定循环

num = 100

mread(num)

Create index

500w条数据,创建索引,用时70秒。

[root@10 hurl]# python index-mongo2.py

insert run: 70.6546721458

脚本:

[root@10 hurl]# vi index-mongo2.py

#!/usr/bin/env python

#coding=utf-8

import time,datetime

import pymongo

from pymongo import MongoClient

client = MongoClient('mongodb://test:test123@172.16.100.26:27019/test')

db = client.test

#时间记录器

def func_time(func):

def _wrapper(*args,**kwargs):

start = time.time()

func(*args,**kwargs)

print func.__name__,'run:',time.time()-start

return _wrapper

@func_time

def createInx(num):

posts = db.userinfo

posts.create_index('author', unique=True)

if __name__ == "__main__":

#设定循环

num = 1

createInx(num)

有索引Update

在500w数据中,有索引update100条数据,1.98秒:

[root@10 hurl]# python update-mongo2.py

mread run: 1.98181605339

[root@10 hurl]#

Delete

500w条数据,删除完成,使用时间:541.97秒。

[root@10 hurl]# python delete-mongo2.py

count before remove: 5033914

count after remove: 0

insert run: 541.965857983

脚本:

[root@linux-00 sh]# python delete-mongo2.py

count before remove: 100000

count after remove: 0

remove run: 0.951205015182

[root@linux-00 sh]# cat delete-mongo2.py

#!/usr/bin/env python

import time,datetime

import pymongo

from pymongo import MongoClient

client = MongoClient('mongodb://localhost:27017/')

db = client.test

def func_time(func):

def _wrapper(*args,**kwargs):

start = time.time()

func(*args,**kwargs)

print func.__name__,'run:',time.time()-start

return _wrapper

@func_time

def remove():

posts = db.userinfo

print 'count before remove:',posts.count();

posts.delete_many({});

print 'count after remove:',posts.count();

if __name__ == "__main__":

remove()

总结:

单进程

多进程

多进程

单进程

数据量

500w

10w

100w

500w

操作

insert

insert

insert

Find 100w次

用时

1小时13分钟

86秒

858秒

15秒

平均(条/秒)

1141.55

1162.79

1165.50

66666.67

注:我自己电脑上的虚拟机插入测试,单线程,10w条数据,用时30秒,平均3333条每秒

数据量

500w

500w

500w

500w

索引

无索引

有索引

操作

Update100条数据

Update100条数据

创建索引

delete

用时

567秒

1.98秒

70.65

541.97秒

平均(条/秒)

0.1764

50.51

70771.41

9225.60

Mongo性能测试-python脚本的更多相关文章

  1. python脚本批量生成数据

    在平时的工作中,经常会遇到造数据,特别是性能测试的时候更是需要大量的数据.如果一条条的插入数据库或者一条条的创建数据,效率未免有点低.如何快速的造大量的测试数据呢?在不熟悉存储过程的情况下,今天给大家 ...

  2. 如何在python脚本开发做code review

    在软件项目开发中,我们经常提到一个词“code review”.code review中文翻译过来就是代码评审或复查,简而言之就是编码完成后由其他人通过阅读代码来检查代码的质量(可编译.可运行.可读. ...

  3. freeswitch嵌入python脚本

    操作系统:debian8.5_x64 freeswitch 版本 : 1.6.8 python版本:2.7.9 开启python模块 安装python lib库 apt-get install pyt ...

  4. python脚本后台运行

    问题描述: 环境: CentOS6.4 一个用python写的监控脚本test1.py,用while True方式一直运行,在ssh远程(使用putty终端)时通过以下命令启动脚本: python t ...

  5. 某互联网后台自动化组合测试框架RF+Sikuli+Python脚本

    某互联网后台自动化组合测试框架RF+Sikuli+Python脚本 http://www.jianshu.com/p/b3e204c8651a 字数949 阅读323 评论1 喜欢0 一.**Robo ...

  6. 动态执行python脚本

    前言 存在许多独立的python脚本,这些脚本可能会增加,也可能会减少,现在需要按照某种顺序调度这些程序.在python的standard library中,有一个模块imp可以实现动态的调用ptho ...

  7. 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本

    摘自:http://blog.csdn.net/forandever/article/details/5711319 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本 ...

  8. SecureCRT中python脚本编写

    SecureCRT中python脚本编写学习指南 SecureCRT python 引言 在测试网络设备中,通常使用脚本对设备端进行配置和测试以及维护:对于PE设备的测试维护人员来说使用较多是Secu ...

  9. Python脚本配合Linux计划任务工作

    经常遇到直接运行Python脚本没有问题,但是一放入/etc/crontab之后就歇菜的情况,总结了一下,大致需要注意以下几点: 1. 脚本首行加入#!/usr/bin/env python 2. 脚 ...

随机推荐

  1. STM32的串口DMA收发以及双缓冲区的实现

    在使用STM32的UART的DMA功能总结如下: 首先上代码,这里采用STM32 的USART1作为Demo,RX的DMA为DMA1_Channel5,TX的DMA为DMA1_Channel4.初始化 ...

  2. Java 基础入门随笔(7) JavaSE版——面向对象定义、特征:封装、构造函数

    面向对象 面向过程:对于面向过程思想,强调的是过程(动作). 面向对象:对于面向对象思想,强调的是对象(实体). 特点: 1,面向对象就是一种常见的思想.符合人们的思考习惯.2,面向对象的出现,将复杂 ...

  3. zabbix---简介

    zabbix---简介 今天又听人说zabbix,好吧特地回来看了看,和其他的好像差别也不大,不过他可以让监控,绘图,web前端与一体, 当然也可以实现分布式部署,不错的. 列举一下其功能特点 网络设 ...

  4. JavaScipt30(第八个案例)(主要知识点:canvas)

    承接上文,这是第8个案例,要实现的效果是按住鼠标不放,进行拖动时可以在画布上画出不同粗细不同颜色的曲线. 附上项目链接: https://github.com/wesbos/JavaScript30 ...

  5. Gym - 101670H Go Northwest!(CTU Open Contest 2017 思维题+map)

    题目: Go Northwest! is a game usually played in the park main hall when occasional rainy weather disco ...

  6. 洛谷 P1280 尼克的任务 (线性DP)

    题意概括 线性资源分配的问题,因为空闲的时间大小看后面的时间(反正感觉这个就是个套路)所以从后往前DP. 转移方程 如果当前时刻没有工作 f[i]=f[i+1]+1 如果当前时刻有工作 f[i]=ma ...

  7. [luogu3573 POI2014] RAJ-Rally (拓扑排序 权值线段树)

    传送门 Solution 在DAG中我们可以\(O(n)\)预处理\(Ds(u)\)表示从u表示以s为起点的最长路\(Dt(u)\)表示以u为终点的最长路,那么经过\((u,v)\)的最长路即为\(D ...

  8. JSP页面中的指令标识

    JSP页面中的指令标识 制作人:全心全意 指令标识主要用于设定整个JSP页面范围内都有效的相关信息,它是被服务器解释并执行的,不会产生任何内容输出到网页中.也就是说,指令标识对于客户端浏览器是不可见的 ...

  9. Swoft 新手向教程 - 通过 Docker 搭建一个开发环境

    本系列文章将从使用层面介绍 Swoft 框架的使用及业务开发,面向初中级的 PHPer Swoft首个基于 Swoole 原生协程的新时代 PHP 高性能协程全栈组件化框架,内置协程网络服务器及常用的 ...

  10. Datatable 导出到execl 官网demo

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-type" content ...