这里有两种选择:
- 嵌入:即将最喜欢的电影列入用户文档
- 拆分馆藏:为用户和电影使用两个单独的馆藏,通过ID引用它们
选择哪一个?
您应该根据应用程序的访问策略设计MongoDB集合。
一般情况下,如果符合以下条件,您应该将嵌入电影用于用户文档:
- 在检索用户信息时始终检索嵌入数据(电影)。如果您总是检索用户信息,但很少需要电影数据,那么嵌入就不会那么好。
- 嵌入数据不经常受到修改
- 基数不是太大(记住MongoDB文档的最大大小是16MB)。在这种情况下,我认为每个用户最喜欢的电影的基数可以用于嵌入它们,但如果仅作为示例,每个用户有100K电影,则您被迫分割集合
- 数据完整性可能是一个问题:将电影嵌入到用户文档中,您可以利用文档级锁定(如果您使用的是有线Tiger存储引擎)。否则,如果您在并发系统中,使用两个集合设计,您必须自己在应用程序级别处理锁定机制。