我是mongodb的新手,并且一直在研究NoSQL设计模式,但在一个场景中有点困惑。我可以通过多种方式在SQL中实现这个概念,但我不确定如何使用NoSQL实现这一点。
探索NoSQL解决方案的原因是:
1)简单地说,为了学习新的东西
情境: 假设我们有一个电影标题列表和一个用户列表。每个用户都会收到一些新电影。一旦电影呈现给用户,用户必须喜欢或不喜欢电影。一旦他们投票(喜欢或不喜欢),电影将永远不会再次呈现给该用户,从而策划他们的新电影列表。
所以只是回顾一下
1)新电影列表将始终显示以前从未向该用户显示的电影。
2)我们需要查询用户喜欢的电影列表。
在SQLServer中,这非常简单直接,我们有三个表(用户,电影,投票)与每个ID建立关系
User{
int UserId,
varchar UserName
}
Movie{
int MovieId,
varchar MovieTitle,
varchar MovieDescription
}
Vote{
int VoteId,
int UserId,
int MovieId,
bit DidUserLikeMovie
}
问题: 现在我的问题是,在NoSQL环境中,什么是正确的设计方法?
我的想法:
1)我们可以用三个表(用户,电影和投票)以相同的方式设计设置,但是每次用户请求新的movieList时都需要大量的读取,因为NoSQL没有没有联合或关系。
2)我们可以使用两个文档(用户,电影)设计设置,并将电影文档中的投票存储为:
Movies{
int MovieId,
varchar MovieTitle,
varchar MovieDescription
List<Votes> Votes {
User UserInfo {...},
bool DidUserLikeMovie,
}
}
当我们想要获得用户已经“喜欢”的电影列表时,这可能有点贵 3)我们可以将电影投票存储在用户文档中
User{
int UserId,
varchar UserName
List<Votes> Votes {
Movie MovieInfo { ... },
bool DidUserLikeMovie,
}
}
但是生成我们的新电影列表可能有点贵
4)我们可以使用所描述方法的混合,并将投票存储在电影文档和用户文档中。这将导致快速读取,但是这需要写入电影文档和用户文档,并且需要数据库增长两倍。
非常感谢任何建议,文章或其他选项!