目前用 mysql
有如下俩张表:
| id | parend_id | is_black | 昵称等其他字段 | 
|---|---|---|---|
| 1 | 0 | 0 | |
| 2 | 1 | 0 | |
| 3 | 2 | 0 | |
| 4 | 2 | 0 | 
| id | uid | 所有上级 | 所有下级 | 
|---|---|---|---|
| 1 | 1 | 2,3,4 | |
| 2 | 2 | 1 | 3,4 | 
| 3 | 3 | 1,2 | |
| 4 | 4 | 1,2 | 
需求如下:
基于某一用户,检索他的下级, 例如 基于 id 2 下, 检索昵称为 cnbattle 的用户
拉黑某用户,拉黑后,删除并清空该用户的关系,下级数据依次上移到该用户的上级,
假设基于上述的表: 拉黑 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: 拉黑用户:是队列处理,当处理一个关系靠顶部的用户时,处理数据量会比较大(这个还好,队列慢慢处理也行)
基于上述情况,如果优化可以基本满足在简单加机器的情况下,让程序稳定运行的方案方法?
|  |      1mlhadoop      2021-01-06 09:51:12 +08:00  2 所以是 zhuan 销集团么 | 
|  |      2IMCA1024      2021-01-06 09:54:00 +08:00 Q1: 可以定时任务 每隔一小段时间跑一份数据处理, 但有一定延时,单表查询速度比较快, 也可以继续用你的这种 in 查询 几千几万 ,应该还好的啊, 控制 in 的数量应该问题不大,分段也可以。 也想看看其他方法,学习学习 | 
|      3wangxiaoaer      2021-01-06 10:21:34 +08:00 | 
|      4blueorange      2021-01-06 10:26:37 +08:00 @mlhadoop 非常像 | 
|  |      5oott123      2021-01-06 10:27:05 +08:00 via Android Materialized Path 行不行 | 
|  |      6UserNameisNull      2021-01-06 11:49:54 +08:00 图数据库呢? | 
|      7wudaye      2021-01-06 12:58:19 +08:00 via Android  1 可以拉黑,看来不是企业组织 | 
|  |      8cnbattle OP | 
|  |      9cnbattle OP @oott123 存储方式有的, 关系链 有个所有上级字段,存的就是类似 Materialized Path 的结构数据,目前是想找个好的方式来做查询,及更新操作 | 
|  |      10cnbattle OP @wangxiaoaer 谢谢,大概看了下,感觉不错,不过之前没用过 postgresql,周末模拟点数据试试 | 
|  |      11dswyzx      2021-01-06 14:38:09 +08:00 法律规定,分销层级超过三级即可判定为传销.所以说如果是合法的也就最多嵌套三层层级.直接写死层级也没多复杂吧 | 
|  |      12cnbattle OP @UserNameisNull 没了解过,我先看看 0.0 | 
|  |      13cnbattle OP @dswyzx 不是讨论是否发杂的问题,而是想讨论下有没有啥更好一些的方案而已 就好比你说三级一个用户找了几百人,往下两级就几万用户了,同样会出现性能,内存可能溢出的问题,和修改操数据量大的问题,从而可能出现 mysql 锁 相关的一系列问题,只是想在可能出问题之前,做点预防性的优化 修改等 | 
|  |      14opengps      2021-01-06 15:05:43 +08:00  1 不要一看到无限级联就想到传销,现在常见的玩法是:虽然无限级联,但是消费利润最多分享给上级个上上级这三级,丝毫没有违法 | 
|  |      15atusss      2021-01-06 15:10:23 +08:00 嗷,最近才做了一个类似的需求。 表结构大致这样 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} | 
|      16JasperYanky      2021-01-06 15:15:46 +08:00  1 https://github.com/django-mptt/django-mptt   这是个树型结构管理库,我拿来做用户关系,基本都能满足,你可以看看 | 
|  |      17matrix67      2021-01-06 15:23:25 +08:00 | 
|      18coreki      2021-01-07 00:28:38 +08:00 via Android 我写过这个,多级上下级,也是几万几十万下级,这种下级全部写在一个字段里面,性能不好。 |