我们公司开发了一款企业博客软件,采用mongodb这种存储海量数据的数据库。简单介绍一下软件的需求,方便后面讨论数据库设计,用户登录后,只能浏览别人发送的微博,只有他加入企业后,才可以代表企业发微博,同时被企业认证过的人或是企业员工可以在系统内转发微博。
数据库设计的时候,只有三个角色,就是人,公司,新闻,因此一开始设计的时候,就只有user,com,news三个表,加上日志表,新闻举报表等附属表。为了加快查询速度,采用redis保存了部分数据副本。
在开发中发现mongodb的多层嵌套不能太深,最好是两层,最多三层,否则增删改查数据不方便。这里的两层指的是一份文档下有一个列表,三层指的是这个列表的元素中,仍然有列表。
写新闻相关模块的时候,发现新闻列表的查询非常耗时间,就是因为每条新闻的查询都需要查询5~6个权限,而这些权限的查询都是要单独请求的,这种新闻和人之间的关系一方面实时性比较高,两次访问的权限可能都不一样。另一方面谁都可以浏览任何新闻啊,我不能每建一条新闻,就把所有人和新闻的关系全部都保存下来吧,一个人不可能把大多数的新