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