使用游标批量获取数据

aki发表于:2020年08月14日 14:07:09更新于:2021年01月19日 16:06:32

概要

2019年 7月版的kintone新增了游标 API。

此API是用于获取所有记录的API。
本文主要介绍以下内容。

  • 游标(Cursor) API 的说明

  • 在批量获取记录API(records.json)里指定 offset 时的性能比较

关于使用游标API批量获取记录的代码范例请参考“批量获取记录的JavaScript 代码编写范例  - 使用offset的方法”。

功能新增理由

预定于2020年7月的定期维护时对批量获取记录 API (records.json)的参数offset设置上限为1万条记录。
因为offset被设置了上限,因此如果之前使用offset的方法来批量获取数据,而且获取的数据可能超过1万条,请换成以下的方法来获取记录 。

  • 允许按照记录 ID来排序时:使用记录ID批量获取记录

  • 需要按记录ID 以外的排序方式排序时:使用游标API批量获取记录(本文要介绍的内容)

在文章后半部分中也会介绍到,用游标API的方法与用offset的方法比,即使在很复杂的排序条件下响应速度也不会变慢。

所谓游标(Cursor)

是DB里的一个专门用语,是指保存DB内的位置信息的数据。
可以在DB上创建游标,根据创建的游标的位置信息获取记录。

本次kintone中新增的游标相关的API有以下3个。

创建游标
从创建的游标中获取记录
删除游标

使用这些API获取记录的一连串处理的流程如下。

1.使用创建游标的API创建游标

0015f3a0b8cf1a7297116bcb9646a37

2.使用从游标获取记录的API获取记录

0015f3a0c1071ef3dd087db707bafcf

3.重复步骤2,直到检索对象的记录全部获取完。

0015f3a0c6f9780c947e392e6930399

和使用offset批量获取的比较

在API的请求参数里更改排序条件和记录的获取条数,测试在各种各样的条件下获取数据所花费的时间,对offset和游标API进行比较。
下面是在各条件下,从创建游标到获取到目标记录的累计时间的图表。

条件①

  • 10万条记录

  • 按$id排序

图表

0015f3a0cd262e9bd6fb405aa011600

条件②

  • 10万条记录

  • 按单行文本框排序

图表

0015f3a0cd83c75a82da072fc3e1d38

条件③

  • 50万条记录

  • 按$id排序

图表

0015f3a0d0d33d56d371a3a5bea8d22

条件④

  • 50万条记录

  • 按单行文本框排序

图表

0015f3a0d24333d38edf0f73180c935

从图表中我们可以一目了然地看出,使用游标进行批量获取数据的方法,可以更加稳定更加快地获取数据。
反之,使用offset的方法,其获取时间受到排序方法和获取记录数量的影响,比较不稳定。

总结

Get Records的参数offset因为有上限值的限制,如果您的程序里使用了offset的方法来批量获取数据,建议您换成用更加高效的游标来批量获取。

主要限制事项

  • 1个子域名最多只能同时创建10个游标。

  • 需在5分钟内创建游标,超过这个时间作为超时处理。

  • 游标的有效期限为从创建游标开始、或从使用从游标获取数据的API进行最后一次请求的时间开始的10分钟。

关于其他限制事项请参考文档

此Tips在2019年7月版的kintone中确认过。