根据下面的设计,如果我要提取对话的所有消息,那是否会在消息分区中的消息属性中提取实际消息?
不,它只会返回消息的 ID,因为实际内容位于单独的分区中。
我会提出一个不同的模型 - 它由一个带有全局二级索引 (GSI1) 的表组成。布局是这样的:
基表:
全球二级指数 GSI1:
基表
GSI 1
访问模式
1.) 通过用户 ID 获取用户详细信息。
PK = U#<id>
使用分区键 =和排序键的基表上的 GetItemSK = USER
2.) 获取用户参与的对话列表。
使用分区键 =PK = U#<id>
和排序键查询基表SK = starts_with(CONV#)
3.) 获取用户创建的消息列表
使用分区键查询 GSI1GSI1PK = U#<id>
4.) 获取对话的所有成员
使用分区键 =PK = CONV#<id>
和排序键查询基表SK starts_with(U#)
5.) 获取对话的所有消息
使用分区键PK = CONV#<id>
和排序键查询基表SK starts_with(MSG#)
6.)还想按日期范围访问对话的消息,到目前为止我还没有弄清楚那个。
DynamoDB 在分区中执行字节顺序排序 - 如果您在 UTC 时区根据 ISO 8601 格式化所有日期,则可以进行范围查询,例如:
使用分区键PK = CONV#<id>
和排序键查询基表SK between(MSG#2021-09-20, MSG#2021-09-30)