下面是我的用例:我有一个带有哈希+范围键的Dynamo表。当我将新项放入表中时,我希望进行唯一性检查。有时我想保证哈希是唯一的(忽略范围)。其他时候,我希望允许重复的哈希值,但要保证哈希值和范围的组合是唯一的。我怎样才能做到这一点?
我试验了attribute_not_exists。它似乎可以处理第二种情况,即检查哈希+组合键。下面是一个PHP示例:
$client->putItem(array(
'TableName' => 'test',
'Item' => array(
'hash' => array('S' => 'abcdefg'),
'range' => array('S' => 'some other value'),
'whatever' => array('N' => 233)
),
'ConditionExpression' => 'attribute_not_exists(hash)'
));
知道如何处理我只想检查hash
唯一性的情况吗?
你不能。DynamoDB中的所有项都按其哈希
或哈希
+范围
进行索引(取决于表)。
到目前为止发生的事情的一种总结:
哈希
和范围
键putitem
请求,并且必须同时提供哈希
和范围
您在哈希
或范围
属性名称上使用attribute_not_exists
提供了条件表达式
attribute_not_exists
条件只是检查具有该名称的属性是否存在,而不关心值
null
有四种可能的情况:
>
如果尝试使用
hash=a,range=3
和attribute_not_exists(hash)
放置项,则putitem
将成功,因为attribute_not_exists(hash)
计算结果为true
。不存在满足attribute_not_exists(hash)
条件的键hash=a,range=3
项。
如果尝试使用
hash=a,range=3
和attribute_not_exists(range)
放置项,则putitem
将成功,因为attribute_not_exists(range)
计算结果为true
。不存在具有hash=a,range=3
键的项,该项满足attribute_not_exists(range)
的条件。
如果尝试使用
hash=a,range=1
和attribute_not_exists(hash)
放置项,则putitem
将失败,因为attribute_not_exists(hash)
计算结果为false
。存在一个具有hash=a,range=1
键的项,该项不满足attribute_not_exists(hash)
的条件。
如果尝试使用
hash=a,range=1
和attribute_not_exists(range)
放置项,则putitem
将失败,因为attribute_not_exists(range)
计算结果为false
。存在一个具有hash=a,range=1
键的项,该项不满足attribute_not_exists(range)
的条件。
这意味着会发生两件事之一:
- 数据库中存在
哈希
+范围
对。
attribute_not_exists(hash)
必须true
attribute_not_exists(range)
必须true
attribute_not_exists(hash)
必须为false
attribute_not_exists(range)
必须false
您实际上是在执行“如果不存在具有此哈希
+范围
键的项,则将该项放入”。
我必须经常在那里做两件事:1。给定一个category#域,获取所有匹配项。2.给定grouptype#groupname,获取所有匹配项。 这两种操作都相当频繁,所以我不想使用扫描。在DynamoDB中有没有一种有效的方法可以做到这一点?是否有更好的方法来设计模式(更多的表、辅助索引等)?任何建议都是有帮助的。有人建议使用全局辅助索引,但我的问题是,我能否将主表的范围键作为GSI的哈希键?我知道
我有一张dynamodb桌子。 它有主分区键IdType(String)和主排序键Id(String) 由于它是哈希范围模式,IdType不是唯一的,一个键可以多次使用。我需要找到所有唯一的ID类型。 我们如何找到它?一种可能的解决方案是使用扫描和处理所有客户端来获取所有IdType,并使用我们自己的代码找到唯一的。但扫描成本很高,每次扫描只能扫描1MB的数据,因此扫描是不可行的,因为表中的数据已
问题内容: 当大小超过maxthreshold值时,如何在哈希表或哈希表中进行重新哈希处理? 是否所有对都已复制到新的存储桶阵列中? 编辑: 重新哈希后,同一存储桶(位于链接列表中)中的元素会发生什么情况?我的意思是说,他们在重新哈希处理后会留在同一个桶中吗? 问题答案: 问题中的最大阈值称为负载系数。 建议负载系数约为0.75。负载因子定义为(m / n),其中n是哈希表的总大小,m是在需要增加
所以,我有一个带有数组的哈希,就像这样: 我想将它们合并到一个哈希数组中,组合相应的元素。 结果应该是这样的: 知道如何有效地做到这一点吗? 请注意,真实世界的使用场景可能包含数量可变的散列键。
问题内容: 在如何哈希列表?有人告诉我,我应该转换为一个元组第一,如到。 因此,第一个不能散列,而第二个可以散列。为什么*? *我并不是真正地在寻求详细的技术说明,而是在寻找一种直觉 问题答案: 主要是因为元组是不可变的。承担以下工作: 现在,当您这样做时会发生什么?您已修改字典中的键!远道而来!如果您熟悉哈希算法的工作原理,这会让您感到恐惧。另一方面,元组是绝对不变的。看起来好像是在修改元组,但
我有DynamoDB的运动流。我正在通过aws KCL sdk v1.14.0进行处理。我看到下面日志中偶尔出现错误。我还注意到,对于dynamodb租约表中的所有碎片,startingHashKey始终为1,endingHashKey为0。有什么线索吗?