结合上文的例子,当用户查询user这张表时假设SQL语句是select * from user where id = 1 or id = 2,当收到这条SQL以后,JProxy会将SQL拆分为select * from user where id=1 及select * from user where id = 2, 再分别把这两条sql语句发往后端的节点上,最后将两个节点上获取到的两条记录一并返回给应用。
保证性能还不够,还需要考虑控制连接数、控制系统内存等,连接数主要是控制连接的数量这个比较好理解,控制内存主要是指控制系统在使用过程中对内存的需求量,比如在做数据抽数时候,sql语句是类似select * from table这种的全量查询,此时后端所有的MySQL数据会通过多条连接并发地往中间件发送数据,从中间件到应用只有一条连接,如果不对内存进行控制就会造成中间件OOM,在具体实现的时候我们通过将数据压在TCP栈中来控制中间件前后端连接的网络流速从而很好的保证了整个系统的内存是在可控范围内。