カーソルAPIを使ってレコードを一括取得する

目次

はじめに

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を使ってレコードを取得する一連の流れは以下のようになります。

  1. カーソルを作成するAPIを使用し、カーソルを作成する。

  2. カーソルからレコードを取得するAPIを使用し、レコードを取得する。

  3. 検索対象のレコードがなくなるまで2を繰り返し、レコードを取得する。

offsetによる一括取得との比較

APIのリクエストパラメーターで、ソート条件とレコードの取得数を変更し、さまざまな条件でレコード取得までにかかる時間を計測することで、offsetとカーソルAPIの比較をしていきます。
各条件ごとのグラフは、カーソルの作成から取得対象のレコードを取得してくるまでの累積時間です。

条件1

  • 10万レコード
  • $idのソート
グラフ

条件2

  • 10万レコード
  • 文字列1行のソート
グラフ

条件3

  • 50万レコード
  • $idのソート
グラフ

条件4

  • 50万レコード
  • 文字列1行のソート
グラフ

グラフを見ていただくと一目瞭然ですが、カーソルによる一括取得ではレコードの取得時間が短く、かつソート条件や取得する件数に左右されていません。
逆にoffsetによる方法は、ソート条件やレコード件数が取得時間に影響していることがわかります。

まとめ

複数のレコードを取得するAPI(records.jsonのパラメーターoffsetに上限値が設定されます。
offsetによる方法でレコードの一括取得を行っている場合は、より高速で一括取得可能なカーソルによる方法に移行をしてください。

主な制限事項

その他の制限事項についてはカーソルAPIのドキュメントを参照してください。

information

このTipsは、2019年7月版kintoneで動作を確認しています。