这些是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/

10-16 00:10