什么是在没有范围键的DynamoDB表上实现唯一二级索引的正确方法?

时间:2014-12-30 07:03:20

标签: amazon-dynamodb

我对如何在 DynamoDB 中正确设置辅助索引感到困惑。 文档说明二级索引是针对具有哈希和范围键的表,但在我的情况下,我不需要范围键。

情景基本上是这样的。我有一个移动客户端列表,它将调用我的API。这些客户端由6个字符的唯一客户端ID标识。每个客户端也有一个唯一的设备ID,它基本上是一个很长的GUID - 很长很不方便用作主键。

问题出现的时候,客户端注册自己,它在注册请求中发送设备ID(长GUID),服务器生成唯一的clientID(六个char唯一ID),它返回给客户端以供将来通信。服务器端必须进行的检查之一是确保请求不是重复注册,即设备ID在另一个客户端ID下的表中不存在。

在SQL表中,我将clientID作为主键,并且只是在deviceID字段上定义一个唯一索引,但似乎我不能在DynamoDB中这样做,因为我只有一个表上的散列键,而不是散列和​​范围键。我可以进行查询以查明某处是否存在欺骗设备ID,但这似乎需要我想避免的表扫描。

在DynamoDB中设置类似内容的正确方法是什么?我是否只在所有行上使用像“foo”这样的虚拟范围键并使用本地二级索引?看起来似乎效率低下。

1 个答案:

答案 0 :(得分:2)

我个人不喜欢使用索引。

我建议保留两张桌子。

DEVICES
哈希:device_id
attribute:client_id

CLIENT_DEVICES
哈希:client_id
范围:device_id

这使您可以推断客户端是否有设备,哪些设备,以及如果设备连接到客户端则要求设备。

此IMO比全局/本地二级索引更具可读性。