javascript - 服务器无法处理循环

标签 javascript node.js database

好吧,我使用以下代码生成 1000 万个不同的行,

var serverSeed = 'hidden';
var games = 1e7;
var gamesLeft = games;

generateGames();

function generateGames(){
    if(games > 0){
        for(var x = 0; x < 1000; x++){
            serverSeed = genGameHash(serverSeed);
            query('INSERT INTO `hash` SET `hash` = ' + pool.escape(serverSeed) + ', `game` = ' + pool.escape(games-x));
        }   

        games = games - 1000;

        console.log("Progress: " + (100 - games/gamesLeft*100).toFixed(2) + "%");

        generateGames();
    }else{
        console.log('Done generating ' + gamesLeft + ' games.');
    }
}

虽然从 0.00 到大约 20.00% 都很好,但是服务器返回给我一个错误,基本上告诉我内存不足。

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory Aborted (core dumped)

我正在生成一个哈希链,因此我需要连续生成它们,我该怎么做才能仍然能够生成哈希链?

查询

function query(sql, callback) {
    if (typeof callback === 'undefined'){
        callback = function() {};
    }

    pool.getConnection(function(err, connection) {
        if(err) return callback(err);
        connection.query(sql, function(err, rows) {
            if(err) return callback(err);
            connection.release();
            return callback(null, rows);
        });
    });
}

最佳答案

您可能想要进行适当的内存分配并减慢迭代速度:

function generateGames(games){
  if(!games) return console.log("done.");
  var serverSeed = genGameHash(serverSeed);
  query('INSERT INTO `hash` SET `hash` = ' + pool.escape(serverSeed) + ', `game` = ' + pool.escape(games),function(){
      generateGames(games - 1);
 });        
}

generateGames(1e7);

这会创建一个插入队列,您可以添加任意数量:

generateGames(1e7/3);
generateGames(1e7/3);
generateGames(1e7/3);

关于javascript - 服务器无法处理循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45437130/

相关文章:

node.js - webpack --watch && http-server ./dist -p 8080 --cors -o 不起作用

java - 使用 DefaultTableModel 插入后 JTable 不刷新

linux - 在Jenkins中使用maven exec插件运行nodejs

javascript - 类型错误 : Cannot read property 'findAll' of undefined (mariaDB, ExpressJs)

wpf - 通过 Entity Framework 将用户插入数据库不起作用

database - 如何获取 JDBC 日期格式?

javascript - Node.js 是否应该用于密集处理?

javascript - 从文本形成消息的函数 [JavaScript]

javascript - AngularJS:TypeScript 编译过程和 gulp-uglify - 有没有办法强制 TS 使用 IIFE 生成函数而不是变量?

javascript - 如何检索通过ajax从 Controller 发送到 View 的数组?