当前位置: 首页 > 知识库问答 >
问题:

在DynamoDB中的GSI上使用时间戳作为哈希键是一个好方法吗

姬凡
2023-03-14

我有一个大的(2B+记录)DynamoDB表。我希望通过在创建或更新项时添加一个新字段'index_due_at'来实现分布式锁定过程。在create/update之后,我将对该项做一些进一步的处理,然后删除'index_due_at'字段。

我想创建一个清扫作业,它将周期性地提取具有未完成的'index_due_at'字段的任何记录(假设上面的过程失败了),以便对这些记录进行进一步的处理。我预计在任何时候,这个州最多会有100张记录,更有可能是10张。

似乎使用时间戳(以毫米波为单位)作为GSI哈希密钥应该提供一个良好的分布。我不需要查询这个字段的值,只需要查询它的存在性。有人能指出这种方法的任何缺点吗?如果有,建议一种替代方案?

我可以预料到的问题包括:*毫米波级别的时间戳的非唯一性。*数值可能存在哈希键问题?*可能的哈希键问题与数值没有太大变化在最有效的数字。

共有1个答案

吕飞翼
2023-03-14

这并不像你想的那样是个问题。GSI哈希键实际上不一定是唯一的,所以你在上面比在前面更好。

您可能已经知道这一点,但您的GSI将只包含带有GSI键的项目,所以您的GSI应该相当小(100个项目)。

我的一个想法是,index_due_at实际上可能更适合作为GSI排序键而不是哈希键。数据在分区内按排序键排序。因此,可以使用index_due_at_flag的GSI哈希键,如果存在的话,则使用y,然后使用index_due_at的排序键。这意味着您的所有数据将自然排序,因此您可以按照日期顺序处理它。

祝你好运。我回答是因为我喜欢你的简历!希望呆在桶形的右边是可行的:)

 类似资料:
  • 正如这个问题中所述,我假设您不能把更新日期之类的东西作为表的排序键,因为如果您更新,您将创建一个重复的记录。 此外,我总是假设同样的事情也适用于使用更新日期的GSI。但在我的场景中,我将更新日期作为GSI上的排序键,并且在更新原始项时不会创建新记录。 综上所述,属性和关键模式包括: 属性: Id MySortKey MyComputerdField 更新日期 表格: 分区键:Id 排序键:MySo

  • 我必须经常在那里做两件事:1。给定一个category#域,获取所有匹配项。2.给定grouptype#groupname,获取所有匹配项。 这两种操作都相当频繁,所以我不想使用扫描。在DynamoDB中有没有一种有效的方法可以做到这一点?是否有更好的方法来设计模式(更多的表、辅助索引等)?任何建议都是有帮助的。有人建议使用全局辅助索引,但我的问题是,我能否将主表的范围键作为GSI的哈希键?我知道

  • 问题内容: 有没有一种方法可以使用Amazon的Java AWS开发工具包中的单个查询来查询多个哈希键? 这是我的问题;我有一个用于项目状态的数据库表。哈希键是项目的状态(即:新建,已分配,正在处理或已完成)。范围键是一组项目ID。当前,我有一个查询设置,可以简单地找到所有列为“已分配”状态(哈希)的项目,而另一个查询集可以查找“处理中”状态。有没有一种方法可以使用单个查询而不是针对我需要找到的每

  • 假设我在DynamoDB中有一个表,如果我的GSI的键基于一个属性,但是我删除或更改了该属性,那么GSI表的行为是什么?它会删除并更改GSI表中的键吗? TableName:哺乳动物表格分区键:哺乳动物名称属性1:哺乳动物数量腿属性1:哺乳动物大小 GSI名称哺乳类动物数legssi分区键:哺乳类动物数legs排序键:哺乳类大小 现在假设我有类似于哺乳动物表的数据: 哺乳动物名称:人,哺乳动物腿数

  • 我需要一个尽可能有效的哈希函数,对于一个使用探测(开放寻址)进行冲突解决的哈希表(实际上是一个哈希集)。表中存储的条目都是4字节的INT,在该范围内具有随机值。 我正在考虑一些比djb2更快的东西,比如 然后用我的水桶尺寸再修改一次。我想这个素数一定比我的桶大小要大,这意味着我对我的表要增长多大也有某种理智上的限制(它可能永远不会超过256个条目)。 我不需要哈希函数的任何密码学方面--只要它不是

  • 我正在使用AWS控制台和NodeJS。 我有一个带有分区键(user\u id)和排序键(company\u id)以及其他属性的dynamodb用户表。 我的一个属性是用户的电子邮件。电子邮件是唯一属性。 我需要通过电子邮件user_id,但我没有他的user_id和company_id。 我认为我应该使用全球二级指数。 我点击了用户表,打开索引选项卡并为该表创建了GSI。(名称:电子邮件,类型