【发布时间】:2020-07-09 16:34:09
【问题描述】:
我将order 数据保存在 dyanmodb 表中。分区键为orderId,排序键为timestamp。每个订单都有许多其他属性,例如category, userName, price, items, status`。我将构建一个过滤服务,让客户根据这些属性查询订单。另外我想为分页查询添加一个限制。但我发现 dynamodb 有一些限制。
为了支持查询不同的字段,我有两种选择:
-
为每个属性创建 GSI。它非常昂贵,但它支持查询每个属性非常性能。此解决方案不支持在过滤器中组合多个属性。
-
在
SCAN上附加过滤表达式以包含属性条件。SCAN首先表现不佳。过滤器表达式也在limits之后应用。这意味着它的响应很可能低于用户请求的限制。
那么在 dynamodb 中实现这一目标的好方法是什么?
【问题讨论】:
-
我不认为 DynamoDB 是一个很好的用例。如果您在 AWS 上,您可以使用 Elastic Search 来执行搜索和过滤部分,并将订单存储在 DynamoDB 上。使用 DynamoDB Streams,一旦您创建了一个订单,您就可以在 Elastic Search 上对其进行索引。
-
另一种方法是将文档发送到 Elasticsearch 并在那里进行各种查询。
-
我认为您的方法基本上意味着删除 dynamodb 并将所有订单保存在 Elastcisearch 中。在这里使用 dynamodb 有什么意义?
标签: amazon-web-services amazon-dynamodb