javascript – Der gleichzeitige Zugriff auf den Knoten stimmt nicht mit dem erwarteten Ergebnis überein
怪我咯
怪我咯 2017-06-22 11:54:23
0
1
807
  • 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