私のデータベースに保存したいExcelファイル(別のデータベースベースのツールからエクスポートされたもの)に20000行以上あります。MySQLで巨大なデータセットを保存し、すべての行を保存しません
if(typeof require !== 'undefined') XLSX = require('xlsx');
var xlsx = "tmp8704.xlsx";
var url = "extFiles/"+xlsx;
var oReq = new XMLHttpRequest();
oReq.open("GET", url, true);
oReq.responseType = "arraybuffer";
var dataXLS;
oReq.onload = function(e) {
var arraybuffer = oReq.response;
/* convert data to binary string */
var data = new Uint8Array(arraybuffer);
var arr = new Array();
for(var i = 0; i != data.length; ++i) arr[i] = String.fromCharCode(data[i]);
var bstr = arr.join("");
/* Call XLSX */
var workbook = XLSX.read(bstr, {type:"binary"});
var first_sheet_name = workbook.SheetNames[0];
/* Get worksheet */
var worksheet = workbook.Sheets[first_sheet_name];
dataXLS = XLSX.utils.sheet_to_json(worksheet, {header:1});
var mysql = require("mysql");
var connection = mysql.createConnection({
host: 'xxx.xxx.xxx.xxx',
user: 'muser',
password: 'massword',
database: 'matabase'
});
connection.connect((err) => {
if(err) {
return console.log(err.stack);
}
console.log("Connection succesfully established");
});
for(var x in dataXLS){
if(parseInt(x)+2 != dataXLS.length) {
var myNumber = dataXLS[parseInt(x)+2][6];
console.log("Stelle " + x + " :" + dataXLS[parseInt(x)+2][0] + " " + dataXLS[parseInt(x)+2][1] + " " + parseFloat(myNumber));
$queryString = "INSERT INTO `articles` (articleno,text,price) VALUES ("+parseInt(dataXLS[parseInt(x)+2][0])+",'"+dataXLS[parseInt(x)+2][1]+"',"+parseFloat(myNumber)+");";
connection.query($queryString, (err, rows, fields) => {
if(err) {
return console.log("An error ocurred with the query", err);
}
});
} else {
console.log(parseInt(x)+2);
console.log(dataXLS.length); //19610
break;
}
}
connection.end(() => {
console.log("Connection successfully closed");
});
}
oReq.send();
最初の質問:私のテーブルにはデータが保存されていますが、すべてのデータではありません。どうして?
2番目の質問:これを行うより効率的な方法はありますか?
内部的には挿入しないでくださいが、大きな質問が1つあります。 INSERT(...)VALUES($ array [0] ['col1']、$ array [0] ['col2'])、($ array [1] ['col1']、$ array [1] [' col2 ']など)などです。 –
2番目の質問に対する回答を得るために、ソリューションの「大きな図」を説明してください。データが「別のデータベースツール」(どのDBツールですか?)から来たときに、なぜソースデータベースに接続できないのですか?また、データ移行のための簡単なソリューションが必要ですか?あなたはこの仕事を頻繁に実行する必要がありますか?パフォーマンス上の理由から、 –
の場合、準備されたステートメントは一般的にパフォーマンスが向上します。 1回だけ実行される移行ジョブの場合は、Excelシートから複数のINSERTステートメントを含むスクリプトを作成します。 –