javascript – Der gleichzeitige Zugriff auf den Knoten stimmt nicht mit dem erwarteten Ergebnis überein
怪我咯
怪我咯 2017-06-22 11:54:23
0
1
735
  • Die Logik des Tests ist relativ einfach, das heißt, der Knoten greift auf die Datenbank zu, um Daten abzufragen. Ich habe JMeter verwendet, um Multi-Thread-Tests durchzuführen Die erwarteten Ergebnisse (gemäß den nicht blockierenden Eigenschaften von Node) sollten sein. Es sind 5 Threads, die das Ergebnis gleichzeitig in 2 Sekunden zurückgeben, aber das Ergebnis sieht so aus:

  • Den Ergebnissen zufolge wird Node in Serie ausgeführt. Dies stimmt nicht mit dem erwarteten Ergebnis überein.

  • Code:

app.get('/', function (req, res) { var now = +(new Date()) connection.query('select count(*) from ACTIVITY group by name', function (err, result, fields) { var curr = +(new Date()) var tmp = '耗时:' + (curr - now) console.log(tmp) res.send(tmp) }) })
  • Hinweis: Es handelt sich nicht um ein Datenbankverarbeitungsproblem, da ich zwei verschiedene Computer verwende, um dieselbe SQL-Anweisung auszuführen, und die Zeit 2 Sekunden beträgt


Das Folgende sind Ergänzungen

  • Laut @biancheng liegt der Grund darin, dass mehrere SQL-Anweisungen dieselbe Verbindung verwenden und der Datenbankverbindungspool wie folgt verwendet wird:

  • Der Code lautet wie folgt:

app.get('/', function (req, res) { var now = +(new Date()) pool.getConnection(function (err, conn) { console.log('--连接池连接成功!' + +(new Date())) conn.query('select count(*) from ACTIVITY group by name', function (err, result, fields) { var curr = +(new Date()) var tmp = '耗时:' + (curr - now) console.log(tmp) res.send(tmp) }) }) })
  • Dieses Ergebnis stimmt besser mit den Erwartungen überein, und alle Rückgabezeiten betragen 4 Sekunden+. Wenn der Druck zunimmt, wird die Abfragezeit natürlich länger. Die Rückkehrzeit beträgt 2s+, was den Erwartungen entspricht!

怪我咯
怪我咯

走同样的路,发现不同的人生

Antworte allen (1)
某草草

时间起始是 query 之前,结束是 query 完成,所以每个时间是 query 运行的时间,

Node 是异步了,但是你用的是同一个 connection,connection 本身是不是需要排队呢?据我所知,多数数据库在同一个 connection 中执行的 SQL 都是排队挨个进行的……多个 connection 之间可能会并行。

    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage
    Über uns Haftungsausschluss Sitemap
    Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!