做了一个nodejs并发测试,先描述一下环境 数据库mysql,大概两张表,读取第一张表test的数据,拿出来-1,存到第二张testlog表记录一下,用jmeter同事模拟50个请求,结果发现,部分数据没有-1成功

test 表数据
id num desc
1 94 2017-02-28 14:41:17:86 testlog 表数据
id, testid, num, desc
4 1 99 2017-02-28 14:32:42:28
5 1 98 2017-02-28 14:32:43:76
6 1 97 2017-02-28 14:32:44:89
7 1 97 2017-02-28 14:32:44:88
8 1 97 2017-02-28 14:32:44:28
9 1 97 2017-02-28 14:32:44:86
10 1 97 2017-02-28 14:32:44:45
11 1 97 2017-02-28 14:32:45:48
12 1 97 2017-02-28 14:32:45:49 推测可能是同时修改数据,某一个现在没有修改完毕,下一个线程已经读取过了,导致数据更新不一致,但是nodejs不都是单线程的吗,请各位大神解析一下,谢谢
代码如下
var http = require('http');
var url = require('url');
var util = require('util');
http.createServer(function (req, res) {
res.writeHead(200, {
"Content-Type": "text/html;charset=utf-8"
});
res.end("OK");
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '123456',
database: 'myData'
});
connection.connect();
connection.query('SELECT * from test', function (err, rows, fields) {
if (err) {
console.log(err);
return;
};
var test = rows[0]; //读取num
var num = test.num - 1;
var id = test.id;
connection.query("update test set num=" + num + ",`desc`='" + dateFormat(new Date()) + "'", function (err, res) {
if (!err) {
var insert = "insert into testlog(testid,num,`desc`) values ('" + id + "','" + num + "','" + dateFormat(new Date()) + "')";
connection.query(insert, function (err, res) {
if (!err) {
connection.end();
console.log("update sucess!");
} else {
console.log(err);
}
});
} else {
connection.end();
console.log(err);
}
});
});
function dateFormat(date) {
var fmt = "yyyy-MM-dd hh:mm:ss:SS";
var o = {
"M+": date.getMonth() + 1, //??
"d+": date.getDate(), //?
"h+": date.getHours(), //С?
"m+": date.getMinutes(), //?
"s+": date.getSeconds(), //?
"q+": Math.floor((date.getMonth() + 3) / 3), //??
"S+": date.getMilliseconds() //?ī
};
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
}
for (var k in o) {
if (new RegExp("(" + k + ")").test(fmt)) {
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
}
}
return fmt;
}
}).listen(3000);

最新文章

  1. 小型文件数据库 (a file database for small apps) SharpFileDB
  2. 事件委托和JQ事件绑定总结
  3. 【翻译习作】 Windows Workflow Foundation程序开发-第一章01
  4. cgi表单的处理
  5. asp.net 中使用不同的数据源绑定gridview
  6. Qt在各平台上的搭建qt-everywhere
  7. 洛谷 [P1314] 聪明的质检员(NOIP2011 D2T2)
  8. [Linux] deepin15.8搭建LNMP环境
  9. 线段树及Lazy-Tag
  10. [SDOI2014]数数
  11. 接上 操作系统java项目设计图纸 一步一步在进化
  12. html转译字符 字符实体
  13. Web前端应该从哪些方面来优化网站
  14. python2.6升级2.7导致yum无法使用 No module named yum
  15. 【转载】在block中使用weakSelf/strongSelf
  16. vue v-for(数组遍历)
  17. Delphi - 字符串 详解
  18. CSS需要注意的问题1(转生活因拼搏而精彩的网易博客)
  19. PHP加密方式。 base!base!base!
  20. forword 与 redirect

热门文章

  1. composer 库无法提交git
  2. 【bzoj1044】[HAOI2008]木棍分割 二分+dp
  3. 【Luogu】P3228数列(数学题)
  4. 【HDU 2594 Simpsons' Hidden Talents】
  5. 【马克-to-win】—— 学习笔记
  6. 《c程序设计语言》-2.10 不用if-else 转换大小写
  7. DP———6.两个状态之间的 处理
  8. bzoj 3309 DZY Loves Math 莫比乌斯反演
  9. php命名空间与可变函数
  10. javascript jquery document.ready window.onload