我正在尝试设置一个新的 DynamoDB 表,并且我计划第一次使用本地二级索引 (LSI)。
然而,我发现自己在努力创造它们。在使用组合散列键(存在多个属性的散列键)创建 LSI 时,我在 Amazon API 中没有找到任何参考。
这就是我的模型的样子,它表示从 UserA 发送到 UserB 的消息:
- 用户 ID
- 用户标识符
- 约会时间
- 状态 (1, 2, 3, 4, 5)
- isPriority(0 或 1)
- isNewsLetter (0 或 1)
我想做的查询如下
- 获取按日期排序的来自 UserAId 的所有消息
- 获取从 UserAId 到 UserBId 的所有消息
- 获取来自 UserAId 的具有特定状态(1 或 2)的所有消息,按 dateTime 排序
- 从 UserAId 获取具有特定状态(1 或 2)的所有消息 对于今天按 dateTime 排序
- 从 UserAId 中获取按日期时间排序的所有优先级消息
- 从 UserAId 获取具有特定状态(1 或 2)且 isNewsLetter = 1 按状态排序的所有消息
对于我选择 UserAId 的 hashKey,Range 键是 dateTIme。这应该涵盖我最需要执行的查询(查询 1),并且应该均匀地分布数据。
对于其他查询,我正在考虑以下 LSI
- 查询2:散列UserAId,范围UserBId
- 查询 3:哈希 UserAId,范围(组合)状态-日期时间。这样我可以使用 BEGINS_WITH 1 AND BEGINS_WITH 2 进行查询,按日期排序应该是自动的,然后我认为
- 查询4:同上
- 查询5:Hash UserAId,Range(组合)isPriority-dateTime。查询BEGINS_WITH 1,订单应该自动然后我想
- 查询 6:哈希 UserAId,范围(组合)状态-isNewsLetter。这样它应该根据我认为的状态排序
我的问题是:
- 是否可以在 LSI 中使用组合键?我如何定义它们?亚马逊提供的文档中对此一无所知。这就是我定义普通 LSI 的方式:
'KeySchema' => array( array('AttributeName' => 'UserAId', 'KeyType' => 'HASH'), array('AttributeName' => 'status', 'KeyType' => 'RANGE'), ),
那么我如何在那里定义以使用 status-isNesLetter 例如?
- 我对排序的假设是否正确?
提前致谢