実際にデータベース接続のようなI/Oを処理していないため、ユーザーに "Hello World"を送信して膨大なスループットを受け取るため、ベンチマークが信頼できません。私は現時点ではスケーラブルなものを作っていませんが、すぐにやろうとしています。私はより良い結果が必要であり、可能な限り現実的であることを確認します。NodeJSとPHPをMySQLクエリのパフォーマンスと適切に比較する方法
両方のスクリプトで次のクエリを実行します。「SELECT * FROM table」は200個のクエリを返します。サンプルの結果は以下のとおりです。
(MySQLの、NodeJS ANDA Apacheサーバは、各テストの前に再起動されている両方)
1000 requests, 100 concurrency: Apache: 564.20 req/s NodeJS: 102.61 req/s
1000 requests, 200 concurrency: Apache: 393.75 req/s NodeJS: 105.12 req/s
1000 requests, 400 concurrency: Apache: 42.75 req/s NodeJS: 105.07 req/s
1000 requests, 1000 concurrency Apache: 16.5 req/s NodeJS: 119.53 req/s
クエリは常に同じなのでしかし、私はそうではありませんこれは、これらの結果を信用していませんリアルタイムアプリケーションで使用できます。両方のスイートを自分でテストするにはどうすればいいですか?ランダムな挿入やランダムな選択へのSQLクエリの変更は役に立ちますか?私がサーバを再起動しないと、PHP-MySQLの場合のキャッシングが役立ちます。
私はbencmarkするために使用されるコード: NodeJS:
var mysql = require("mysql");
var os = require('os');
var MySQLPool = require("mysql-pool").MySQLPool;
var client = new MySQLPool({
poolSize: 40,
user: 'root',
password: '123',
database: 'test'
});
var express = require('express'), routes = require('./routes');
var app = module.exports = express.createServer();
app.get('/tables', function(req,res){
client.query(
'SELECT * FROM sample s',
function selectCb(err, results, fields) {
if (err) {
throw err;
}
res.send(results);
}
);
});
var cluster = require("cluster");
if (cluster.isMaster) {
for (var i = 0; i < os.cpus().length * 2; i++) {
var worker = cluster.fork();
}
} else {
app.listen(3000);
}
PHP私は、パフォーマンスを向上させるためのRedisとMemcachedのような他のアプローチがある知っている
$host = "localhost";
$username = "root";
$password = "123";
$db_name = "test";
$db=mysql_connect($host, $username, $password) or die('Could not connect');
mysql_select_db($db_name, $db) or die('no db');
$sth = mysql_query("SELECT * FROM sample s");
$rows = array();
while($r = mysql_fetch_assoc($sth)) {
$rows[] = $r;
}
echo json_encode($rows);
?>
が、私生のMySQLのパフォーマンスに興味があります。