Amazon dynamodb 按非分区字段的DynamoDB查询

Amazon dynamodb 按非分区字段的DynamoDB查询,amazon-dynamodb,Amazon Dynamodb,给定的DynamoDB表类似于: sessionId: String deviceType: String (mobile/tablet/computer/...) networkType: String (wifi/ethernet/3g/4g/...) 可能还有其他领域。 我需要能够在给定其他参数的情况下查找会话id。SQLish: 选择deviceType=Mobile的sessionId 选择sessionId,其中wifi中的networkType、ethernet和deviceTy

给定的DynamoDB表类似于:

sessionId: String
deviceType: String (mobile/tablet/computer/...)
networkType: String (wifi/ethernet/3g/4g/...)
可能还有其他领域。 我需要能够在给定其他参数的情况下查找会话id。SQLish:

选择deviceType=Mobile的sessionId 选择sessionId,其中wifi中的networkType、ethernet和deviceType=平板电脑 但据我所知,DynamoDB中的查询总是需要分区键sessionId


此表是否有其他布局,以便更好地查询?我们仍处于设置阶段,因此可以对其进行更改。

为了提高效率和成本效益,我建议您创建两个全局二级索引GSI。PK将是deviceType和networkType。对于SK,我没有足够的信息来提出建议。因此,不需要投影所有属性,因为您只需要检索defaut投影的sessionId,因为它是PK

总结一下数据模型:

         PK              Attributes
Table:   sessionId       deviceType, networkType, ...
GSI_1:   deviceType      sessionId, networkType, ...
GSI_2:   networkType     sessionId, deviceType, ...
例如,在查询GSI_1时,您将使用PK=Mobile来检索所有相关的sessionId

与扫描相反,这种方法速度快,成本低。

您可以阅读有关扫描方法的内容。但是,最佳实践是查询一个键。只需计划表上的所有require查询,然后为查询创建GSI。