Java实习生(三) 分表之后还要按时间查询,这种问题又蠢又垃圾!

48 阅读2分钟

0.jpg
面试官:我看你简历上面写着有分库分表的经验,你们是怎么分库分表的?

实习生:我们就是按照某一个字段进行水平拆分.

面试官:那你们怎么解决你们分表之后按照时间倒序去查询n条数据的问题?(之所以问他这个问题呢,是因为目前我也遇到这个问题想从他口里面套一点方案)

实习生:(奇怪的表情)你还有什么想要补充的吗?如果这个问题没有什么要补充的话,我就不打算面试了,这种面试又蠢又垃圾。(说完之后站起来就想走)

面试官:我说别走啊小伙子,我说是不是你没有什么方案啊?如果没有的话,我们可以聊别的嘛.(死劝活劝,把人留了下来)

实习生:这种没有场景的问题啊,我是真的不想回答。
如果已经决定了,按照某个字段去分表,就意味着不可能不按照在这个字段去查询,光想着倒序表取少量的数据,还可以从从每个表里面去查出n条数据,然后在内存里面去聚合排序数据,例如ES,Mongodb,这种分布式数据库都是这么做的。
但是啊,MySQL它不是分布式的,单机会成为它的性能瓶颈,表太多的话,你这么做性能直线下降,
而我们分表的本意,就是为了提高性能。
你要问我有没有做过这样的场景?有啊,我们做评论审核页面呢,就是按照时间倒序去排列的。
但是呢,技术往往是结合来做的,我们场景里面呢,有三套表,分别是按照用户维度,按照文章维度。
去分的表还有一套,是不分表的全量表后台审核,我们就用全量表,因为有分页的限制,
查询不会慢。审核完之后呢,再同步到另外两套表里面去,完美的解决了业务的问题,
我本来呢是想让你补充点业务场景来回答你这个问题的。
结果呢,你连我说的话都听不懂,你说你蠢不蠢,
我倒是想问问你们公司到底有多少数据啊

面试官:(尴尬)十多万吧。

实习生:十多万数据,你们分什么表,这不扯淡吗?(说完呢,就一把拽过我手里面,他的简历扬长而去)

面试官:(一个人在会议室发呆)