SQL连接并发测试(mongodb连接测试引发的)

标签: sql 测试 mongodb | 发表时间:2011-10-18 15:26 | 作者:小城岁月 Bloger
出处:http://www.cnblogs.com/

       最近一直在搞mongodb 文件服务器大量文件并发上传测试,在官方文档发现mongo是线程安全的,支持单一连接下的并发操作。印象ADO.NET 似乎不支持单一连接并发。于是,测试一下来证实这个疑虑。(前两篇小记一直纠结mongodb吃内存导致并发文件上传变慢问题,经过这两天测试,发现文件并发上传越来越慢的瓶颈是磁盘的IO读写的瓶颈)

以10W条/20W条 记录写入测试,下面是测试结果

操作 10W w/s 20W w/s 操作方式 备注
1 79.958 163.396 主线程 有池 单连接 单打开 单打开指的一次open close 内执行所有写入操作
2 79.958 164.412 主线程 有池 单连接 多打开 多打开指的写入一次就open close一次
        总结:可以看出有池的情况open close基本没有性能消耗。
MSDN官方解释,池的效果在minpoolsize不为零的情况,
总保持相应数量的活动连接,当Open的时候实现直接用了活动连接,
而Close操作并没close,只是又将活动连接放回池里。
3 79.13 163.396 主线程 无池 单连接 单打开  
4 290.334 620.694 主线程 无池 单连接 多打开  
        总结:无池的情况下,open close非常消耗性能,由于没池每次Open
Close 都要打开关闭连接 ,所以效率没有池高。
5 49.13 142.33 单线程 无池 单连接 单打开 异步执行反而快了?测了几次都这个结果
6 326.495 865.44 单线程 无池 单连接 多打开  
         
7 137.985   有池 单连接 单打开 10线程并发写入  写入锁 Ado.net 不支持单连接并发写入 通过线程锁控制实现
8 141.464   有池 单连接 多打开 10线程并发写入  写入锁 Ado.net 不支持单连接并发写入 通过线程锁控制实现
        总结:单连接通过写入锁控制多线程写入速度明显慢了很多,
单连接并不适合并发写入操作。
9 18.943 37.815 有池 10连接并行 单打开  相当于操作1 ----  10个单连接 单打开 的并行操作
10 19.658 41.793 有池 10连接并行 多打开  相当于操作1 ----  10个单连接 多打开 的并行操作
        总结: 多线程并行多连接的操作效果还是很理想的,发挥了多线程任务的优势。Connection是非线安全的,也就是说最好为每个线程单独创建一个数据库连接实例是最理想的。

可以确定的是ado.net connection 是非线程安全的 一个连接下一次open close 过程不允许并发,并且多次open close并发会相互冲突 (想并发只能通过锁来控制了,但这个不用想肯定效率不高)。

而mongodb 则在这方面具有优势, mongo是线程安全的。一个连接下是允许并发写入操作的,同样mongodb 可以多连接并发,然后每个连接下又可以多并发写入操作,这样每秒并写入记录数可以更高。看到很多网上的测试mongo 基本是单连接并发写入,这个没有反应mongodb的写入极限。mongodb的池,是预先创建指定数量的闲置连接,用到其中的连接的时候,该转为活动状态。

由此可见,不同的数据库池的设计理想有所不同。

而ado.net 写入并发实现只有下面两种合适的
一 有池-单连接 单打开  并发写入(引及写入锁) (锁的引入,反而导致速度下降,这个方案排除了)

二 无池-并发多连接   单打开                   这种不推荐 
二 有池-并发多连接   单打开/多打开          目前,测试只有这种情最理想

另外建议连接池的minpoolsize 要设置(不设置或设置为零,会在一定时间内关闭池内所有连接)但不要设置太高,否则会占用太多资源。详细可查看MSDN介绍。

作者: 小城岁月 发表于 2011-10-18 23:26 原文链接

评论: 5 查看评论 发表评论


最新新闻:
· 互联网女皇Mary Meeker眼中的互联网趋势(PPT)(2011-10-19 10:03)
· RIM发布BBX移动平台:整合黑莓和QNX系统(2011-10-19 08:29)
· 盛大在线调整收官:新管理层成型 裁员未超5%(2011-10-19 08:28)
· 雅虎第三季度净利润2.93亿美元同比下滑26%(2011-10-19 08:27)
· 苹果员工今天悼念乔布斯 零售店将停业数小时(2011-10-19 08:26)

编辑推荐:最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用48

网站导航:博客园首页  我的园子  新闻  闪存  小组  博问  知识库

相关 [sql 测试 mongodb] 推荐:

