年关将至,工作上也没什么大的安排。空闲时间从一个PHP工程师的视点去学习一下微服务架构,究竟谁都想进步嘛,哇哈哈


笔直拆分有哪些优缺点

先看一下它的特色。每一个库表结构都是不相同的,每一个库表,它的数据至少有一列是相同的,由于它需求经过这一列来相关,比如说方才都是经过user ID来相关的。第三个便是每一个库表,它的并级,便是全量数据。长处是什么呢?由于它是依照事务拆分的,所以拆分后事务逻辑就会愈加明晰。别的,依照事务拆分之后,数据就会依照事务保存在不同的服务器上,这样数据维护就会比较简略。那么缺点是什么呢?由于它仅仅依据字段来拆分了,所以当单表数据量大时,问题仍是没有处理,由于每个表中数据仍是那么多,比如说有1000万表拆分成了若干小表,每个小表中仍是有1000万条数据。别的一个便是它受事务的影响,热门事务压力比较大,冷门的事务就会形成资源浪费,比如说用户事务比较大,那么用户的服务器压力会比较大,而别的有一个积分的事务,假如比较冷门,那么这台服务器几乎就没有什么压力,也没有什么拜访,就形成了资源的浪费。

水平拆分

再来看下水平拆分。水平分表是针对数据量巨大的单表,依照某种规矩拆分到多个表中,可是这些表仍是在一个库中。水平分库分表它都是依照某种规矩来的,把拆分的表再拆到不同的库中去。看一下规矩,先看第一个,依照范围拆分,比如0-1万的放到一个表,10001-2万的放到一个表,然后是经过哈希取模来拆分,比如说经过用户ID来取模,最简略的便是ID除以10,直接分到了10个表中。别的还有依据地理区域分的,一般做云的这种区分呢会比较多,还有依据时间拆分的,比如说将6个月前的数据拆出去放到一个表中,随着时间的流逝,这些表中的数据查询的几率很小,这个也便是冷热数据的分离。

PHP中的数据存储 MySQL分库分表 (下)
再经过上边的两张图来看一下水平拆分。左边这张图,优则表刚一开始是一个服务器,然后依据ID,0-1万放到服务器一上,10001-2万放到服务器二上,20001-3万放到服务器三上进行拆分。查询的时分,刚一开始where ID等于2的都到了服务器以上拆分完之后,查询where ID等于一的就恳求服务器一,等于ID等于2的时分经过2取模等于0的就拜访0这台服务器,这个便是水平拆分和笔直拆分对比,仍是这张表u表他是怎样拆分的呢?他并没有依据字段来拆分开,拆分成了两个表u表1和u表2,结构是相同的。拆分完之后程序几乎不必动,改动会很小,而且数据扩容难度大,比如说取模的值由2变成了10,这个时分旧数据都要全部从头再处理一遍,由于不同的取模,它落到的库是不相同的,可是方才讲的一致性哈希算法有效的处理了这个问题。

关于分库分表就讲到这儿。