如何实施服务配额

问题描述 投票:0回答:1

假设我有 DynamoDB 表

orders
,它存储每个客户创建的订单。该表有一列
OrderId
(主键)和一列
CustomerId
。客户可以创建/删除订单。

如果我想实施配额,比如说,每个客户只能下不超过 1000 个订单。 我如何实现这个?

一种方法是在客户尝试创建新订单之前实时查询/统计客户的所有现有订单。我担心这会显着降低 API 的性能。

另一种方法是创建一个单独的表来保存每个客户的订单总数。每次创建新订单前,读取该数字,如果未达到配额则加1,如果达到限制则返回错误。另一方面,如果订单被删除,则将此数字减少 1。

两种策略似乎都存在并发问题。当多个并发请求尝试创建新订单时如何避免竞争情况?

这项任务有什么众所周知的策略吗?预先感谢!

service amazon-dynamodb race-condition quota
1个回答
0
投票

2 个表是正常方法,但为了避免竞争条件等...您可以只使用 TransactWriteItems。这会减慢您使用 UpdateItem 以及计数器表上的条件创建新订单的速度。这是以符合 ACID 的方式完成的,确保了准确的计数。

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/transaction-apis.html

© www.soinside.com 2019 - 2024. All rights reserved.