Database design 由局部二级索引组成的Dynamo

Database design 由局部二级索引组成的Dynamo,database-design,nosql,amazon-dynamodb,Database Design,Nosql,Amazon Dynamodb,我正在尝试建立一个新的DynamoDB表,并计划第一次使用本地二级索引(LSI) 然而,我发现自己正在努力创造它们。在AmazonAPI中,我没有找到使用组合哈希键(存在于多个属性中的哈希键)创建LSI的任何参考 这就是我的模型的样子,它表示从UserA发送到UserB的消息: 用户辅助 用户出价 日期时间 状态(1,2,3,4,5) i优先级(0或1) ISN时事通讯(0或1) 我想做的查询如下 从UserAId获取按日期排序的所有消息 获取从UserAId到UserBId的所有消息 从U

我正在尝试建立一个新的DynamoDB表,并计划第一次使用本地二级索引(LSI)

然而,我发现自己正在努力创造它们。在AmazonAPI中,我没有找到使用组合哈希键(存在于多个属性中的哈希键)创建LSI的任何参考

这就是我的模型的样子,它表示从UserA发送到UserB的消息:

  • 用户辅助
  • 用户出价
  • 日期时间
  • 状态(1,2,3,4,5)
  • i优先级(0或1)
  • ISN时事通讯(0或1)
我想做的查询如下

  • 从UserAId获取按日期排序的所有消息
  • 获取从UserAId到UserBId的所有消息
  • 从UserAId获取按日期时间排序的具有特定状态(1或2)的所有消息
  • 按dateTime从UserAId获取当前特定状态(1或2)的所有消息
  • 从UserAId获取按日期时间排序的所有优先级消息
  • 从UserAId获取具有特定状态(1或2)且isNewsLetter=1按状态排序的所有消息
  • 对于我选择的UserAId的hashKey,范围键是dateTIme。这应该包括我需要执行最多的查询(查询1),并且应该均匀地分布数据

    对于其他查询,我考虑了以下LSI

    • 查询2:哈希UserAId,范围UserBId
    • 查询3:散列UserAId,范围(组合)状态dateTime。这样我可以用1和2来查询,按日期排序应该是自动的
    • 问题4:同上
    • 查询5:Hash UserAId,范围(组合)isPriority dateTime。查询以1开始,我认为订单应该自动进行
    • 查询6:Hash UserAId,范围(组合)状态为新闻稿。这样的话,我想它应该根据状态来订购
    我的问题是:

    • 是否可以在LSI中使用组合键?我如何定义它们?亚马逊提供的文档中没有这方面的内容。这就是我定义常规LSI的方式:
    那么,我如何定义在那里使用status isNesLetter呢

    • 我对排序的假设是真的吗

    提前感谢

    在做了一些研究和测试之后,我现在可以回答我自己的问题了

    问题1) 不,不能在keyschema中定义组合范围键。但是,您可以在模型类中创建单独的属性来表示相同的内容

    例如: 对于查询3,您需要向模型添加一个新属性,并自己合并属性status和dateTime


    问题2)是的。您也可以使用ScanIndexForward将顺序更改为DESC/ASC

    在做了一些研究和测试之后,我现在可以回答自己的问题了

    问题1) 不,不能在keyschema中定义组合范围键。但是,您可以在模型类中创建单独的属性来表示相同的内容

    例如: 对于查询3,您需要向模型添加一个新属性,并自己合并属性status和dateTime

    问题2)是的。也可以使用ScanIndexForward将顺序更改为DESC/ASC

    'KeySchema' => array(
      array('AttributeName' => 'UserAId', 'KeyType' => 'HASH'),
      array('AttributeName' => 'status',  'KeyType' => 'RANGE'),
    ),