跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 有 1000w 个用户,有 10w 个文章,数据库如何存每个用户收藏的文章呢?
未分類
23 2 月 2021

有 1000w 个用户,有 10w 个文章,数据库如何存每个用户收藏的文章呢?

有 1000w 个用户,有 10w 个文章,数据库如何存每个用户收藏的文章呢?

資深大佬 : piqizhu8 4

数据库:PostgreSQL 10

假设有 1000w 个用户,且用户还会增长

有 10w 个文章,且文章也会不停增长,但文章增加较慢

怎么设计数据库,来存储,每个用户收藏的文章呢

我目前的方案是, 新建了一个中间表 user_article

字段有:

id // 自增 id       user_id //用户 id         article_id // 已收藏文章 id    

但是这样的话, 随着时间的推移,这个中间表 user_article 就会有 几百亿 甚至更多的记录

另外一个方案,是借助 PostgreSQL 10 的 json 字段功能,重新设计中间表 user_article

字段有 :

id // 自增 id       user_id  //存用户 id      article_json // 该用户收藏的所有文章的 id 集合,用 json array 表示  

但是这样的话,article_json 里面的 array 长度,可能会有 10w 那么大,当然实际情况中,几乎没有用户会收藏所有文章

想问问大家, 该如何设计呢, 对于实时性要求不高, 延迟个 1 秒都是可以接受的

大佬有話說 (8)

  • 資深大佬 : leonme

    1. 现实中一个用户不会收藏那么多文章 2. 即使用户太多,表太大,可以分表(甚至分库),根据 uid hash 映射一下 3. 延迟这东西直接上缓存,影响不大

  • 主 資深大佬 : piqizhu8

    @leonme

    谢谢老哥

    老哥 你的意思是, 用第一个方案 对吗

  • 資深大佬 : nl101531

    第一个方案,标准标准解决方式

  • 資深大佬 : Cyron

    方案 1

  • 資深大佬 : luckyrayyy

    方案一,上缓存。建议了解下微博的关注数据,比这个量级大多了

  • 資深大佬 : mejee

    方案一,到变化一下。表名字叫关系表,有个字段是关系类型。这种一般后来还会有点赞等关系,可以复用

  • 資深大佬 : lraining

    之前做的电商应用收藏功能也是采用方案一

  • 資深大佬 : leonme

    @piqizhu8 对,第二种不符合数据库范式设计,扩展性也差

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具