gpt4 book ai didi

java - DynamoDB 排序键的多重比较条件?

转载 作者:行者123 更新时间:2023-12-05 08:11:23 25 4
gpt4 key购买 nike

我将 AWS SDK2 DynamoDB 用于具有以下架构的应用程序:

personId    startDate    endDate     name    age  job
1 10/2/2013 10/3/2020 Bob 12 SWE
1 8/2/2013 10/3/2021 Bob 12 EE
2 10/2/2013 10/3/2021 Joe 17 Student
3 11/2/2013 10/3/2022 Kim 16 Boss

我的目标是能够通过 personIddate 查询表以检索人员对象。目前,我正在考虑在 personId 上设置一个 partition key;但是,我不确定如何设计我的 sortKey

例如,假设我想要一个personId = 1date = 10/5/2019person,我希望第一个和要返回的示例表的第二个条目,因为日期在 startDateendDate 之间。我如何设计 sortKey 以便我可以使用适当的关键条件表达式来表示 startDateendDate 之间的日期?我知道可以使用过滤器表达式,但我想知道是否有一种方法可以设计排序键,以便不需要过滤器,因为它的成本更高。

最佳答案

不,你不能。

为什么你仍然需要排序键?如果 personId 是唯一的,则不需要复合主键(散列 + 排序)。

因为你在阅读时知道 personId,你可以只使用 GetItem(table, HK=:personId)

编辑

鉴于 personId 不是唯一的附加信息...

让 startDate 成为您的排序键...

您将能够查询(table, HK=:personId, SK <= :date, ScanIndexForward=false, limit=1)

这将返回最近开始日期小于或等于您传入的日期的单个记录。

等效的 SQL 看起来像

select *
from table
where personId = :personId
and startDate <= :date
order by startDate desc
fetch first row only

EDIT2
没有看到问题中的更新信息。如果一个人可以有重叠的工作,那么您需要离开限制并进行过滤(在 DDB 中或在您的客户端应用程序中)

DDB 并非适用于所有情况,对于已布局的数据,您基本上有两种选择,为 DDB RCU 支付更多费用或为 RDB 支付更多费用。

话虽如此,我要指出 DDB RCU 最多可覆盖 4KB 的数据。

如果您的 DDB 行较小,您可以通过单个 Query() 调用返回多行,仅花费 1 个 RCU。

如果您的行大小为 512b,则可以为单个 RCU 返回 8 行。

关于java - DynamoDB 排序键的多重比较条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58440597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com