zoukankan      html  css  js  c++  java
  • 一次数据库优化的对话

     

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

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

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

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

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

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

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

    我继续问他,他们的业务有多少,他说十八个。我说那就是十八个表,他说是的。 我又问他,数据最多的业务,占总数据的多少,他说大概一半。 我继续问,如果说,我说如果,你们公司很牛逼,所有业务都增长加倍, 目前最好的业务,以后的数据量,可能和现在的总数据量一样,那时候该怎么办?

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

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

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

    他问我,这方法,是从哪里看到的,我说自己想到的。他说别吹牛逼,快点告诉我。 我说我也忘了,这是我自己想到的,还是从哪里看到的。不过现在,这知识已经和我融为一体,那就是我的了。

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


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

  • 相关阅读:
    md基本语法
    CodeBlocks安装使用、汉化以及更改配色
    hexo+github搭建个人博客教程和各种坑记录
    GB/T 38637.1-2020 物联网 感知控制设备接入 第1部分:总体要求
    山东大学909数据结构与程序设计考研经验分享
    GB/T 39083-2020 快递服务支付信息交换规范
    GB/T 38829-2020 IPTV媒体交付系统技术要求 内容接入
    GB/T 37733.3-2020 传感器网络 个人健康状态远程监测 第3部分:终端技术要求
    GB/T 38801-2020 内容分发网络技术要求 互联应用场景
    GB/T 30269.809-2020 信息技术 传感器网络 第809部分:测试:基于IP的无线传感器网络网络层协议一致性测试
  • 原文地址:https://www.cnblogs.com/fengbohello/p/6036976.html
Copyright © 2011-2022 走看看