0

我有一个使用 GraphQL API 和 DynamoDB 存储数据的 iOS AWS Amplify 项目。这是一个聊天应用程序。

最初,当用户登录时,他将收到对话的所有消息。如果几天后他回到应用程序,我想更新每个对话中的任何新消息。

目前我正在使用最后一条消息的日期作为未来查询的谓词。但是我想知道自上次查询以来是否有更好或更标准的方式来查询表的更改?

我没有使用数据存储。我正在管理自己的本地存储。

let keys = Message.keys
let predicate = keys.conversationID == conversationID && keys.createdAt > lastQueryDate
Amplify.API.query(request: .paginatedList(Message.self, where: predicate, limit: 100)) { [weak self]
    DispatchQueue.main.async {
        switch event {
        case .success(let result):
            switch result {
            case .success(let messages):
                // handle data
            case .failure(let error):
                print("Got failed result with \(error.errorDescription)")
            }
        case .failure(let error):
            print("Got failed event with error \(error)")
        }
    }
}
4

1 回答 1

0

根据最后一条消息的日期进行查询是完全可以接受和标准的。

DynamoDB 本身并没有提供一种获取“新”项目(在这种情况下为消息)的方法,就像您可以使用 SQS 一样 - 没有办法“确认”一个项目。

对于分页,您可以使用标记,ExclusiveStartKey但是您已经有一个日期字段可供过滤,因此绝对没有必要这样做。

您已经通过正确建模数据来遵循最佳实践。

于 2021-10-30T10:38:41.180 回答