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

Amazon dynamodb 在没有范围键的DynamoDB表上实现唯一二级索引的正确方法是什么?,amazon-dynamodb,Amazon Dynamodb,我对如何在DynamoDB中正确设置次要索引有点困惑。 文档说明二级索引用于具有哈希和rangekey的表,但在我的例子中,我不需要range键 情况基本上是这样的。我有一个移动客户端列表,它将调用我的API。这些客户端由一个6个字符的唯一客户端ID标识。每个客户端还具有一个唯一的设备ID,基本上是一个很长的GUID——相当长,不方便用作主键 当客户机在注册请求中注册自己并发送设备ID(长GUID)时,问题就来了,服务器生成唯一的clientID(六个字符的唯一ID),并返回给客户机用于将来的通

我对如何在DynamoDB中正确设置次要索引有点困惑。 文档说明二级索引用于具有哈希和rangekey的表,但在我的例子中,我不需要range键

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

当客户机在注册请求中注册自己并发送设备ID(长GUID)时,问题就来了,服务器生成唯一的clientID(六个字符的唯一ID),并返回给客户机用于将来的通信。服务器端必须进行的检查之一是确保请求不是重复注册,即deviceID不在另一个客户端ID下的表中

在SQL表中,我将clientID作为主键,并在deviceID字段上定义唯一索引,但在DynamoDB中似乎无法做到这一点,因为我在表上只有一个哈希键,而没有哈希键和范围键。我可以做一个查询,看看是否有一个dupe设备ID的地方,但这似乎需要一个表扫描,我想避免


在DynamoDB中设置这样的东西的正确方法是什么?我是否只是在所有行上使用伪范围键(如“foo”)并使用本地二级索引?不知怎么的,似乎效率很低。

我个人不喜欢使用索引

我建议保留两张桌子

设备
散列:设备\u id
属性:客户端id

客户端设备
散列:客户端id
范围:设备\u id

这允许您推断客户机是否有设备,哪些设备,以及如果设备连接到客户机,则询问设备


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

感谢您的校对。