笔者目前就职的是一家创业型的互联网公司,既然算是互联网公司,那么就会设计到无论是应用系统还是数据库的分布式。下面简单介绍下有关数据库方面的一些设计。
数据库表的设计,根据自己的业务所需可以拆分成多库。有订单库、产品库、账户库、底层支付库等等,这也就是传说中的垂直分库。那么数据库架构和数据库优化有哪些解决思路:
1.垂直分表。垂直分表也就是“一张表拆分成多张表”,比如订单表里面,有不同类型的订单,拿普通订单和一元夺宝订单来说,一元夺宝订单会有抽奖码中奖吗等等,这些是一元夺宝订单独有的,就可以单独拿出来建一张表。这种库表设计大家基本都接触过
2.垂直分库。垂直分库在上面已经提过,就是根据自己公司的业务需求、业务模块,一个的业务模块建一个对应的数据库,而不是所有业务模块公用一个数据库。在高并发场景下,垂直分库一定程度上能够突破IO、连接数及单机硬件资源的瓶颈,是大型分布式系统中优化数据库架构的重要手段。
3.水平分表。水平分表感觉意义不大,就是在一个数据库中把一张表重复建多次,数据可以按主键、IP什么的进行Hash和取模后拆分分别插入多个表中,这在一定程度上提高了查询效率,但是从库级别来看,依然会有瓶颈。
4.水平分库。单纯的水平分库意义不大,一版设计水平分库,会同时跟分表结合起来,见5。
5.水平分库分表。水平分库就是相同数据库部署多台,同时把水平分表的思想加上,就是同一张表里的记录取模后分别存在不同的数据库里。在高并发和海量数据的场景下,分库分表能够有效缓解单机和单库的性能瓶颈和压力,突破IO、连接数、硬件资源的瓶颈。
还有其他各种方式的分库分表组合,可以根据自己的业务处理情况可以选择合适的。我们目前只是用到了垂直分库以及读写分离然后提高数据库访问效率。
ps:看到有关数据库分库分表的文章,然后自己结合目前项目也记录下来了。可能含金量不高,但至少为想提高数据库性能的童鞋指明一个方向。