はじめに
2019年7月版kintoneにカーソルAPIという新規APIが追加されます。
このカーソルAPIはレコード全件取得のためのAPIです。
本記事では、次の内容を紹介します。
- カーソル(Cursor)APIの説明
- 複数のレコードを取得するAPI(
records.json
)でoffsetを指定した場合の性能比較
カーソルAPIを使ったレコード取得のコーディング例は、 レコード一括取得のJavaScriptコーディング例:カーソルAPIを利用する方法 を参照してください。
カーソルAPIが追加された理由
2020年7月定期メンテナンスで、
複数のレコードを取得するAPI(records.json
)
のパラメーターoffsetに上限値1万件を設定することを予定しています。
offsetに上限値が設定されるため、offsetを使ってレコードの一括取得を行っていて、かつ1万を超えるレコードを取得する可能性がある場合は、次の方法でレコードを取得してください。
- レコードIDによるソートのみでよい場合: 方法1:レコードIDを利用する方法
- レコードID以外のソートが必要な場合:カーソルAPIによるレコード一括取得(この記事で紹介します)
記事の後半で紹介しますが、カーソルAPIを使う方法のメリットは、offsetに比べ複雑なソート条件下でもレスポンスが劣化しないことです。
カーソル(Cursor)とは
DBにおける用語の1つでDB内の位置を保持するデータです。
DB上にカーソルを作成し、作成したカーソルの位置情報からレコードを取得するということが可能になります。
今回kintoneに追加されたカーソルに関するAPIは以下の3つです。
このAPIを使ってレコードを取得する一連の流れは以下のようになります。
-
カーソルを作成するAPIを使用し、カーソルを作成する。
-
カーソルからレコードを取得するAPIを使用し、レコードを取得する。
-
検索対象のレコードがなくなるまで2を繰り返し、レコードを取得する。
offsetによる一括取得との比較
APIのリクエストパラメーターで、ソート条件とレコードの取得数を変更し、さまざまな条件でレコード取得までにかかる時間を計測することで、offsetとカーソルAPIの比較をしていきます。
各条件ごとのグラフは、カーソルの作成から取得対象のレコードを取得してくるまでの累積時間です。
条件1
- 10万レコード
$id
のソート
グラフ
条件2
- 10万レコード
- 文字列1行のソート
グラフ
条件3
- 50万レコード
$id
のソート
グラフ
条件4
- 50万レコード
- 文字列1行のソート
グラフ
グラフを見ていただくと一目瞭然ですが、カーソルによる一括取得ではレコードの取得時間が短く、かつソート条件や取得する件数に左右されていません。
逆にoffsetによる方法は、ソート条件やレコード件数が取得時間に影響していることがわかります。
まとめ
複数のレコードを取得するAPI(records.json
)
のパラメーターoffsetに上限値が設定されます。
offsetによる方法でレコードの一括取得を行っている場合は、より高速で一括取得可能なカーソルによる方法に移行をしてください。
主な制限事項
- カーソルは1ドメインにつき同時に10個まで作成できます。
- カーソルの作成にかけられる時間は5分間です。それ以降はタイムアウトします。
- カーソルの有効期限は カーソルの作成API 、または カーソルからレコードを取得するAPI による最終リクエスト時刻から10分です。
その他の制限事項についてはカーソルAPIのドキュメントを参照してください。
このTipsは、2019年7月版kintoneで動作を確認しています。