node.js mongodb数据库驱动性能测试

本文对比了使用Node.js和Java进行MongoDB数据插入和查询的性能测试。结果显示,Java在数据插入和查询方面均优于Node.js,尽管Node.js以非阻塞IO著称。在插入100W条数据时,Java耗时144.73秒,而Node.js耗时312.95秒;在并发查询200W条数据时,Java达到1107次/秒,Node.js为867次/秒。作者对这一反常现象提出疑问,怀疑可能是Node.js的MongoDB驱动性能问题或自身代码问题,并寻求专家解答。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

众所周知,node.js的特点是单线程、事件驱动、异步IO,适合开发运行在分布式设备上的实时性较强的数据密集型应用。今天做了一个性能测试,相同的场景下,拿java和node对比测试,数据库是mongodb。Node是非阻塞IO,Node是非阻塞IO,Java是阻塞I0,理论上,Java在IO操作上性能不会高于node,cpu使用率上node也应该会远超java,但通过插入和查询的测试结果来看恰好相反。不知道什么原因,我还做了一个测试,抛开数据库IO操作,如果只是简单的静态页面请求,node还是强于java servlet的。个人怀疑目前node官方mongodb驱动在性能上存在一些问题,或者说就这个性能了,或者是我代码写的有问题,大家有没有这方面经验,请专家给指点下。


压测工具:apache ab

测试内容:1、数据插入。java和node插入mongodb数据100W条。

                   2、数据查询。node和java各查询两个集合数据(各200W条)并将其返回。

系统配置:操作系统:win7、系统内存:8G、cpu:4核、node版本:0.10

数据库:mongodb

数据格式:{ "_id" : ObjectId("54ce9a5452fba9ead1b4a62b"), "name" : "jerry37704030", "age": 8, "status" : "YHOO0", "groups" : [ "news", "sports" ] }

线程:java、node均采用单进程单线程方式测试

java mongodb驱动:官方提供

node mongodb驱动:来自npm mongodb,也是官方提供的

1、数据插入

1、1 java+mongodb

插入UserJava集合100W条记录

代码:

耗时:144.73秒

cpu负载:


1、2 node+mongodb

插入UserNode集合100W条记录

代码:

耗时:312.95秒

cpu负载:


插入总结:

java和node分别插入100W条记录格式相同的数据,java用时144.73秒,node用时312.95秒。cpu负载一致。插入效率上java占优,用时为node一半。

2、数据查询

数据:UserJava 200W,UserNode 200W

从两个集合中取出数据合并返回。

2、1 java servlet+tomcat

代码:

压力测试:

ab -c 500 -n 50000 http://127.0.0.1:8080/mongodb/mt

cpu负载:


2、2 node+express

代码:


压力测试:

ab -c 500 -n 50000 http://127.0.0.1:3000/

cpu负载:


查询总结:

java并发1107次/秒,node并发867次/秒。cpu使用率,java 68%,node40%,内存上java和node出入不大。

分析:

插入方面:java和node分别插入100W条记录格式相同的数据,java用时144.73秒,node用时312.95秒。cpu负载一致。

查询方面:java并发1107次/秒,node并发867次/秒。cpu负载,java 68%,node40%,内存上java和node出入不大。

疑问:

Node是非阻塞IO,Java是阻塞I0,理论上,Java在IO操作上性能不会高于node,cpu使用率上node也应该会远超java,但通过插入和查询的测试结果来看恰好相反。不知道什么原因,我还做了一个测试,抛开数据库IO操作,如果只是简单的静态页面请求,node还是强于java servlet的,个人怀疑目前node官方mongodb驱动在性能上存在一些问题,或者说就这个性能了,或者是我代码写的有问题,大家有没有这方面经验,请专家给指点下。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值