数据库分表处理设计思想和实现
一、概述
分表是个目前算是比较炒的比较流行的概念,特别是在大负载的情况下,分表是一个良好
分散数据库压力的好方法。
首先要了解为什么要分表,分表的好处是什么。我们先来大概了解以下一个数据库执行
的过程:
接收到 放入 执行队列 使用分析器分解 按照分析结果进行数据
的提取或者修改 返回处理结果
当然,这个流程图不一定正确,这只是我自己主观意识上这么我认为。那么这个处理过程
当中,最容易出现问题的是什么?就是说,如果前一个 没有执行完毕的话,后面的
是不会执行的,因为为了保证数据的完整性,必须对数据表文件进行锁定,包括共享
锁和独享锁两种锁定。共享锁是在锁定的期间,其它线程也可以访问这个数据文件,但是
不允许修改操作,相应的,独享锁就是整个文件就是归一个线程所有,其它线程无法访问
这个数据文件。一般 中最快的存储引擎 ,它是基于表锁定的,就是说如
果一锁定的话,那么整个数据文件外部都无法访问,必须等前一个操作完成后,才能接收
下一个操作,那么在这个前一个操作没有执行完成,后一个操作等待在队列里无法执行的
情况叫做阻塞,一般我们通俗意义上叫做“锁表”。
锁表直接导致的后果是什么?就是大量的 无法立即执行,必须等队列前面的 全
部执行完毕才能继续执行。这个无法执行的 就会导致没有结果,或者延迟严重,影响
用户体验。
特别是对于一些使用比较频繁的表,比如 系统中的用户信息表、论坛系统中的帖子表
等等,都是访问量大很大的表,为了保证数据的快速提取返回给用户,必须使用一些处理
方式来解决这个问题,这个就是我今天要聊到的分表技术。
分表技术顾名思义,就是把若干个存储相同类型数据的表分成几个表分表存储,在提取数
据的时候,不同的用户访问不同的表,互不冲突,减少锁表的几率。比如,目前保存用户
分表有两个表,一个是 表,还有一个是 表,两个表保存了不同的用户信
息,保存了前 万的用户信息, 保存了后 万名用户的信息,现在如果
同时查询用户 和 这个两个用户,那么就是分表从不同的表提
取出来,减少锁表的可能。
我下面要讲述的两种分表方法我自己都没有实验过,不保证准确能用,只是提供一个设计
思路。下面关于分表的例子我假设是在一个贴吧系统的基础上来进行处理和构建的。(如
果没有用过贴吧的用户赶紧 一下)