【问题标题】:DynamoDB query using DynamoDBMapper使用 DynamoDBMapper 进行 DynamoDB 查询
【发布时间】:2018-09-20 15:57:49
【问题描述】:

假设我有一个 DynamoDB 表:

UserId (hash): S
BookName (range): S
BorrowedTime: S
ReturnedTime: S

UserId 是主键(哈希),我需要将 BookName 设置为排序键(范围),因为添加到数据库中的另一个项目正在用相同的 UserId 覆盖前一个项目。

如何使用 DynamoDBMapper 创建查询,但查询的字段是时间字段(非键)?例如,如果我想归还 2 周前借阅但尚未归还的任何图书的 UserId 和 BookName?

我是否需要在 BorrowedTime 和 ReturnedTime 字段上都设置 GSI?

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb


    【解决方案1】:

    是的,您可以使用 BorrowedTime 和 ReturnedTime 制作 GSI,或者您可以使用 scan 而不是 query,如果您使用 scan,则不需要制作 gsi,但扫描操作会扫描整个数据库,因此不建议在大型数据库或经常使用。

    【讨论】:

    • 该表可能有数千个项目 - 所以查询可能是最好的。我应该在两个时间字段上设置 GSI,还是只在一个 GSI 上设置一个分区,另一个作为排序键?我不确定这个查询会是什么样子......
    • 借用时间和归还时间的数据如何保存?你应该只需要一个 GSI
    • 当前正在创建该表,所以无论哪种方式最有意义。目前它是一个 ISO 日期时间格式的字符串。如果返回时间更有意义,可以将其更改为布尔类型,但它当前是日期时间,并且仅在返回书籍时才添加字段(不确定是否在创建项目的同时添加字段,然后将ReturnTime,或者避免添加该字段,直到那里有一个值)。基本上有灵活性可以正确地做到这一点......
    • 另外,如果只有一个 GSI,那么 ReturnedTime 是排序键吗?
    • 其实我可能只需要一个GSI,然后设置ProjectionType: "ALL"?
    猜你喜欢
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多