我有一张邮件表( 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 里只存未读邮件的话大小应该是够了。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.