这些是Iam在AWS T2.medium 2 core / 4GB实例上运行的代码。使用相同配置的不同实例,使用相同的子网进行基准测试。基准测试结果显示两个堆栈的吞吐量和响应时间相同。我使用Jmeter进行性能指标评估。结果表明,MEAN比LAMP慢。测试了多达600个并发请求,MEAN的吞吐量约为35req / sec,LAMP的吞吐量约为37req / sec。为什么Iam的吞吐量如此之低,为什么MEAN的读取性能最差。
LAMP堆栈代码:
<?php
$con = mysql_connect("localhost", "root", "root");
if(!$con) die('connection failed');
$db = mysql_select_db("mms-php", $con);
$result = mysql_query("SELECT * FROM comments LIMIT 10", $con);
$rows = array();
while( $row = mysql_fetch_assoc($result) ) {
array_push($rows, $row);
}
header("Content-type:application/json");
echo json_encode($rows);
//print_r($rows);
//$result = mysql_query("INSERT INTO msgs (msg) VALUES ('" . rand() . time() . "')", $con);
mysql_close($con);
?>
mysql有一个包含1000个条目的表注释。同样,MongoDB具有一个包含1000个条目的集合。
MEAN堆栈代码:
var MongoClient = require('mongodb').MongoClient
, assert = require('assert');
var http = require('http');
var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('death', function(worker) {
console.log('worker ' + worker.pid + ' died');
});
} else {
// Connection URL
var url = 'mongodb://localhost:27017/test';
// Use connect method to connect to the Server
MongoClient.connect(url, function(err, db) {
console.log("Connected correctly to server");
http.globalAgent.maxSockets = 10;
http.createServer(function (req, res) {
//process.nextTick(function(){
res.writeHead(200, {'Content-Type': 'text/plain'});
db.collection('comments').find({},function(err, docs) {
if(err) {
console.log(err);
res.write('an error occurred');
res.end();
} else {
// console.log(docs);
docs.each(function(err, doc){
if(doc)
res.write(JSON.stringify(doc));
else
res.end();
//console.log(JSON.stringify(doc));
});
}
});
// });
}).listen(1337, '0.0.0.0');
});
}
最佳答案
总之,综合基准测试主要用于营销。对于只读工作(分析和搜索,其中写入步骤通常每天/隔夜一次),我将MySQL的所有数据都放在60Gb + squashfs RAM磁盘(LAMP)和Elasticsearch中(Linux上的JavaScript和PHP客户端) )。后者是用于实时/近时更新的可行选项(尽管存在Java偏见,我还是喜欢Elasticsearch),再加上用于事务部分的MySQL数据库(及其标准化模型可以允许以后的ETL进行分析)。
我想您可能并没有对应用程序的MEAN vs LAMP实现进行基准测试。我猜想您更有可能对启动进行基准测试,打印(JSON编码)乱七八糟的行和拆卸成本(建立进程/线程实例,建立数据库连接等等),而不是数据库交易成本适当。我建议您就是这种情况:一个非常小的数据库(1000个元素)将被缓存;除了返回游标和整个表/等效表之外,您不要求数据库做任何其他事情;然后将其重新分配给输出流(不进行任何转换-除非您的客户端表示要这样做)。最后,正如其他人所暗示的那样,您无法控制执行比较的平台。您可以在最微薄的计算机上运行LAMP&MEAN,从而可以更加公平地进行比较。
例如,Apache配置(与大多数其他堆栈一样)可以缓存结果,因此您的基准测试也很容易被欺骗。
您是否尝试过各种客户来执行这两种实现? Apache的ab是微不足道的,但对于我一直以来参与的应用程序而言,则毫无意义。非常适合发现系统在饱和时的行为,但不像我已经成功地用来扩展应用程序服务和数据库层(在那儿,它们都不能全部装入RAM并可以进行分发)那样httperf符合实际情况的频率)。
关于mysql - LAMP和MEAN堆栈中没有特定的读取性能差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31490333/