AWS Amplify和DynamoDB中post和postreaction的最佳方法



我正在使用AWS Amplify开发聊天功能,并且在我的graphql模式中有一个简单的Post模型:

type Post
...
{
id: ID!
channelId: ID @index(
name: "byChannel", sortKeyFields: ["createdAt"],
queryField: "listPostsByChannel"
)
customerId: ID @index(
name: "byCustomer", sortKeyFields: ["postType", "createdAt"]
)
text: String!
postTempId: String
postType: String
reactions: [PostReaction] @hasMany(fields: ["id"])
createdAt: AWSDateTime
updatedAt: AWSDateTime
}

我想实现的是有类似于其他流行的聊天应用程序-反应与表情符号附加到每个帖子,所以我已经创建了另一个表和PostReaction模型。

type PostReaction
...
{
postId: ID! @primaryKey(sortKeyFields: ["customerId", "emojiUnicode"])
customerId: String!
customerMeta: CustomerMeta
emojiUnicode: String!
createdAt: AWSDateTime
updatedAt: AWSDateTime
}

当然,每个客户可以在一个帖子中添加多个表情符号,自定义主键是为了以后处理重复的。

这里有一个缺点。即使是许多人添加的相同表情符号,表情符号也会在帖子的reactions字段中以数组形式列出。

而不是一个简单的反应数组,前端需要为每个帖子合并,最好是从AppSync查询每个Post的结果,如:

...
reactions: [{
emojiUnicode: "U+1F44D",
customerIds: ["ID1234", "ID5678"],
...
}, {...}]

我认为我可以在reactions字段中使用JSON对象,但是DynamoDB对单个项目的最大大小限制是400KB。现在这不是问题,但下次当我向Post模型添加更多属性时,当同时有许多人的许多反应时,这可能是一个问题。

是否有一个选项如何以最简单的方式实现这一点?

最好的办法是不要让你的模式过于复杂,就像Slack一样强制使用最大数量的表情符号,例如:

你可以为任何消息添加最多23个表情符号反应,但每条消息最多50个唯一的表情符号。

除此之外,你可以为每个表情符号保留一个项目

<表类> pk sk 数据 thread123 metadata 关于线程的元数据 thread123 post#001 线程中的第一条消息 thread123 post#002 线程中的第二个消息 thread123 post#003 线程中的第三条消息 thread123 文章# 003 # emoji # U + 1 f44d (user1、user2, user45) thread123 post#003#emoji#U+1F33R [user56, user8, user7, user10]

最新更新