# 大量(10000件)のレコードのステータス更新について

**URL:** <https://community.cybozu.dev/t/topic/4194>\
**Category:** kintone 開発相談\
**Created:** [2019 年 6 月 27 日午前 2:27 UTC](https://community.cybozu.dev/t/topic/4194 "2019-06-27T02:27:48Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Legacy\_Account1051](https://avatars.discourse-cdn.com/v4/letter/l/9de053/32.png) [@Legacy\_Account1051](https://community.cybozu.dev/u/Legacy_Account1051)\
**Post date:** [2019 年 6 月 27 日午前 2:27 UTC](https://community.cybozu.dev/t/topic/4194/1 "2019-06-27T02:27:48Z")

</div>

いつもお世話になっております。

10000件のレコードのステータス更新にかなり時間がかかってしまいます。

APIの仕様上、100件ずつ分割してPUTリクエストしています。

並列処理だと１５分くらいで終わるのですが、たまにデータベースロックのエラー(520?)が出るのでやめました。

順次処理だとエラーは出ませんが、４０分近くかかります。

速度改善のなにかいいアイデア在りましたら是非お願いします。。

```
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);

});

```

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1574](https://avatars.discourse-cdn.com/v4/letter/l/76d3ee/32.png) [@Legacy\_Account1574](https://community.cybozu.dev/u/Legacy_Account1574)\
**Post date:** [2019 年 6 月 27 日午前 5:43 UTC](https://community.cybozu.dev/t/topic/4194/2 "2019-06-27T05:43:15Z")

</div>

お試しされている通り、（自身の経験からも）PUTを並行リクエストするのが難しいため、時間の短縮は難しい内容だと考えます。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1051](https://avatars.discourse-cdn.com/v4/letter/l/9de053/32.png) [@Legacy\_Account1051](https://community.cybozu.dev/u/Legacy_Account1051)\
**Post date:** [2019 年 6 月 27 日午前 7:11 UTC](https://community.cybozu.dev/t/topic/4194/3 "2019-06-27T07:11:37Z")

</div>

Yamashitaさん

コメントありがとうございます！

リクエストの送り方で速度改善できるかと挑戦してましたが難しいですかねー・・・

DBの性能アップ待ちですかね。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1491](https://avatars.discourse-cdn.com/v4/letter/l/ed8c4c/32.png) [@Legacy\_Account1491](https://community.cybozu.dev/u/Legacy_Account1491)\
**Post date:** [2019 年 6 月 27 日午前 7:51 UTC](https://community.cybozu.dev/t/topic/4194/4 "2019-06-27T07:51:25Z")

</div>

サーバーの負荷を一切考えなければ、

１）並列処理で全部走らせる。

２）ステータス変更に失敗したレコードだけを、順次処理で再度処理する。

これで、トータル時間は短縮できるかもしれません。

（サイボウズさんのインフラ担当さんに嫌われるかもしれませんが）

&nbsp;

あとは、10000件のレコードのステータス更新をしなければいけない状況自体を、避けられないかについて、運用とか設計レベルで見直しをしてみるかでしょうか。メンテナンスとかで10000件のステータス変更とかは想像つきますが、日常的にその処理が必要なのは、私の経験内だとちょっとイメージがわかないので、運用的な逃げ道がありそうな気もします。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1574](https://avatars.discourse-cdn.com/v4/letter/l/76d3ee/32.png) [@Legacy\_Account1574](https://community.cybozu.dev/u/Legacy_Account1574)\
**Post date:** [2019 年 6 月 27 日午前 8:07 UTC](https://community.cybozu.dev/t/topic/4194/5 "2019-06-27T08:07:20Z")

</div>

そもそも論的に10,000を一度に処理しないといけない状態を生み出さなくて済む運用・条件が作り出せればそれが一番だと思います。  
もしくは、バックエンドで処理する等ですね。

PUTの失敗率は結構波がある様子で、失敗分だけ後追いする  
逐次系も結果的にまぁまぁ時間かかったり、エラーのハンドリングが微妙な書き方になってくので、50歩100歩かもしれません。  
ロックさせると暫く生き返らなくなって連続処理にできなくなることもありますし。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1051](https://avatars.discourse-cdn.com/v4/letter/l/9de053/32.png) [@Legacy\_Account1051](https://community.cybozu.dev/u/Legacy_Account1051)\
**Post date:** [2019 年 6 月 27 日午前 8:22 UTC](https://community.cybozu.dev/t/topic/4194/6 "2019-06-27T08:22:26Z")

</div>

松村さん

サーバに負荷かけるのはやっぱり避けたいですよねー。

&nbsp;

\>あとは、10000件のレコードのステータス更新をしなければいけない状況自体を、避けられないかについて、運用とか設計レベルで見直し

&nbsp;

やっぱりそうなっちゃいますよねー

相手側に運用で何とかしてもらえるよう打診します！

ありがとうございました！

&nbsp;

&nbsp;

Yamashitaさん

&nbsp;

\>ロックさせると暫く生き返らなくなって連続処理にできなくなることもありますし。

&nbsp;

これは知りませんでした！これからは並列処理はできるだけしないようにします。

ありがとうございました！

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1574](https://avatars.discourse-cdn.com/v4/letter/l/76d3ee/32.png) [@Legacy\_Account1574](https://community.cybozu.dev/u/Legacy_Account1574)\
**Post date:** [2019 年 6 月 27 日午前 8:52 UTC](https://community.cybozu.dev/t/topic/4194/7 "2019-06-27T08:52:50Z")

</div>

\>\>ロックさせると暫く生き返らなくなって連続処理にできなくなることもありますし。

&nbsp;

レコードの更新、ステータス更新もPUTは負荷がかかりやすいようで、1万くらいではロックしないと思いますが、

感覚的に数十万くらいから危ない感じです。API通らないなぁと思ってブラウザでアクセスしようとすると、

困り顔アイコンの520の画面になってて画面からも暫く操作できなくなるってことが起きたりします。

他方しっかり処理の順序制御してて困り顔に出会ったことは、ブラウザからの同時アクセス（利用ユーザー）が多い

ケースであったような、なかったようなといった感じです。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1051](https://avatars.discourse-cdn.com/v4/letter/l/9de053/32.png) [@Legacy\_Account1051](https://community.cybozu.dev/u/Legacy_Account1051)\
**Post date:** [2019 年 6 月 27 日午後 11:42 UTC](https://community.cybozu.dev/t/topic/4194/8 "2019-06-27T23:42:04Z")

</div>

Yamashitaさん

&nbsp;

数十万件ですか・・・経験したことないので為になります！

規模が大きくなるとAPI同時リクエスト数とかも視野に入れないとダメなんですねー。

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex015/uploads/cybozu/original/1X/d5c841c3c5a6cb66eed514001c1b45147c9e1f4f.png) [@system](https://community.cybozu.dev/u/system)\
**Post date:** [2025 年 8 月 26 日午前 5:13 UTC](https://community.cybozu.dev/t/topic/4194/9 "2025-08-26T05:13:44Z")

</div>

クローズされました: 2025 年 8 月 26 日午前 5:13 UTC

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。
