我注意到 QLDB 不支持LIMIT
或SKIP
查询实现基本分页所需的参数。
将来会支持这一点,还是有其他方法可以在 QLDB 中实现分页?
当前不支持 LIMIT/SKIP。QLDB 专为数据摄取而构建。我们建议在另一个专门构建的数据库中进行报告和分析。
让我们考虑一个具有 2 个用例的银行应用程序:
第一个非常适合 QLDB,其中索引用于读取余额,然后很少有文档被更新或创建。在OCC下,QLDB 可以轻松正确地编写这些事务,并且性能应该非常好。例如,如果一个帐户剩余 50 美元,并且两个竞争交易试图扣除 50 美元,那么只有 1 会成功(另一个将无法提交)。同时,其他交易将继续成功。除了简单和高性能之外,您还可以通过 QLDB 哈希链和证明系统获得完整性。
第二个不太合适。要计算报表,我们需要查找帐户的交易。但是,如果在我们进行查找时该帐户发生了变化(也许有人刚刚给您寄了一些钱!),会发生什么?同样,在 OCC 下,我们将使事务失败,并且语句生成将需要重试。对于一家小型银行来说,这可能很好,但我想你可以看到它的发展方向。QLDB 是专为数据摄取而构建的,您越偏离其构建目的,性能就越差。
这就引出了如何在另一个数据库中实际执行这些查询的问题。您可以使用 S3 导出或 Kinesis Data Streaming 功能来获取数据。S3 Exports 更适合批量操作(许多分析数据库更喜欢,例如 Redshift),而 Streams 更适合实时分析(例如使用 ElasticSearch)。
相反,我不建议将 Redshift 或 ElasticSearch 用于第一个用例,因为您不会获得为 OLTP 用例设计的数据库(例如 QLDB、DynamoDb、Aurora)所提供的性能、完整性或持久性。