小公司总监抖音学 Java 技术被实习生怒怼 多变关联的最佳方案就是宽表存储
家人们呐,今天给你们讲一件真人真事。有个小公司的总监,在抖音上学 Java 技术,结果闹了大笑话。事情是这样的,公司来了个实习生面试,简历上写着有大厂千万级数据优化经验。
这总监一看,嘿,这不撞枪口上了嘛,因为他之前在抖音上看到个架构师的视频,说一张千万级数据的表用 mysql 的某种方式能把 200 毫秒优化到 10 毫秒,他赶紧点赞收藏了。然后他就让实习生讲讲场景和优化方式,实习生说他们场景是十张表关联查询,做了张宽表,通过跑任务形式把数据放进去,将复杂查询变成了单表查询。
这总监听完直接呸了一声,因为他记得抖音老师讲过宽表有问题,加字段会锁表,还没办法体现一对多关系。总监就说他有好办法,建个 JSON 类型字段,以 JSON 字符串形式放进去就行。这实习生听完就笑了,站起来想走,被总监拉住。实习生也没生气,说知道为啥不想回答他吗,说他这方案本质和宽表没区别,就是空间换时间,说宽表加字段锁表,JSON 也锁表,要查出来不管啥格式都得改代码发版,锁表很正常。还说他想通过 JSON 方式来加快查询效率简直大错特错,原本值存个 1 就行,但改成 JSON 后要写个“a”:“1”,空间浪费是小事,关键是数据树的高度由数据量和单条数据大小决定,2000 万数据原来 3 层现在可能 4 层 5 层,会影响查询效率。
而且最重要的是 JSON 数据类型不是用来干宽表的,这总监连应用场景都没想清楚,举个例子,在大厂干礼物系统时,礼物后置事件不同导致事件类型表有好几张且每张表字段都不同,JSON 适合这种不规则数据查询存储,但他们用的是 mongodb 存储,思想一样。这总监倒好,拿 JSON 来做宽表完全是为了技术而技术。
总监不好意思地说他 Java 技术都是抖音上学的。实习生这下忍不住了,说还抖音学 Java,咋不上其他地方学呢,说完就抢过简历摔门走了,留下这总监一个人在会议室发呆。这可真是让人哭笑不得啊!
关于宽表总结一下几点知识点:
1.宽表类型的数据不适合放在用json格式来存储,直接用原始宽表好维护。
2.JSON类型会浪费很多表空间,导致存储树的高度变高拖慢查询效率。
3.JSON适合更加不规则的字段数据,也适合不规则表关联场景