分库分表
分库分表前的问题 任何问题都是太大或者太小的问题,我们这里面对的数据量太大的问题。 用户请求量太大 因为单服务器TPS,内存,IO都是有限的。 解决方法:分散请求到多个服务器上; 其实用户请求和执行一个sql查询是本质是一样的,都是请求一个资源,只是用户请求还会经过网关,路由,http服务器等。 单库太大 单个数据库处理能力有限;单库所在服务器上磁盘空间不足;单库上操作的IO瓶颈 解决方法:切分成更多更小的库 单表太大 CRUD都成问题;索引膨胀,查询超时 解决方法:切分成多个数据集更小的表。 分库分表方法 分库分表有两个维度的分法:垂直拆分,水平拆分。 垂直拆分 垂直拆分是按列拆分,例如表有:a,b,c,d,e五列,垂直拆分时a,b,c拆成一个新表,d,e拆成一个新表。 垂直拆分分为:垂直分表和垂直分库。 在实践中通常按照下面两点拆分: 按照主要数据和扩展数据拆分。 按照功能或业务拆分。例如:把表中的User数据拆成一个新表,Product拆成一个新表。 水平拆分 水平拆分分为:水平分表和水平分库。 水平分库分表切分规则 RANGE:从0到10000一个表,10001到20000一个表; HASH取模:一个商场系统,一般都是将用户,订单作为主表,然后将和它们相关的作为附表,这样不会造成跨库事务之类的问题。 取用户id,然后hash取模,分配到不同的数据库上。 地理区域