我有一张邮件表( mail ),里面的主要字段如下:
uid - 玩家 id
status - 邮件状态(分为 未读、已读)
type - 邮件类型
还有一些邮件的时间、来源什么的。
所有用户的所有邮件都存在 mail 这个表里,如果用关系型数据库来做的话,我想要查询玩家未读或者已读邮件直接
SELECT * FROM mail WHERE uid = ? AND type = ?这样就搞定了
但是现在用 dynamodb 来实现有点问题,因为 dynamodb 里面所有的查询除了 scan 全部都得带上这个表的主键做为条件,主键在这个表里就必须是唯一的。 从结构上来看,我目前的想法是把 uid 设为主键,那这样的话在 mail 这个表里每个用户就只能有一个 item,即如下结构:
用户 1001 的邮件
{
uid:1001,
mails:[] // 这个 array 里存这个玩家的所有邮件
}
用户 1002 的邮件
{
uid:1002,
mails:[] // 这个 array 里存这个玩家的所有邮件
}
不知道这样的设计是否合理?
另外 dynamodb 每个 item 有 400k 的大小限制,如果这个 mails 里只存未读邮件的话大小应该是够了。