挿入されるデータには、個々の長さが 256 を超えない 2 つの TEXT 列しかありません。
executeSimpleSQL
結果を得る必要がなかったので、最初に使用しました。これは、最大 20K の同時挿入に対してスムーズに機能しました。つまり、バックグラウンドでは、ラグやフリーズは観察されませんでした。
しかし、010万では挿入中にひどいフリーズが見られました。
というわけで、この2つを試してみました。
- 500 レコードのチャンクで挿入 - 20K レコードでも目に見えるフリーズが見られたため、これはうまく機能しませんでした。100万でも試してません。
そこで、非同期にすることにし、executeAsync を Bind などと一緒に使用しました。これは、わずか 20K レコードの目に見えるフリーズも示しています。これは、チャンクではなく、挿入される配列全体でした。
var dirs = Cc["@mozilla.org/file/directory_service;1"]. getService(Ci.nsIProperties); var dbFile = dirs.get("ProfD", Ci.nsIFile); var dbService = Cc["@mozilla.org/storage/service;1"]. getService(Ci.mozIStorageService); dbFile.append('mydatabase.sqlite'); var connectDB = dbService.openDatabase(dbFile); let insertStatement = connectDB.createStatement('INSERT INTO my_table (my_col_a,my_col_b) VALUES (:myColumnA,:myColumnB)'); var arraybind = insertStatement.newBindingParamsArray(); for (let i = 0; i < my_data_array.length; i++) { let params = arraybind.newBindingParams(); // Individual elements of array have csv my_data_arrayTC = my_data_array[i].split(','); params.bindByName("myColumnA", my_data_arrayTC[0]); params.bindByName("myColumnA", my_data_arrayTC[1]); arraybind.addParams(params); } insertStatement.bindParameters(arraybind); insertStatement.executeAsync({ handleResult: function(aResult) { console.log('Results are out'); }, handleError: function(aError) { console.log("Error: " + aError.message); }, handleCompletion: function(aReason) { if (aReason != Components.interfaces.mozIStorageStatementCallback.REASON_FINISHED) console.log("Query canceled or aborted!"); console.log('We are done inserting'); } }); connectDB.asyncClose(function() { console.log('[INFO][Write Database] Async - plus domain data'); });
また、久しぶりに非同期コールバックを取得したようです。通常、executeSimpleSQL
これよりもはるかに高速です.SQLite Manager Tool拡張機能を使用してDBをすぐに開くと、これが得られます(予想どおり)
SQLiteManager: Error in opening file mydatabase.sqlite - either the file is encrypted or corrupt
Exception Name: NS_ERROR_STORAGE_BUSY
Exception Message: Component returned failure code: 0x80630001 (NS_ERROR_STORAGE_BUSY) [mozIStorageService.openUnsharedDatabase]
私の主な目的は、10 万以上のデータをダンプし、後で必要に応じて読み取りを実行することでした。