假设我正在运行一个论坛,每个用户都可以发表多个帖子。
所以我按以下方式构建数据库:(省略不相关的列)
PK | SK | STRING_0 |
---|---|---|
帖子,post_id | 线程,seq_num | 用户 ID |
用户,用户ID | 不相关 | 大元数据 |
一个常见的用例是呈现整个讨论线程,其中包含所有帖子。但是,每当我们渲染帖子时,我们都会渲染一些用户元数据,如上面所示
big_meta_data
(这可能包括用户的个人资料图片、用户的声誉等)
我们当然可以首先执行查询来获取所有帖子,然后对于我们看到的每个用户执行额外的查询(很可能是批处理的)。
有什么办法可以避免对用户记录进行额外的查询,或者上面的方法足够了吗?
我能想到的唯一方法是在 POST 行中保留该
big_meta_data
的副本,但这似乎很难管理并消耗额外的存储空间。
要获取用户数据,您需要执行额外的查询,考虑到延迟只有个位数毫秒,发出多个请求是很正常的。
如果您在每个帖子项目中保留用户信息,并且如果用户更改其个人资料中的属性,您将需要更改他们存储的每个帖子项目,这很复杂且不推荐。