如何使用 CloudKit 和 Swift 保存 1000 条记录而不超过 30 或 40 requests/second

How do I implement saving 1000s of records using CloudKit and Swift without exceeding 30 or 40 requests/second

让我描述一下我试图实现的基本流程:

  1. 用户登录
  2. 系统使用对第 3 方的 HTTP 请求检索用户的连接列表 API(可能是 1000 多个)。我将此列表称为 userConnections
  3. 系统从我的应用程序的数据库中检索存储的连接(可能在 100,000 中)。我将此列表称为 connections
  4. 系统然后检查每个 userConnection 是否已经存在于 connections 列表中,如果不存在,则保存它到数据库:

    for userConnection in userConnections {
        if connections.contains(userConnection) {
        //do nothing
        } else {
         saveRecord(userConnection)
        }
      }
    

问题在于,当第一批用户登录时,应用程序将尝试在一秒钟内调用 1000 次保存记录,CloudKit 服务器不允许。

我如何使用 CloudKit 和 Swift 以不同的方式实现它,以便将它保持在可接受的 requests/second 数量,比如 ~30 或 40?

对于任何想知道的人,这就是我最终这样做的方式。 TroyT 的评论是正确的,您可以批量保存您的记录。此答案包括排队批次的奖励:

        let save1 = CKModifyRecordsOperation(recordsToSave: list1, recordIDsToDelete: nil)
        let save2 = CKModifyRecordsOperation(recordsToSave: list2, recordIDsToDelete: nil)

        save1.database = publicDB
        save2.database = publicDB

        save2.addDependency(save1)
        let queue = NSOperationQueue()
        queue.addOperations([save1, save2], waitUntilFinished: false)

        save1.modifyRecordsCompletionBlock = { savedRecords, deletedRecordsIDs, error  in
            if (error != nil){
                //handle error
            }else{
                //data saved
            }

        }