QLDB 中的分页

Alk*_*lko 5 amazon-qldb partiql

我注意到 QLDB 不支持LIMITSKIP查询实现基本分页所需的参数。

将来是否会支持此功能,或者是否有其他方法可以在 QLDB 中实现分页?

Mar*_*arc 6

当前不支持限制/跳过。QLDB 专为数据摄取而构建。我们建议在另一个专门构建的数据库中进行报告和分析。

让我们考虑一个具有 2 个用例的银行应用程序:

  1. 在账户之间转移资金
  2. 提供月结单

第一个非常适合 QLDB,其中使用索引读取余额,然后更新或创建很少的文档。在OCC 下,QLDB 可以轻松正确地编写这些事务,并且性能应该非常好。例如,如果一个账户剩余 50 美元,并且两个相互竞争的交易试图扣除 50 美元,那么只有 1 个会成功(另一个将失败)。同时,其他交易将继续成功。除了简单和高性能之外,您还可以通过 QLDB 哈希链和证明系统获得完整性。

第二个不太合适。要计算报表,我们需要查找帐户的交易。但是,如果在我们进行查找时该帐户发生变化(也许有人刚刚向您发送了一些钱!),会发生什么情况?同样,在 OCC 下,我们将使事务失败并且语句生成将需要重试。对于一家小银行来说,这可能没问题,但我认为你可以看到这是怎么回事。QLDB 专为数据摄取而构建,您偏离它的构建目的越远,性能就越差。

这就引出了如何在另一个数据库中实际执行这些查询的问题。您可以使用 S3 导出或 Kinesis Data Streaming 功能来获取数据。S3 导出更适合批量操作(许多分析数据库更喜欢,例如 Redshift),而流更适合实时分析(例如使用 ElasticSearch)。

相反,我不建议在第一个用例中使用 Redshift 或 ElasticSearch,因为您将无法获得专为 OLTP 用例设计的数据库(例如 QLDB、DynamoDb、Aurora)所提供的性能、完整性或持久性。

  • 但这意味着即使对于一些简单的操作,您也始终需要除了 QLDB 之外的另一个数据库。我做了一些测试,将 100 万行插入到 QLDB 中,然后运行计数查询来查看是否所有行都已成功添加,但查询在 100 秒后失败,因为它无法计算它。如果你问我的话,那真是太可怕了。 (2认同)