00:01
前面我们讲到了读写分离,读写分离是可以解决海量用户并发访问的问题的,因为它将读操作和写操作分散到了不同的数据库的服务器当中,可以说是通过分散读和写的压力,从而分散了单台数据库的访问压力。但是呢,读写分离有它的问题,那么我们通过读写分离是没有办法分散数据库的存储压力的,为了满足海量的数据存储的问题呢,我们还需要将存储的数据分散到多台数据库服务器上,那么这个概念呢,其实就叫做数据分片。数据分片呢,实际上就是在关系型数据库当中,对数据库呢进行分库和分表的操作,也就是说把数据库和数据库的表给它拆分开来设计,那么具体的拆分方式呢,又分为垂直分片以及水平分片,我们先来看一下垂直分片。
01:02
那么垂直分片呢,也称为纵向拆分,它的核心理念呢,是专库专用,在拆分之前呢,一个数据库是由多张表构成的,比如说这是一个商城的系统的数据库,那在这个商城系统数据库当中呢,由用户相关的表,由商品相关的表,还有订单相关的表,每个表呢,其实它都对应着不同的业务,这里面呢,我们用户相关的表可能会有很多表,比如说有啊用户基本信息表,比如说有用户账户信息表,比如说有用户登录日志表,这是我们用户相关的表,商品也是一样的,比如说商品表当中,我们有商品类别表啊,有具体的商品表等等等等,还有订单数据,订单数据当中,比如说有订单表,然后呢有支付记录表,这些表呢,和订单的关系比较密切,那我们都管它叫订单数据。
02:00
所以在拆分之前呢,所有的这些表呢,都是放在一个数据库当中的,那么拆分之后呢,我们可以将不同类别的表呢,分散到不同的数据库当中,比如说在这个数据库集群当中呢,我们就将上面的单一的数据库呢。设计成了三个数据库,那么第一个数据库呢,是专门存储和用户数据相关的表,那么第二个数据库呢,是专门存储和商品数据相关的表,那最后一个数据库呢,它专门用来存储和订单数据相关的表,那这个呢,就是我们垂直分片的一个最典型的例子了。好,下面呢,是根据我们实际的业务需要,我们将用户表和订单表进行垂直分片到不同的数据库的一个具体的一个解决方案啊,那为了简单起见呢,我们在我们的数据库当中呢,只设计了两张表,一个是t user表,还有一个呢是t order表,表很明显就是用户数据了,T order表呢,它存储的就是订单数据,这是我们没有进行分库,也就是说没有进行垂直分片的情况下,数据库当中的一个场景,那如果进行了垂直分片的话,那么我们可以把user和这两个表呢,分别放在不同的数据库服务器当中,所以呢。
03:29
第一台数据库服务器当中呢,它就只有t user,第二台数据库服务器当中呢,它就只有T。那么当我们啊想要查询用户数据的时候呢,就向第一个数据库发送请求,当我们想要查询订单数据的时候呢,就向第二个数据库发送请求。那你会发现呢,这样进行拆分了之后呢,其实我们是可以缓解数据量和访问量带来的问题的,但是呢,这种方式其实没有办法根治我们海量数据的问题。
04:05
因为海量数据,它有可能是单表记录过大,单表记录过多,比如说订单表的记录比较多啊,它单表数据超过了1000万条,或者是呢,它单表数据超过了2GB,那这个时候呢,我们应该怎么处理呢?接下来呢,我们来讲一讲这个问题。
我来说两句