1

我正在处理带有Transactions表的分类帐。每个条目都有一个transaction_idaccount_idtimestamp其他元数据。我需要使用 between 运算符查询给定的所有事务account_idtimestamp

我计划的方法是在和account_id上建立一个索引。但是,我注意到AWS 文档中对不等式和索引的限制,我计划将其应用于transaction_idtimestamptimestamp

只有使用相等谓词时,查询性能才会提高;例如,字段名称 = 123456789。

QLDB 目前不支持查询谓词中的不等式。这意味着没有实施范围过滤扫描。

...

警告

QLDB 需要索引来有效地查找文档。WHERE 谓词子句中没有索引字段,QLDB 在读取文档时需要进行表扫描。这可能会导致更多的查询延迟,也可能导致更多的并发冲突。

交易会随着时间的推移无限生成和增长,我需要能够一次查询一周的交易。

当前查询:

SELECT * 
FROM Transactions 
WHERE "account_id" = 'test_account' and "timestamp" BETWEEN `2020-07-05T00:00Z` AND `2020-07-12T00:00Z`

我知道可以将数据流式传输到更适合此查询的数据库,例如 dynamodb,但我想知道我对执行上述查询的性能问题是否有效,如果是,推荐的索引是什么?查询以确保此扩展并且不会导致对给定的所有事务进行扫描account_id

4

1 回答 1

0

感谢您的问题(写得很好,研究得很好)!

在撰写本文时,QLDB 不支持范围索引。所以,简短的回答是“你不能”。

我很想知道您的查询背后的意图是什么。例如,获取两个日期之间的交易列表是您需要做的事情以形成新的交易,还是您需要用于报告目的(例如显示用户声明)。

到目前为止,我遇到的几乎每个用例都是后者(报告),并且通过将数据复制到 ElasticSearch 或 Redshift 之类的东西来提供更好的服务。通常,这可以通过 Lambda 函数中的几行代码来完成,而且成本极低。

于 2020-07-10T16:24:19.030 回答