设为首页 收藏本站
查看: 670|回复: 0

[经验分享] SQL/MongoDB 连接并发测试

[复制链接]

尚未签到

发表于 2015-7-6 07:57:20 | 显示全部楼层 |阅读模式
  最近一直在搞mongodb 文件服务器大量文件并发上传测试,在官方文档发现mongo是线程安全的,支持单一连接下的并发操作。印象ADO.NET 似乎不支持单一连接并发。于是,测试一下来证实这个疑虑。(前两篇小记一直纠结mongodb吃内存导致并发文件上传变慢问题,经过这两天测试,发现文件并发上传越来越慢的瓶颈是磁盘的IO读写的瓶颈)
  以10W条/20W条 记录写入测试,下面是测试结果
操作10W w/s20W w/s操作方式备注
179.958163.396主线程 有池 单连接 单打开单打开指的一次open close 内执行所有写入操作
279.958164.412主线程 有池 单连接 多打开多打开指的写入一次就open close一次
    总结:可以看出有池的情况open close基本没有性能消耗。
MSDN官方解释,池的效果在minpoolsize不为零的情况,
总保持相应数量的活动连接,当Open的时候实现直接用了活动连接,
而Close操作并没close,只是又将活动连接放回池里。
379.13163.396主线程 无池 单连接 单打开 
4290.334620.694主线程 无池 单连接 多打开 
    总结:无池的情况下,open close非常消耗性能,由于没池每次Open
Close 都要打开关闭连接 ,所以效率没有池高。
549.13142.33单线程 无池 单连接 单打开异步执行反而快了?测了几次都这个结果
6326.495865.44单线程 无池 单连接 多打开 
     
7137.985 有池 单连接 单打开 10线程并行写入  写入锁Ado.net 不支持单连接并行写入 通过线程锁控制实现
8141.464 有池 单连接 多打开 10线程并行写入  写入锁Ado.net 不支持单连接并行写入 通过线程锁控制实现
    总结:单连接通过写入锁控制多线程写入速度明显慢了很多,
单连接并不适合并发写入操作。
918.94337.815有池 10连接并行 单打开 相当于操作1 ----  10个单连接 单打开 的并行操作
1019.65841.793有池 10连接并行 多打开 相当于操作1 ----  10个单连接 多打开 的并行操作
    总结: 多线程并行多连接的操作效果还是很理想的,发挥了多线程任务的优势。Connection是非线安全的,也就是说最好为每个线程单独创建一个数据库连接实例是最理想的。
  可以确定的是ado.net connection 是非线程安全的 一个连接下一次open close 过程不允许并发,并且多次open close并发会相互冲突 (想并发只能通过锁来控制了,但这个不用想肯定效率不高)。
  而mongodb 则在这方面具有优势, mongo是线程安全的。一个连接下是允许并行写入操作的,同样mongodb 可以多连接并发,然后每个连接下又可以多并发写入操作,这样每秒并写入记录数可以更高。mongodb的池,是预先创建指定数量的闲置连接,用到其中的连接的时候,该转为活动状态。经过这两天测试,mongodb的单连接的并行写入效率没有并行多连接写入的效率高。推测mongodb的单连接并行写入也采用了写锁或者队列,效率上可能低于多连接操作。因此在合理的并行线程内,合适的并行连接数写入很重要。
  由此可见,不同的数据库池的设计理想有所不同。
  而ado.net 写入并发实现只有下面两种合适的
一 有池-单连接 单打开  并发写入(引及写入锁) (锁的引入,反而导致速度下降,这个方案排除了)
  二 无池-并发多连接   单打开                   这种不推荐
二 有池-并发多连接   单打开/多打开          目前,测试只有这种情最理想
  另外建议连接池的minpoolsize 要设置(不设置或设置为零,会在一定时间内关闭池内所有连接)但不要设置太高,否则会占用太多资源。详细可查看MSDN介绍。
  在微软的Petshop以及很多开源项目曾经看到的SQLHelper此类的数据库存操作类大都是静态的? 为什么呢,因为静态方法在不引用静态字段的前提下是线程安全的。静态字段是多线程共享的,而静态方法在每个线程是都有一个副本,只要静态方法不调用静态字段则是线程安全的,因此我们看到为何SQL 单连接的情况都是使用静态方法,可以防止单连接并发操作。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-83552-1-1.html 上篇帖子: MongoDB工具进展-皮肤-拿来主义 下篇帖子: mongodb 服务器内存控制(WSRM)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表