MongoDB sql操作

- - 数据库 - ITeye博客
1.  基本查询:. 下面的示例等同于SQL语句的where name = "stephen" and age = 35.      --返回指定的文档键值对. 下面的示例将只是返回name和age键值对.      --指定不返回的文档键值对. 下面的示例将返回除name之外的所有键值对.

SQL连接并发测试(mongodb连接测试引发的)

- Bloger - 博客园-首页原创精华区
       最近一直在搞mongodb 文件服务器大量文件并发上传测试,在官方文档发现mongo是线程安全的,支持单一连接下的并发操作. 印象ADO.NET 似乎不支持单一连接并发. (前两篇小记一直纠结mongodb吃内存导致并发文件上传变慢问题,经过这两天测试,发现文件并发上传越来越慢的瓶颈是磁盘的IO读写的瓶颈).

mongodb性能测试

- - 数据库 - ITeye博客
1) Mongodb的非安全插入方式,在一开始插入性能是非常高的,但是在达到了两千万条数据之后性能骤减,这个时候恰巧是服务器24G内存基本占满的时候(随着测试的进行mongodb不断占据内存,一直到操作系统的内存全部占满),也就是说Mongodb的内存映射方式,使得数据全部在内存中的时候速度飞快,当部分数据需要换出到磁盘上之后,性能下降很厉害.

Mongodb亿级数据量的性能测试

- - haohtml's blog
进行了一下Mongodb亿级数据量的性能测试,分别测试如下几个项目:.  (所有插入都是单线程进行,所有读取都是多线程进行). 1) 普通插入性能 (插入的数据每条大约在1KB左右). 2) 批量插入性能 (使用的是官方C#客户端的InsertBatch),这个测的是批量插入性能能有多少提高. 3) 安全插入功能 (确保插入成功,使用的是SafeMode.True开关),这个测的是安全插入性能会差多少.

[mongodb] java操作mongodb

- - 数据库 - ITeye博客
           //实例化Mongo对象,连接27017端口.                               //连接名为yourdb的数据库,假如数据库不存在的话,mongodb会自动建立. //从Mongodb中获得名为yourColleection的数据集合,如果该数据集合不存在,Mongodb会为其新建立.

新鲜出炉,PCIE卡SQLServer和SSD Mongodb集群4千万数据insert测试

- - snoopyxdy的博客
最近公司需要测试1亿条数据10分钟插入数据库,主要是为了数据推送留存用. 最终我们讨论给出了2套方案. 1、单台sqlserver 配合PCIE卡. 2、Mongodb分片集群. 因为目前数据量是4千万,所以我分别对4千万数据和1亿数据进行了写入测试. 被测试机器都是24CPU,64G内存的独立服务器.

jdbc测试mysql数据库sql预解析(绑定变量)

- - CSDN博客推荐文章
jdbc测试mysql数据库sql预解析(绑定变量).         用习惯了oracle,学习mysql,想测试一下mysql绑定变量的效果. 以前看网上介绍大部份都说mysql没有sql共享池的概念,所以也不存在sql预解析或绑定变量的说法.         今天测试了一下(通过网络抓包和看服务器端sql日志的方法),发现mysql还是有sql预解析的实现.

SQL性能小测试得出的惊人结果:60%失败

- - 博客 - 伯乐在线
2011年,我开展了“3分钟测试你对SQL性能知道多少?”的测试活动. 其中包含五个问题,它们是这样的:每个问题有一个query/index查询,问你这样是否正确使用了索引. 至今, 这个测试已经成了  Use The Index, Luke网站上的一个热点. 这个测试已经被回答了28,000次.

详解SQL盲注测试高级技巧

- - FreeBuf.COM
这篇文章主要写了一些加快盲注速度的技巧和盲注中比较精巧的语句,虽然注入并不是什么新技术了. 但是数据库注入漏洞依然困扰着每一个安全厂商,也鞭策着每一个安全从业者不断前进. 首先来简单介绍一下盲注,盲注是不能通过直接显示的途径来获取数据库数据的方法. 在盲注中,攻击者根据其返回页面的不同来判断信息(可能是页面内容的不同,也可以是响应时间不同).

Web应用手工渗透测试——用SQLMap进行SQL盲注测试

- - FreeBuf.COM
本文主要关注SQL注入,假设读者已经了解一般的 SQL注入技术,在我之前的文章中有过介绍,即通过输入不同的参数,等待服务器的反应,之后通过不同的前缀和后缀(suffix and prefix )注入到数据库. 本文将更进一步,讨论SQL盲注,如果读者没有任何相关知识储备,建议先去wikipedia学习一下.