读写分离:简单的说是把对数据库读和写的操作分开对应不同的数据库服务器,这样能有效地减轻数据库压力,也能减轻io压力。主数据库提供写操作,从数据库提供读操作,其实在很多系统中,主要是读的操作。当主数据库进行写操作时,数据要同步到从的数据库,这样才能有效保证数据库完整性。
分库分表:
水平分区:分表
垂直分区:分库
水平分表也称为横向分表,比较容易理解,就是将表中不同的数据行按照一定规律分布到不同的数据库表中(这些表保存在同一个数据库中),这样来降低单表数据量,优化查询性能。最常见的方式就是通过主键或者时间等字段进行Hash和取模后拆分。如下图所示:
垂直分库在“微服务”盛行的今天已经非常普及了。基本的思路就是按照业务模块来划分出不同的数据库,而不是像早期一样将所有的数据表都放到同一个数据库中。如下图:
oneProxy分库分表总结:
中间件或架构层中一部分是为了解决应用之间的通信及服务治理,另一部份是为了解决数据的分布问题。相当于是将前面例子中讲的分区表里的每一个分区分别移到一台不同的硬件服务器上,而让应用的开发基本感知不到或者能少做调整就能适应这种扩展,原理非常类似于分区表,但称之为分库分表。
OneProxy将分区表的概念从数据库层抽象到SQL转发器层,然后对通信协议进行分析,可根据SQL里的表名及传入参数进行对上层应用透明的智能路由,从而达到虚拟分区表的效果,也就实现了对应用透明的分库分表的功能。
在OneProxy里同样支持按范围(Range)、按值(List)、按哈希算法(Hash)进行虚拟分库分表