我正在尝试用xlsx文件的内容填充cassandra表,但是我面临一个问题。
我成功地完成了一个数组,其中包含填充表所需的所有查询(“insert into my_table(values name,…)、values(values,…);”)。
所以我的数组有7000个字符串。
然后我做一个承诺,在这个承诺里面,我做了一个循环来填充和排列承诺,以便在所有承诺都结束时触发第一个承诺。
这是我做的代码
index.js=>
const ImportFileContent = require("./scripts/import_file_content")
const InsertDb = require("./scripts/insertDb")
const cassandra = require('cassandra-driver');
const databaseConfig = require('./config/database.json');
const authProvider = new cassandra.auth.PlainTextAuthProvider(databaseConfig.cassandra.username, databaseConfig.cassandra.password);
const db = new cassandra.Client({
contactPoints: databaseConfig.cassandra.contactPoints,
authProvider: authProvider
});
// ImportFileContent.importFileContent return an array of string, those strings contains all the 7000+ queries
ImportFileContent.importFileContent().then(queries => {
InsertDb.clients(db, queries).then(result => {
console.log(result);
db.shutdown(function (err, result) {
});
});
});
let DB = null;
module.exports = {
ClientsLeasing: function (db, queries) {
DB = db;
return insertClientsLeasing(queries);
}
}
function insertClientsLeasing(queries) {
return new Promise((resolve, reject) => {
let nbError = 0;
let nbSuccess = 0;
let promisesArray = [];
//I made i <2000 here because my cassandra setup doesn't manage more than 2048 request in parallele
for (let i = 0; i < 2000; i++) {
promisesArray.push(new Promise(function (resolve, reject) {
DB.execute(queries[i], function (err, result) {
if (err) {
nbError++;
reject(err)
} else {
nbSuccess++;
resolve();
}
});
}));
}
Promise.all(promisesArray).then((result) => {
console.log("is over")
console.log("over ===================== success => ", nbSuccess, " errors => ", nbError);
resolve("success");
}).catch((error) => {
console.log(error);
console.log("is over error")
console.log("over ===================== success => ", nbSuccess, " errors => ", nbError);
resolve("error");
});
});
}
所以现在当我启动这个代码时,我的输出是
然后,当我通过cqls在表中进行计数时,这个输出只得到1962行
我觉得我在履行诺言的过程中遗漏了一些东西。我真的不明白。
谢谢