马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
MongoDB数据建模小案例
朋侪圈品评内容管理
需求
外交类的APP需求,一样寻常都会引入“朋侪圈” 功能,这个产物特性有一个非常紧张的 功能就是品评体系。
先整理下需求:
- 这个APP盼望点赞和品评信息都要包罗头像信息:
- 点赞列表,点赞用户的昵称,头像;
- 品评列表,品评用户的昵称,头像;
- 数据查询则相对简单:
- 根据分享ID,批量的查询出10条分享里的全部品评内容;
建模
欠好的计划
跟据上面的内容,先来一个非常非常"淳厚"的计划:
- {
- "_id": 41,
- "username": "小白",
- "uid": "100000",
- "headurl": "http://xxx.yyy.cnd.com/123456ABCDE",
- "praise_list": [
- "100010",
- "100011",
- "100012"
- ],
- "praise_ref_obj": {
- "100010": {
- "username": "小一",
- "headurl": "http://xxx.yyy.cnd.com/8087041AAA",
- "uid": "100010"
- },
- "100011": {
- "username": "mayun",
- "headurl": "http://xxx.yyy.cnd.com/8087041AAB",
- "uid": "100011"
- },
- "100012": {
- "username": "penglei",
- "headurl": "http://xxx.yyy.cnd.com/809999041AAA",
- "uid": "100012"
- }
- },
- "comment_list": [
- "100013",
- "100014"
- ],
- "comment_ref_obj": {
- "100013": {
- "username": "小二",
- "headurl": "http://xxx.yyy.cnd.com/80232041AAA",
- "uid": "100013",
- "msg": "good"
- },
- "100014": {
- "username": "小三",
- "headurl": "http://xxx.yyy.cnd.com/11117041AAB",
- "uid": "100014",
- "msg": "bad"
- }
- }
- }
复制代码可以看到,comment_ref_obj与praise_ref_obj两个字段,有非常重的关系型 数据库陈迹,推测,这个体系之前应该是放在了平常的关系型 数据库上,大概计划者被关系型 数据库的影响较深。而在MongoDB这种 文档型数据库里,实际上是没有须要如许去计划,这种建模只造成了多于的数据冗余。
别的一个标题是,url占用了非常多的信息空间,这点在压测的时间会有表现,带宽会过早的成为瓶颈。同样username信息也是云云,此类信息相对来说是全局稳固的,根本不会做厘革。而且这类信息跟随品评一起在整个APP中流转,也无法处理惩罚”用户名修改“的需求。
|