dynamoDB 中全局二级索引范围键的最大值
Posted
技术标签:
【中文标题】dynamoDB 中全局二级索引范围键的最大值【英文标题】:Maximum value of global secondary index range key in dynamoDB 【发布时间】:2014-02-20 19:16:22 【问题描述】:我在dynamoDB
中有一个表,其中 id 作为主键和一个全局二级索引 (GSI)。 GSI 的哈希键为p_identifier
,范围键为financialID
。 FinancialID
是一个以 100000 开头的 6 位数字。我需要获取 financialID
的最大值,以便下一条要添加的记录可以使 financialID
增加 1。
谁能帮我完成这项工作?还有其他方法可以做到这一点吗?
【问题讨论】:
【参考方案1】:我会去使用不同的方法。
根据您的要求,我假设 FinancialID 应该是唯一的。 数据库不会阻止您复制它,您应该确保应用程序的其他部分同步这些数字。所以你需要一个原子计数器。
如果您必须单独使用 DynamoDB,您应该为此类任务设置一个表。 一个表,其中您有一个名为financial_id_counter 的哈希主键,并且您将其自动加1,并将检索到的id 用作下一个要使用的financialID。 这并不理想,但在使用 UpdateItem ADD 发布更新时可以工作。
【讨论】:
我认为你的方法听起来不错。我会检查这对我来说是如何工作的。感谢您的宝贵时间。【参考方案2】:如果您需要 FinancialID 严格排序,@Chen 的方法很好。
另一方面,如果您只需要一个唯一的 id,您可以使用 UUID。在这里发生碰撞的可能性也很小。为了解决这个问题,您需要使用带有“Exists”条件的 API - 如果存在,调用将失败,然后您可以使用另一个 UUID 重试。
【讨论】:
【参考方案3】:首先,增量对于 DynamoDB 来说不是一个好主意,但以下可能是一种解决方法:
我们必须基于等于运算符进行查询,所以我们说:
p_identifier = 101
你可以使用
scanIndexForward-false
(将根据您的范围键对数据进行降序排序)并获取该项目并增加您的键。
如果不知道p_identifier
,则需要扫描(不推荐),手动查找最大key和增量。
【讨论】:
我想避免表扫描,因为它会影响性能。一旦我有了金融 ID,第 1 点确实对我有帮助。感谢您的帮助。以上是关于dynamoDB 中全局二级索引范围键的最大值的主要内容,如果未能解决你的问题,请参考以下文章
如何在无服务器框架中使用全局二级索引定义 DynamoDB 表