0

我是 node.js 的新手,并且有一个关于 mysql 的查询 - 使用 node.js 和 socket.io 进行批量插入查询。

    var socket = require( 'socket.io' );
    var express = require( 'express' );
    var http = require( 'http' );
    var mysql = require('mysql');

    // batch processing variables
    var TRIGGER_BATCH_INSERT_ON = 10;
    var batch_insert_counter = 1;
    var batch_insert_arr = [];

// create db connection
var con = mysql.createConnection({
    host: HOST,
    port: PORT,
    user: MYSQL_USER,
    password: MYSQL_PASS,
    database: DATABASE,
});

var app = express();
var server = http.createServer( app );

var io = socket.listen(server);

io.sockets.on( 'connection', function( client ) {

    // process client request using insert query
    client.on( 'message', function( data ) {

        users[0] = client.id;
        console.log( 'Message received ' + data.name + ":" + data.message );

        // check batch is ready for insert
        if(TRIGGER_BATCH_INSERT_ON == batch_insert_counter){

            // batch insert
            var query = con.query('INSERT INTO message (author, message) VALUES ?', [batch_insert_arr], function(err, results) {
                if (err) throw err;
            });

            // reset array and counter
            batch_insert_arr = [];
            batch_insert_counter = 0;
        }
        else{       

            // push records for batch processing
            batch_insert_arr.push([data.name,data.message]);
            batch_insert_counter = batch_insert_counter + 1;
        }
    });
});

server.listen(8000);

在将 10 条记录推入 batch_insert_arr 数组后,我插入了 mysql 表。但我怀疑它是否会基于单个套接字(client.on('message',function(data){})工作。这意味着单个套接字需要发送 10 条消息然后它才会工作。我需要连接任何套接字必须能够将数据推送到 batch_insert_arr 数组中,然后在批量 10 条记录后将其插入到数据库中。

另一个查询:插入 db 表后,我清空了 batch_insert_arr 数组。在处理插入查询时,可能会发生一些其他套接字也将数据添加到该数组中并清空它可能会丢失少量记录的情况。

请建议如何继续前进或建议我更好的方法。

提前致谢。

4

0 回答 0