数据库中间件漫谈——看看云时代,它会走向何方
1.前言 随着业务的发展,MySQL数据库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作的开销也会越来越大;另外,无论怎样升级硬件资源,单台服务器的资源(CPU、磁盘、内存、网络IO、事务数、连接数)总是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。 分表、分库和读写分离可以有效地减小单台数据库的压力。 而数据库中间件,也火了很长一段时间,基本上每个大厂都会自研一套。 本文主要针对业界主流的数据库中间件的实现、功能、成本等方面进行对比,总结数据库中间件的实现方式,并展望未来的可能发展。 实现方式 一般来说,对于数据库中间件,可以在以下六个层次做切入。 2.1 代码层 在同一个项目中创建多个数据源,采用if else的方式,直接根据条件在代码中路由。 Spring中有动态切换数据源的抽象类,具体参见AbstractRoutingDataSource。 如果项目不是很庞大,使用这种方式能够快速的进行分库。但缺点也是显而易见的,这种海量的代码侵入是绝不能被接受的。 而且当查询结果返回时,需要对跨库、聚合等查询结果进行归并,开发工作量非常巨大。 这种方式了解一下即可,一般不会去使用。 2.2 框架层 主要是修改或增强现有ORM框架的功能,在SQL中增加一些自定义原语或者hint来实现。 常见的比如实现一些拦截器(比如Mybatis的Interceptor接口)