いつもお世話になっております。
10000件のレコードのステータス更新にかなり時間がかかってしまいます。
APIの仕様上、100件ずつ分割してPUTリクエストしています。
並列処理だと15分くらいで終わるのですが、たまにデータベースロックのエラー(520?)が出るのでやめました。
順次処理だとエラーは出ませんが、40分近くかかります。
速度改善のなにかいいアイデア在りましたら是非お願いします。。
fetchRecords(kintone.app.getId()).then(function (resp) {
// GETで全レコード取得してくる
let obj;
let result = [];
resp.forEach(function (val) {
if (val.ステータス.value === status) {
obj = {
id: val.$id.value,
action: action,
};
result.push(obj);
}
});
// 更新対象のレコードが無かったら終わり
if (result.length === 0) {
alert('更新対象のレコードがありません。');
return;
}
const params = result.reduce(function (arr, item) {
const last = arr[arr.length - 1];
if (last.length === 100) {
arr.push([item]);
return arr;
}
last.push(item);
return arr;
}, [[]]);
let promiseArr = [];
let count = 0;
for (let i = 0; i < params.length; i++) {
let body = {
app: kintone.app.getId(),
records: params[i]
};
promiseArr.push(body);
}
const promises = promiseArr.map(function (item) {
return function (arg) {
return kintone.api(kintone.api.url("/k/v1/records/status", true), "PUT", item).then(function (resp) {
console.log(resp);
}).catch(function (error) {
alert(error.message);
});
};
});
promises.reduce(function (pre, cur) {
return pre.then(cur);
}, kintone.Promise.resolve());
}).catch(function (error) {
console.log(error);
alert("更新に失敗しました。" + error.message);
});