我正在创建一个允许用户插入新帖子的网络。连同帖子的内容A我需要保存帖子写入的地方B.我只是想知道,如果我只保存地点B的id C,那么查询数据库寻找一个带有id C的地方B并从那里每次检索数据D(例如名称,坐标等)返回帖子A,或者最好将数据D存储在帖子A中,而不仅仅是Id C,当帖子上传时,这样我每次需要返回时都不必查询数据库张贴?
假设我可以通过他的id轻松获得一个位置,使用完全可扩展的查询,并且我希望在内存使用和CPU使用之间达到最佳平衡。
另请注意,使用地方的ID检索的数据不是少数,就像几种语言中所有地方的名称一样。这就是为什么我不确定为每个帖子存储如此多的数据,如果不是,答案就会很明显。
非常感谢
答案 0 :(得分:1)
这取决于您的查询和D的更改频率。例如,如果列表视图中没有显示任何数据D,则反规范化可能首先没有意义。如果数据D经常被修改,保持数据同步将是繁琐和昂贵的,所以再次,这表明去标准化不是你最好的选择。
如果要显示帖子列表以及有关该位置的一些详细信息,则您的加入/子查询会变得有点复杂,涉及$in
。尽管如此,这些查询相对简单且通常非常快,因为您正在点击_id
索引。在这种情况下,我可能会使用标准化版本,其中您的帖子只包含该地点的ID。