Cobar-Client 实现策略总结
1. 数据源 DataSource
CobarClient 的 DataSource 分为三层
ICobarDataSourceService: 封装了多个 DataSourceDescriptor, 以及 HA 包装的 IHADataSourceCreator
DataSourceDescriptor: 封装了 identity, 主 targetDataSource 以及 备 standbyDataSource
DataSource: 实际数据库 DataSource
2. 路由 Router
CobarClient 的路由规则依赖于 iBatis, 它主要由 SqlMap 的 id 和路由字段共同决定最终的datasource, 例如
<rules>
<rule>
<namespace>com.alibaba.cobar.client.entities.Offer</namespace>
<shardingExpression>mod.apply(memberId)==1</shardingExpression>
<shards>partition1</shards>
</rule>
<rule>
<namespace>com.alibaba.cobar.client.entities.Offer</namespace>
<shardingExpression>mod.apply(memberId)==2</shardingExpression>
<shards>partition2</shards>
</rule>
</rules>
表示对于 SqlMap 中的 namespace 为 Offer 的 SQL, 将会根据参数的 memberId 字段来获取 shard, shard 即为 DataSourceDescriptor 的 identity
3. HA
CobarClient 的 HA 分为主动及被动方式, 主动方式默认开启, 即开一个线程定期探测主数据源是否可用, 如果不可用, 则切换为备数据源, 即切换 DataSourceDescriptor 的主备数据源
被动方式默认关闭, 被动方式是在每次执行查询前检查, 这样会降低效率, 如果检查失败, 则会切换主备.
4. 数据聚合
数据聚合主要还是依赖客户端查询完以后的人工聚合, 例如
select count(*), companyId from offer group by companyId
将会对多个数据源执行 SQL, 并最终返回多个结果集, 最后依赖用户手动聚合 companyId
Cobar-Client 实现策略总结的更多相关文章
- Cobar + MySQL 技术验证(li)
一.简介 Cobar是一个对数据进行拆分后进行分布式存储的产品,可以支持使用后台的 MySQL或者Oracle数据库,通过配置,将数据按照一定规则存储入不同的数据库中.即用分布式数据库代替了集中式数据 ...
- 【Canal源码分析】client工作过程
client的工作过程,需要我们自己去编写对应的逻辑,我们目前只能从example写的例子来看.目前examle中提供了两个例子,一个是单机的,一个是集群的cluster,我们后续如果需要进行开发的话 ...
- NetworkPolicy网络策略以及举例说明
网络策略(NetworkPolicy)是一种关于pod间及pod与其他网络端点间所允许的通信规则的规范.NetworkPolicy 资源使用标签选择pod,并定义选定pod所允许的通信规则. 前提 网 ...
- 详解MySQL大表优化方案( 转)
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...
- MySQL 大表优化方案探讨
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...
- 数据库分库分表(sharding)系列【转】
原文地址:http://www.uml.org.cn/sjjm/201211212.asp数据库分库分表(sharding)系列 目录; (一) 拆分实施策略和示例演示 (二) 全局主键生成策略 (三 ...
- 基于MyBatis的数据库切分框架,可实现数据的水平切分和垂直切分。 http://www.makersoft.org
https://github.com/makersoft/mybatis-shards MyBatis-Shards 专业的MyBatis数据库切分框架 MyBatis Shards简介 MyBati ...
- MySQL大表优化方案
转:https://segmentfault.com/a/1190000006158186?hmsr=toutiao.io&utm_medium=toutiao.io&utm_sour ...
- MySQL优化指南
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...
随机推荐
- 安装thrift全过程
为了研究基于thrift的RPC框架,其实,是想自己基于thrift写一个微服务的platform.首先就是安装Thrift,便于IDL架构生成java的接口文件.多的不说了,开始install的过程 ...
- CSS 派生选择器
派生选择器 通过依据元素在其位置的上下文关系来定义样式,你可以使标记更加简洁. 在 CSS1 中,通过这种方式来应用规则的选择器被称为上下文选择器 (contextual selectors),这是由 ...
- StackOverflow程序员推荐的几本书籍
1. <代码大全>史蒂夫·迈克康奈尔 推荐数:1684 “优秀的编程实践的百科全书,<代码大全>注重个人技术,其中所有东西加起来,就是我们本能所说的“编写整洁的代码”.这本书有 ...
- ant 构建时遇到 “非法字符: \65279”的解决办法
今天使用CI做版本构建时候碰到了这样一个问题,有个activity对应的java源码始终编译报错,错误发生在文件第一行. 出错内容是: *.java:1: 非法字符: \65279 [javac ...
- ORACLE随机查询
1. select * from (select * from tablename order by dbms_random.value) where rownum< N; 注:dbms_ran ...
- common.support.percent.PercentFrameLayout.onLayout(PercentFrameLayout.java:151)
08-29 20:01:47.402 18908-19364/com.tongyan.subway.inspect E/CrashHandler: java.lang.NullPointerExcep ...
- typedef struct 结构体
typedef struct _TTTT_ { int i; }TT_TT; 定义变量如下: struct _TTTT_ NewTT;方法1 TT_TT NewTT;方法2 是声明和定义 ...
- HttpURLConnection 直接发送soap消息调用webservice
httpConn = (HttpURLConnection) new URL(urlString).openConnection(); httpConn.setRequestProperty(& ...
- 相机标定:关于用Levenberg-Marquardt算法在相机标定中应用
LM算法在相机标定的应用共有三处. (1)单目标定或双目标定中,在内参固定的情况下,计算最佳外参.OpenCV中对应的函数为findExtrinsicCameraParams2. (2)单目标定中,在 ...
- NGUI之渲染DrawCall的合并
在Unity中,每次引擎准备数据并通知GPU的过程称为一次Draw Call.Draw Call值越低,会得到更好的渲染性能. (NGUI 查看DrawCall工具(NGUI-OPEN-Draw Ca ...