作者:风波
来自:http://www.fengbohello.top/
那天夜里的时候,我去十三哥屋里找他,他正在敲代码。平时我找他, 都是谈技术,毕竟都是程序员,除了这一点,其它的共同爱好,我们也没有。不过这一次,不是谈技术。房子要到期了,我是要问他,是继续合租,还是各寻它途。 他说要去北方,他女朋友在北方。这点我理解,我要去东南,我女朋友在东南。租房的事情谈过后,他向我扬扬眉,有个好东西,说要告诉我。 我知道,他在炫耀,他想装逼,他有准备。 我想用嘲笑,压制他的炫耀,但我没有,而是故做平静的说:说说看。他说他们公司,遇到一个问题,一个 mongodb 的数据库,查询时间太长。 我点点头,表示让他继续。他说之前还好,数据量比较少,这段时间业务很好, 数据开始增多,查询经常超时。我皱下眉,表示一下困惑。他继续说, 索引也加了,能优化的都优化了,仍然超时。我看着他,没有表情,等着他继续。 他停顿了一下,然后问我,你觉得怎么办?我说我想想。我不说话,看着屋顶。他笑着看着我,看着我苦苦的思索,等待着我的答案。 我低下头,没有说答案,而是问向他,他们是怎么解决的。他说那天下午,他们老大找到他,讲了相同的事情,问了相同的问题,他也没有回答。 他的老大笑笑,说可以"分表"啊。之前的表里面,放着所有的记录,数据快到六百万时, 出现了查询超时,如果按照业务划分,可以分成十几个表,每个业务的数据,只放到自己的表里, 每个表的数据,都会降低很多。 他们建了新表,旧表保持原样,只在旧表增加,不再进行查询,查询操作,都转移到了新表。 新表的字段,也由旧表的九个,变为现在的四个,这四个是必须的,多余的全部去除。 他们分表过后,效果确实很好,每次都不超时。我继续问他,他们的业务有多少,他说十八个。我说那就是十八个表,他说是的。 我又问他,数据最多的业务,占总数据的多少,他说大概一半。 我继续问,如果说,我说如果,你们公司很牛逼,所有业务都增长加倍, 目前最好的业务,以后的数据量,可能和现在的总数据量一样,那时候该怎么办?我问他,查询时的条件,是什么数据类型,他说三十六位的字符串,类似 MD5。 我说可以对这个字段做 HASH ,散列到多个表,比如 128 个表,如果 HASH 函数选的比较好, 结果比较随机,那么每个表的数据,也会比较随机,表里的数据就会比较平均, 这样就能让表里的数据,降低两个数量级。而且业务改变了,也不影响表的结构。他问我,这方法,是从哪里看到的,我说自己想到的。他说别吹牛逼,快点告诉我。 我说我也忘了,这是我自己想到的,还是从哪里看到的。不过现在,这知识已经和我融为一体,那就是我的了。十三哥戏谑的看着我,说:你又开始装逼了......
原文作者:;如有侵权,请联系管理员删除。