帖子的数量一般比用户数量多吧? 建立点赞表的时候,如果以帖子id为主键,后面会有一大串用户id,查起来又慢而且如楼上所说不支持并发 一般来说单个用户点赞的帖子数量不会太多吧? 以用户id为主键,记录点赞过的帖子,这种设计是不是好一些? 只有用户发生了点赞行为才会进入这个表,并且以一个用户的视角来看, 我登录进去,我点过赞的帖子渲染一下,而不是关心我在不在某一个帖子的点赞用户名单里 不知道楼上新浪微博是为什么要设计成帖子id为主键,后面跟用户id呢? 我也是菜鸟,所以想知道为什么哈! :)
今天刚好碰到了新浪微博的DBA,向他请教了这个问题。把点赞用户的ID都塞到一个LOB字段中,最大的问题还是不便于检索和更新。比如,一个用户打开一条微博,会显示出他有没有点过赞,这就要扫描LOB字段的内容,而字段内容是无序的,远没有索引高效;点赞之后,如果取消或者重点,需要把整个字段读出来进行修改,这无形中读写了很多不相关的内容。当然,你可以在用户表中增加一个类似字段,包含用户点过赞的所有微博的ID,这个字段的长度会相对小得多,但对于长期使用的用户,依然存在上述问题。 我也跟他提了把数据加载到内存中操作的想法。他认为,这样的方式内存开销过大,即每条被访问的微博的“赞”数据都需要完整地读到内存中。就算通过一些机制管理占用的内存,如果业务量很大的话,会造成缓存的“赞”数据频繁换入换出,即turnover,性能根本无法保障。所以,是我有点想当然了。其实,问题的症结还是在于这样存储数据的方式不便于只对“部分”进行操作。 按照他的说法,新浪采用的还是传统的关系表的方式。我也提了这样集中存储,是否会因为表数据过大而造成低效。他说新浪采用的是对数据库做shading,有效地将数据分散在多个节点上。因为时间仓促,也没来得及详细问他们的数据库设计和架构方案。
建议增加点赞表, 字段列表: 用户id, 主题id, 点赞时间, 状态. 0-已取消赞 1-有效赞
[quote=引用 4 楼 ap0405140 的回复:] 建议增加点赞表, 字段列表: 用户id, 主题id, 点赞时间, 状态. 0-已取消赞 1-有效赞
27,581
社区成员
68,552
社区内容
加载中
试试用AI创作助手写篇文章吧