一次数据库优化的对话

 

那天夜里的时候,我去十三哥屋里找他,他正在敲代码。平时我找他, 都是谈技术,毕竟都是程序员,除了这一点,其它的共同爱好,咱们也没有。程序员

 

不过这一次,不是谈技术。房子要到期了,我是要问他,是继续合租,仍是各寻它途。 他说要去北方,他女友在北方。这点我理解,我要去东南,我女友在东南。mongodb

 

租房的事情谈事后,他向我扬扬眉,有个好东西,说要告诉我。 我知道,他在炫耀,他想装逼,他有准备。 我想用嘲笑,压制他的炫耀,但我没有,而是故作平静的说:说说看。数据库

 

他说他们公司,遇到一个问题,一个 mongodb 的数据库,查询时间太长。 我点点头,表示让他继续。他说以前还好,数据量比较少,这段时间业务很好, 数据开始增多,查询常常超时。我皱下眉,表示一下困惑。他继续说, 索引也加了,能优化的都优化了,仍然超时。我看着他,没有表情,等着他继续。 他停顿了一下,而后问我,你以为怎么办?我说我想一想。函数

 

我不说话,看着屋顶。他笑着看着我,看着我苦苦的思索,等待着个人答案。 我低下头,没有说答案,而是问向他,他们是怎么解决的。优化

 

他说那天下午,他们老大找到他,讲了相同的事情,问了相同的问题,他也没有回答。 他的老大笑笑,说能够"分表"啊。以前的表里面,放着全部的记录,数据快到六百万时, 出现了查询超时,若是按照业务划分,能够分红十几个表,每一个业务的数据,只放到本身的表里, 每一个表的数据,都会下降不少。 他们建了新表,旧表保持原样,只在旧表增长,再也不进行查询,查询操做,都转移到了新表。 新表的字段,也由旧表的九个,变为如今的四个,这四个是必须的,多余的所有去除。 他们分表事后,效果确实很好,每次都不超时。spa

 

他看着我,表情透着知足,那是学到新知识后的表情。blog

 

我继续问他,他们的业务有多少,他说十八个。我说那就是十八个表,他说是的。 我又问他,数据最多的业务,占总数据的多少,他说大概一半。 我继续问,若是说,我说若是,大家公司很牛逼,全部业务都增加加倍, 目前最好的业务,之后的数据量,可能和如今的总数据量同样,那时候该怎么办?索引

 

他皱皱眉,说确实也是个问题。字符串

 

我问他,查询时的条件,是什么数据类型,他说三十六位的字符串,相似 MD5。 我说能够对这个字段作 HASH ,散列到多个表,好比 128 个表,若是 HASH 函数选的比较好, 结果比较随机,那么每一个表的数据,也会比较随机,表里的数据就会比较平均, 这样就能让表里的数据,下降两个数量级。并且业务改变了,也不影响表的结构。get

 

他说看起来,这样倒也行。

 

他问我,这方法,是从哪里看到的,我说本身想到的。他说别吹牛逼,快点告诉我。 我说我也忘了,这是我本身想到的,仍是从哪里看到的。不过如今,这知识已经和我融为一体,那就是个人了。

 

十三哥戏谑的看着我,说:你又开始装逼了......


同步发表:http://www.fengbohello.top/blog/p/split-table