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

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 各位大佬,几十万用户,存在上下级关系如下需求,改用啥数据库或啥方式存储处理好些
未分類
28 12 月 2020

各位大佬,几十万用户,存在上下级关系如下需求,改用啥数据库或啥方式存储处理好些

各位大佬,几十万用户,存在上下级关系如下需求,改用啥数据库或啥方式存储处理好些

資深大佬 : cnbattle 4

目前用 mysql

有如下俩张表:

  1. 基础表:存用户数据及上级的 ID
id parend_id is_black 昵称等其他字段
1 0 0
2 1 0
3 2 0
4 2 0
  1. 关系表:某用户上级及下级所有用户的表: 存用一用户 id,上级,上级的上级直到,没有上级, 下级同理(下级数据,极少数的账号有 20 多万的下级 id,大多数几千到几万不等)
id uid 所有上级 所有下级
1 1 2,3,4
2 2 1 3,4
3 3 1,2
4 4 1,2

需求如下:

  1. 基于某一用户,检索他的下级, 例如 基于 id 2 下, 检索昵称为 cnbattle 的用户

  2. 拉黑某用户,拉黑后,删除并清空该用户的关系,下级数据依次上移到该用户的上级,

假设基于上述的表: 拉黑 id 2 的用户,那么更新为如下的数据

基础表:

id parend_id is_black 昵称等其他字段
1 0 0
2 0 1
3 1 0
4 1 0

关系表

id uid 所有上级 所有下级
1 1 3,4
2 2
3 3 1
4 4 1

问题:

Q1: 检索,目前是基于关系表 where in, 虽目前能正常运行,但性能不好,有内存溢出的风险

Q2: 拉黑用户:是队列处理,当处理一个关系靠顶部的用户时,处理数据量会比较大(这个还好,队列慢慢处理也行)

基于上述情况,如果优化可以基本满足在简单加机器的情况下,让程序稳定运行的方案方法?

大佬有話說 (21)

  • 資深大佬 : mlhadoop

    所以是 zhuan 销集团么

  • 資深大佬 : IMCA1024

    Q1: 可以定时任务 每隔一小段时间跑一份数据处理, 但有一定延时,单表查询速度比较快,
    也可以继续用你的这种 in 查询 几千几万 ,应该还好的啊, 控制 in 的数量应该问题不大,分段也可以。

    也想看看其他方法,学习学习

  • 資深大佬 : wangxiaoaer

    https://www.postgresql.org/docs/9.0/ltree.html

  • 資深大佬 : blueorange

    @mlhadoop 非常像

  • 資深大佬 : oott123

    Materialized Path 行不行

  • 資深大佬 : UserNameisNull

    图数据库呢?

  • 資深大佬 : wudaye

    可以拉黑,看来不是企业组织

  • 主 資深大佬 : cnbattle

    @mlhadoop
    @blueorange
    @wudaye

    直销系统,有兴趣的话可以了解下

  • 主 資深大佬 : cnbattle

    @oott123 存储方式有的, 关系链 有个所有上级字段,存的就是类似 Materialized Path 的结构数据,目前是想找个好的方式来做查询,及更新操作

  • 主 資深大佬 : cnbattle

    @wangxiaoaer 谢谢,大概看了下,感觉不错,不过之前没用过 postgresql,周末模拟点数据试试

  • 資深大佬 : dswyzx

    法律规定,分销层级超过三级即可判定为传销.所以说如果是合法的也就最多嵌套三层层级.直接写死层级也没多复杂吧

  • 主 資深大佬 : cnbattle

    @UserNameisNull 没了解过,我先看看 0.0

  • 主 資深大佬 : cnbattle

    @dswyzx 不是讨论是否发杂的问题,而是想讨论下有没有啥更好一些的方案而已

    就好比你说三级一个用户找了几百人,往下两级就几万用户了,同样会出现性能,内存可能溢出的问题,和修改操数据量大的问题,从而可能出现 mysql 锁 相关的一系列问题,只是想在可能出问题之前,做点预防性的优化 修改等

  • 資深大佬 : opengps

    不要一看到无限级联就想到传销,现在常见的玩法是:虽然无限级联,但是消费利润最多分享给上级个上上级这三级,丝毫没有违法

  • 資深大佬 : atusss

    嗷,最近才做了一个类似的需求。
    表结构大致这样
    user_id (用户 id ),`base_id ( 64 进制的用户 id ),`link (当前用户的完整链),

    1003854 3R5E {3QzH}{3QBh}{3R5E}
    1000072 3QA8 {3Qz2}{3Qz9}{3Qzg}{3QzT}{3QA8}
    1000996 3Qbn {3QzH}{3QEa}{3QES}{3Qbn}
    1000073 3QAz {3Qz2}{3Qz9}{3Qzg}{3QzT}{3QAz}
    1003856 3R5G {3QzH}{3QEa}{3QES}{3Qbn}{3R5G}
    1000080 3QAG {3QzH}{3QAG}
    1000375 3QET {3QzH}{3QEa}{3QET}
    1000060 3QzY {3Qz2}{3Qz9}{3Qzg}{3QzY}
    1000442 3QFW {3QzH}{3QEa}{3QET}{3QFW}

  • 資深大佬 : JasperYanky

    https://github.com/django-mptt/django-mptt 这是个树型结构管理库,我拿来做用户关系,基本都能满足,你可以看看

  • 資深大佬 : matrix67

    http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

  • 資深大佬 : coreki

    我写过这个,多级上下级,也是几万几十万下级,这种下级全部写在一个字段里面,性能不好。

  • 主 資深大佬 : cnbattle

    @matrix67 这样方式,数据量少还可以,一多就不行了

  • 主 資深大佬 : cnbattle

    @coreki 恩,所以就想问问有啥好点的方式,现在在研究图数据量,测试看看

  • 主 資深大佬 : cnbattle

    @coreki 图数据库

文章導覽

上一篇文章
下一篇文章

AD

其他操作

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

51la

4563博客

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