Цикл node.js сразу завершился с ошибкой при вставке больших данных в cassandra
Я пытаюсь вставить 1000000 данных на Кассандру с помощью nodeJS. Но цикл обрывается немного позже. Каждый раз я не могу вставить более 10000 записей. Почему сломался цикл, кто-нибудь, помогите мне.
Благодарю.
Мой код выглядит так:
var helenus = require('helenus'),
pool = new helenus.ConnectionPool({
hosts : ['localhost:9160'],
keyspace : 'twissandra',
user : '',
password : '',
timeout : 3000
});
pool.on('error', function(err){
console.error(err.name, err.message);
});
var i=0;
pool.connect(function(err, keyspace){
if(err){ throw(err);
} else {
while (i<1000000){
i++;
var str="tkg" + i;
var pass="ktr" + i;
pool.cql("insert into users (username,password) VALUES (?,?)",[str, pass],function(err, results){
});
}
}
});
console.log("end");
2 ответа
Вы, вероятно, перегружаете очередь Cassandra, пытаясь сделать миллион запросов одновременно! Имейте в виду, что запрос является асинхронным, поэтому он выполняется, даже если предыдущий не был выполнен.
Попробуйте использовать async.eachLimit, чтобы ограничить его до 50-100 запросов одновременно. Фактическая максимальная параллельная емкость изменяется в зависимости от внутреннего процесса.
На самом деле проблем не было. Я проверил количество записей дважды в разное время и увидел, что операция записи продолжалась до значения тайм-аута. Значение времени ожидания указано внутри кода. В качестве резюме в коде нет сбоев, спасибо Джулиану Х. Лэму за ответ.
Но другой вопрос в том, как повысить производительность записи на кассандре? Что я должен изменить в файле cassandra.yaml или любой?
Спасибо.