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,范围键为financialIDFinancialID 是一个以 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 键唯一性

DynamoDB:查询中的全局二级索引利用率

如何在无服务器框架中使用全局二级索引定义 DynamoDB 表

如何通过从 CloudFormation 中删除来从 DynamoDb 中删除全局二级索引?

使用二级索引改进数据访问DynamoDB

使用全局二级索引的 DynamoDB 表查询项