我在dynamoDB
中有一个表,其中id为主键,全局二级索引(GSI)。 GSI的哈希密钥为p_identifier
,范围密钥为financialID
。 FinancialID
是一个以100000开头的6位数字。我需要获得financialID
的最大值,以便添加下一条记录可以使financialID
增加1。
任何人都可以帮我完成这项工作吗?还有其他替代方法吗?
答案 0 :(得分:1)
我会采用不同的方法。
根据您的要求,我假设financialID应该是唯一的。 数据库不会阻止您复制它,您应该确保应用程序的其他部分同步这些数字。所以你需要一个原子计数器。
如果必须单独使用DynamoDB,则应该为此类任务设置一个表。 一个表,其中有一个名为financial_id_counter的哈希主键,并将其原子地提高1并使用检索到的ID作为要使用的下一个财务ID。 这不是理想的,但在使用UpdateItem ADD发布更新时可以正常工作。
答案 1 :(得分:0)
首先,递增对于DynamoDB来说不是一个好主意,但以下可能是一种解决方法:
我们必须基于等于运算符进行查询,所以让我们说:
p_identifier = 101
你可以使用
scanIndexForward-false
(将根据您的范围键对数据进行降序排序)并获取该项目并增加您的密钥。
如果你不知道p_identifier
,那么你需要扫描(不推荐)并手动找到最大的密钥和增量。
答案 2 :(得分:0)
如果你需要严格的财务ID,@ Chen的方法是好的。
另一方面,如果您只需要一个唯一ID,则可以使用UUID。这里碰撞的可能性也很小。要解决此问题,您需要使用具有“存在”条件的API - 如果调用存在则调用将失败,然后您可以使用其他UUID重试。