简体   繁体   中英

DynamoDB Table/Index Modeling + Querying

Basic requirements:

I have a table with a bunch of attributes (20-30), but only 3 are used in querying: User, Category, and Date, and would be structured something like this...

User | Category | Date | ...
1    | Red      | 5/15
1    | Green    | 5/15
1    | Red      | 5/16
1    | Green    | 5/16
2    | Red      | 5/18
2    | Green    | 5/18

I want to be able to query this table in the following 2 ways:

  1. Most recent rows (based on Date) by User. eg, User=1 returns the 2 rows from 5/16 (3rd and 4th row)
  2. Most recent rows (based on Date) by User and Category. eg, User=1, Category=Red returns the 5/16 row only (the 3rd row).

Is the best way to model this with a HASH on User, RANGE on Date, and a GSI with HASH on User+Category and RANGE on Date? Is there anything else that might be more efficient? If that's the path of least resistance, I'd still need to know how many rows to return, which would require doing a count against distinct categories or something?

I've decided that it's going to be easier to just change the way I'm storing the documents. I'll move the category and other attributes into a sub-document so I can easily query against User+Date and I'll do any User+Category+Date querying with some client-side code against the User+Date result set.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM