繁体   English   中英

DynamoDB 聊天应用的单表设计,检查方向是否正确

[英]Single table design of a chat app on DynamoDB, checking if on the right direction

我是 NoSQL 的新手,特别是 DynamoDB 单表设计。 在 inte.net 上浏览了很多关于单表设计的视频和文章,最后我为我计划在未来构建的聊天应用程序整理了一个小设计。

到目前为止,我考虑过的访问模式是 -

  1. 通过用户 ID 获取用户详细信息。
  2. 获取用户参与的对话列表。
  3. 获取用户创建的消息列表
  4. 获取对话的所有成员
  5. 获取对话的所有消息

还想按日期范围访问对话消息,到目前为止我还没有想出那个。

按照下面的设计,如果我要提取对话的所有消息,是否会提取消息分区中消息属性中的实际消息?

这是我用一些示例数据创建的 model 的片段。 如果我的方向正确,请告诉我。

单表设计 - 表布局

按照下面的设计,如果我要提取对话的所有消息,是否会提取消息分区中消息属性中的实际消息?

不,它只会返回消息的 ID,因为实际内容位于单独的分区中。

我建议使用不同的 model - 它由一个带有全球二级索引 (GSI1) 的表组成。 布局是这样的:

基表:

  • 分区键:PK
  • 排序键:SK

全球二级指数 GSI1:

  • 分区键:GSI1PK
  • 排序键:GSI1SK

基表

基表

GSI 1

GSI1

访问模式

1.) 通过用户 ID 获取用户详细信息。

分区键 = PK = U#<id>和排序键SK = USER的基表上的 GetItem

2.) 获取用户参与的对话列表。

使用分区键 = PK = U#<id>和排序键SK = starts_with(CONV#)查询基表

3.) 获取用户创建的消息列表

使用分区键GSI1PK = U#<id>查询 GSI1

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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