一次数据库优化的对话

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

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

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

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

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

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

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

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

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

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

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

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

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



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

时间: 2024-09-28 17:52:55

一次数据库优化的对话的相关文章

数据库优化

本文介绍一点,关于数据库优化方面的经验总结,希望对需要的人有所帮助! 优化请掌握以下几点(高手请补充): 1.表上的字段不要太多,能独立出去的尽量独立出去,虽然表上的字段多,写代码会比较方便, 但是运行效率就差了 2.将字符串的比较变成数字型比较每个系统都会有用户管理,其中必然有 昵称,密码,邮件等的字符串类型数据比较的问题.在数 据库操作中,字符串比较的效率是相当低下的.因此遇到字符串的比较,必须将其转换为数字型 比较.  具体做法是:在数据库表中增加相应的数字字段,比如 cNickname

单机数据库优化的一些实践(mysql)

数据库优化有很多可以讲,按照支撑的数据量来分可以分为两个阶段:单机数据库和分库分表,前者一般可以支撑500W或者10G以内的数据,超过这个值则需要考虑分库分表.另外,一般大企业面试往往会从单机数据库问起,一步一步问到分库分表,中间会穿插很多数据库优化的问题.本文试图描述单机数据库优化的一些实践,数据库基于mysql,如有不合理的地方,欢迎指正. 1.表结构优化 在开始做一个应用的时候,数据库的表结构设计往往会影响应用后期的性能,特别是用户量上来了以后的性能.因此,表结构优化是一个很重要的步骤.

MySQL数据库存储引擎与数据库优化

存储引擎 (1)MySQL可以将数据以不同的技术存储在文件(内存)中,这种技术就成为存储引擎. 每种存数引擎使用不同的存储机制.索引技巧.锁定水平,最终提供广泛且不同的功能. (2)使用不同的存储引擎也可以说不同类型的表 (3)MySQL支持的存储引擎 MyISAM InnoDB Memory CSV Archive 查看数据表的创建语句: SHOW CREATE TABLE 表名 相关概念: (1).并发控制:一个人读数据,另外一个人在删除这个数据. 当多个连接对记录进行修改时保证数据的一致性

[mysql][【优化集合】mysql数据库优化集合

三个层面: 1.系统层面 2.mysql配置参数 3.sql语句优化 =========================================================== 一.系统层面 =========================================================== 二.mysql参数层面 http://www.oicto.com/mysql-explain-show/ 2.1slowlog 配置slowlog 配置文件: log-slow

数据库优化处理

数据库的优化程度影响了一个程序的执行力和用户的体验感,所以数据库的优化显得格外重要. 一.框架 根据业务需求选择合适的开发框架,不近对数据库的优化有帮助,而且对于程序后期的维护也很有帮助,根据项目的需求,看项目需要满足多少人的访问量,并发量到多少.不是说小公司就不需要分布式.大数据这些,考虑长期的问题. 将一些固定不常变化的值,设置为常量:采用缓存机制,减少对于数据库的访问(连接池):服务器的优化(队列): 二.数据库本身 1.表结构的设计 表的设计来源于需求,同时表的建立也会影响需求的实现,一

mysql优化-数据库优化、SQL优化

我有一张表w1000,里面有1000万条数据,这张表结构如下:CREATE TABLE `w1000` ( `id` varchar(36) NOT NULL, `name` varchar(10) DEFAULT NULL, `age` int(3) DEFAULT NULL, `money` double(8,2) DEFAULT NULL, `address` varchar(100) DEFAULT NULL, `create_date` datetime(3) DEFAULT NULL

数据库优化概览

数据库优化,一直是很让人头疼的事,尤其对于当前互联网发展到了一定的时期,数据量达到了一定的数量级,处理数据比较慢,这方面的知识就显得尤为重要了.这里就大概来说下数据库优化的相关知识. 先说下当前数据库大部分都还是以关系型数据库为主流,但是现在NoSQL也慢慢变得越来越重要了,毕竟现在是大数据时代,但是这里主要是讲关系型数据库. 数据优化是①找出系统瓶颈:②合理结构设计和参数调整,提高响应速度:③节省系统资源.其原则是①减少系统瓶颈:②减少资源占用:③增加系统反应速度.一般包括优化查询和优化数据库

[转]浅析大数据量高并发的数据库优化

链接:http://www.uml.org.cn/sjjm/201308264.asp 高并发数据库可以同时处理海量信息,应用范围很广.今天我们将讨论的是大数据量高并发的数据库优化,希望对大家有所帮助. 一.数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的. 在一个系统分析.设计阶段,因为数据量较小,负荷较低.我们往往只注意到功能的实现,而很难注意到性

MySQL数据库优化的八种方式(经典必看)

引言: 关于数据库优化,网上有不少资料和方法,但是不少质量参差不齐,有些总结的不够到位,内容冗杂 偶尔发现了这篇文章,总结得很经典,文章流量也很大,所以拿到自己的总结文集中,积累优质文章,提升个人能力,希望对大家今后开发中也有帮助 1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小. 例如,在定义邮政编码这个字段时,如果将其设置为CHAR(2