1. 执行引擎
负责将路由和改写完成之后的真实 SQL 安全且高效发送到底层数据源执行。关注平衡数据源连接创建以及内存占用所产生的消耗,以及最大限度地合理利用并发等问题。
目标
自动化的平衡资源控制与执行效率,具体细节如下:
- 对数据库连接资源的控制保护;
- 采用更优的归并模式达到对中间件内存资源的节省;
1.1 流式归并
以结果集游标下移进行结果归并的方式,称之为流式归并。
1.2 内存归并
无法保证每个分片查询持有一个独立数据库连接时,则需要在复用该数据库连接获取下一张分表的查询结果集之前,将当前的查询结果集全数加载至内存。
1.3 内存限制模式
前提是,ShardingSphere 对一次操作所耗费的数据库连接数量不做限制。对每个查询操作都创建一个数据库连接,优先选择流式归并,以防止出现内存溢出或避免频繁垃圾回收情况。
1.4 连接限制模式
前提是,ShardingSphere 严格控制对一次操作所耗费的数据库连接数量。同库只能使用一个数据库连接,该模式始终选择内存归并。
内存限制模式适用于 OLAP 操作,可以通过放宽对数据库连接的限制提升系统吞吐量; 连接限制模式适用于 OLTP 操作,OLTP 通常带有分片键,会路由到单一的分片,因此严格控制数据库连接,以保证在线系统数据库资源能够被更多的应用所使用,是明智的选择。
2. 自动化执行引擎
为了降低用户的使用成本以及连接模式动态化这两个问题,ShardingSphere 提炼出自动化执行引擎的思路。
自动化执行引擎将连接模式的选择粒度细化至每一次 SQL 的操作。 针对每次 SQL 请求,自动化执行引擎都将根据其路由结果,进行实时的演算和权衡,并自主地采用恰当的连接模式执行,以达到资源控制和效率的最优平衡。 针对自动化的执行引擎,用户只需配置 maxConnectionSizePerQuery 即可,该参数表示一次查询时每个数据库所允许使用的最大连接数。
执行引擎分为准备和执行两个阶段。
2.1 准备阶段
用于准备执行的数据。分为结果集分组和执行单元创建。
ShardingSphere 为了避免死锁的出现,在获取数据库连接时进行了同步处理。 它在创建执行单元时,以原子性的方式一次性获取本次 SQL 请求所需的全部数据库连接,杜绝了每次查询请求获取到部分资源的可能。
2.2 执行阶段
分为分组执行和归并结果集生成两个步骤。
网友评论