摘要:
如果数据库连接首次建立失败,会怎么样? SingleDataSource#initDataSourceOrigin -> this.dataSourcePool.build 构建底层数据库连接池的时候,如果创建失败会直接抛出一个异常 ,初始化状态不会置为 true,如下 throw new Zebr 阅读全文
摘要:
sql语句: (1) insert into [table] xx values(x,x,xx); (2) select @@Identity; 或 select last_insert_id(); 比如这种常见的 insert 后要获取自增主键值的, 需要在同一个连接同一个statement操作 阅读全文
摘要:
GroupDataSource的物理结构 负载均衡的对象 zebra的负载均衡是在GroupDataSource的读库 readDataSource( LoadBalanceDataSource) 中进行的, 它内部包含多个读库节点的SingleDataSource LoadBalanceDataS 阅读全文
摘要:
TableShardRule#eval 根据路由规则解析sql的时候如果没匹配找到分片键的值 // full table scan if is not insert sql. if (type != SqlType.INSERT && type != SqlType.REPLACE) { if (f 阅读全文
摘要:
假设分库分表情况如下 分库 id0:分表 test_0 、 test_1 分库 id1: 分表 test_2、 test_3 sql语句: select test.* from test 一、路由结果 DefaultRouter#router 路由出来的结果两个 RouterResult, 每个里边 阅读全文
摘要:
zebra 解析sql使用的阿里druid连接池内部的 ast解析器 SQLParser#parseInternal(SQLStatement stmt) 解析sql 语句的时候,会使用自定义 ast 的访问器 AbstractMySQLASTVisitor 去访问 SQLStatement 的 S 阅读全文
摘要:
SingleDataSource 对应 GroupDataSource 主库节点 或一个从库节点 由于它是对应的是实际的db节点,直接和底层数据库连接池打交道; zebra 将它的生命周期交由 SingleDataSourceManager 进行管理,负责构建、启停、销毁, 销毁的过程是异步的,先将 阅读全文
摘要:
在初始化 GroupDataSource 的时候,会往它的配置管理器 DefaultDataSourceConfigManager中添加了一个配置监听器 代码路径:GroupDataSource#init() -> initConfig(); this.dataSourceConfigManager 阅读全文
摘要:
前面 分组数据源GroupDataSource及其初始化 已经知道 GroupDataSource 在初始化的时候会初始化两个DataSource, 读 readDataSource + 写 writeDataSource 由于zebra 也是基于 jdbc规范实现的, 所以sql执行的过程和 jd 阅读全文
摘要:
GroupDataSource 负责一组 db节点,包含多个SingleDataSource, 将它们分为一个主和多个从进行读写分离和多个从库的负载均衡; 对应db部署架构的话 对应一个分库 或 一主多从 shardDataSource分库分表中的分库对应的就是 GroupDataSource,也可 阅读全文