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