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

2021-01-06 09:47:20 +08:00
 cnbattle

目前用 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: 拉黑用户:是队列处理,当处理一个关系靠顶部的用户时,处理数据量会比较大(这个还好,队列慢慢处理也行)


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

2368 次点击
所在节点    问与答
22 条回复
cnbattle
2021-01-07 08:32:36 +08:00
@coreki 图数据库
kanepan19
311 天前
@atusss
请问这个如何查询 某个层级的用户的所有下级

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/742061

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX