46
46
47
47
比较常见的包括:
48
48
49
- - cobar
49
+ - Cobar
50
50
- TDDL
51
- - atlas
52
- - sharding -jdbc
53
- - mycat
51
+ - Atlas
52
+ - Sharding -jdbc
53
+ - Mycat
54
54
55
- #### cobar
56
- 阿里 b2b 团队开发和开源的,属于 proxy 层方案,就是介于应用服务器和数据库服务器之间。应用程序通过 JDBC 驱动访问 cobar 集群,cobar 根据 SQL 和分库规则对 SQL 做分解,然后分发到 MySQL 集群不同的数据库实例上执行。早些年还可以用,但是最近几年都没更新了,基本没啥人用,差不多算是被抛弃的状态吧。而且不支持读写分离、存储过程、跨库 join 和分页等操作。
55
+ #### Cobar
56
+ 阿里 b2b 团队开发和开源的,属于 proxy 层方案,就是介于应用服务器和数据库服务器之间。应用程序通过 JDBC 驱动访问 Cobar 集群,Cobar 根据 SQL 和分库规则对 SQL 做分解,然后分发到 MySQL 集群不同的数据库实例上执行。早些年还可以用,但是最近几年都没更新了,基本没啥人用,差不多算是被抛弃的状态吧。而且不支持读写分离、存储过程、跨库 join 和分页等操作。
57
57
58
58
#### TDDL
59
59
淘宝团队开发的,属于 client 层方案。支持基本的 crud 语法和读写分离,但不支持 join、多表查询等语法。目前使用的也不多,因为还依赖淘宝的 diamond 配置管理系统。
60
60
61
- #### atlas
61
+ #### Atlas
62
62
360 开源的,属于 proxy 层方案,以前是有一些公司在用的,但是确实有一个很大的问题就是社区最新的维护都在 5 年前了。所以,现在用的公司基本也很少了。
63
63
64
- #### sharding -jdbc
65
- 当当开源的,属于 client 层方案。确实之前用的还比较多一些,因为 SQL 语法支持也比较多,没有太多限制,而且目前推出到了 2.0 版本,支持分库分表、读写分离、分布式 id 生成、柔性事务(最大努力送达型事务、TCC 事务)。而且确实之前使用的公司会比较多一些(这个在官网有登记使用的公司,可以看到从 2017 年一直到现在,是有不少公司在用的),目前社区也还一直在开发和维护,还算是比较活跃,个人认为算是一个现在也** 可以选择的方案** 。
64
+ #### Sharding -jdbc
65
+ 当当开源的,属于 client 层方案,目前已经更名为 [ ` ShardingSphere ` ] ( https://github.com/apache/incubator-shardingsphere ) (后文所提到的 ` Sharding-jdbc ` ,等同于 ` ShardingSphere ` ) 。确实之前用的还比较多一些,因为 SQL 语法支持也比较多,没有太多限制,而且截至 2019.4,已经推出到了 ` 4.0.0-RC1 ` 版本,支持分库分表、读写分离、分布式 id 生成、柔性事务(最大努力送达型事务、TCC 事务)。而且确实之前使用的公司会比较多一些(这个在官网有登记使用的公司,可以看到从 2017 年一直到现在,是有不少公司在用的),目前社区也还一直在开发和维护,还算是比较活跃,个人认为算是一个现在也** 可以选择的方案** 。
66
66
67
- #### mycat
68
- 基于 cobar 改造的,属于 proxy 层方案,支持的功能非常完善,而且目前应该是非常火的而且不断流行的数据库中间件,社区很活跃,也有一些公司开始在用了。但是确实相比于 sharding jdbc 来说,年轻一些,经历的锤炼少一些。
67
+ #### Mycat
68
+ 基于 Cobar 改造的,属于 proxy 层方案,支持的功能非常完善,而且目前应该是非常火的而且不断流行的数据库中间件,社区很活跃,也有一些公司开始在用了。但是确实相比于 Sharding jdbc 来说,年轻一些,经历的锤炼少一些。
69
69
70
70
#### 总结
71
- 综上,现在其实建议考量的,就是 sharding -jdbc 和 mycat ,这两个都可以去考虑使用。
71
+ 综上,现在其实建议考量的,就是 Sharding -jdbc 和 Mycat ,这两个都可以去考虑使用。
72
72
73
- sharding -jdbc 这种 client 层方案的** 优点在于不用部署,运维成本低,不需要代理层的二次转发请求,性能很高** ,但是如果遇到升级啥的需要各个系统都重新升级版本再发布,各个系统都需要** 耦合** sharding -jdbc 的依赖;
73
+ Sharding -jdbc 这种 client 层方案的** 优点在于不用部署,运维成本低,不需要代理层的二次转发请求,性能很高** ,但是如果遇到升级啥的需要各个系统都重新升级版本再发布,各个系统都需要** 耦合** Sharding -jdbc 的依赖;
74
74
75
- mycat 这种 proxy 层方案的** 缺点在于需要部署** ,自己运维一套中间件,运维成本高,但是** 好处在于对于各个项目是透明的** ,如果遇到升级之类的都是自己中间件那里搞就行了。
75
+ Mycat 这种 proxy 层方案的** 缺点在于需要部署** ,自己运维一套中间件,运维成本高,但是** 好处在于对于各个项目是透明的** ,如果遇到升级之类的都是自己中间件那里搞就行了。
76
76
77
- 通常来说,这两个方案其实都可以选用,但是我个人建议中小型公司选用 sharding -jdbc,client 层方案轻便,而且维护成本低,不需要额外增派人手,而且中小型公司系统复杂度会低一些,项目也没那么多;但是中大型公司最好还是选用 mycat 这类 proxy 层方案,因为可能大公司系统和项目非常多,团队很大,人员充足,那么最好是专门弄个人来研究和维护 mycat ,然后大量项目直接透明使用即可。
77
+ 通常来说,这两个方案其实都可以选用,但是我个人建议中小型公司选用 Sharding -jdbc,client 层方案轻便,而且维护成本低,不需要额外增派人手,而且中小型公司系统复杂度会低一些,项目也没那么多;但是中大型公司最好还是选用 Mycat 这类 proxy 层方案,因为可能大公司系统和项目非常多,团队很大,人员充足,那么最好是专门弄个人来研究和维护 Mycat ,然后大量项目直接透明使用即可。
78
78
79
79
### 你们具体是如何对数据库如何进行垂直拆分或水平拆分的?
80
80
@@ -92,7 +92,7 @@ mycat 这种 proxy 层方案的**缺点在于需要部署**,自己运维一套
92
92
93
93
好了,无论分库还是分表,上面说的那些数据库中间件都是可以支持的。就是基本上那些中间件可以做到你分库分表之后,** 中间件可以根据你指定的某个字段值** ,比如说 userid,** 自动路由到对应的库上去,然后再自动路由到对应的表里去** 。
94
94
95
- 你就得考虑一下,你的项目里该如何分库分表?一般来说,垂直拆分,你可以在表层面来做,对一些字段特别多的表做一下拆分;水平拆分,你可以说是并发承载不了,或者是数据量太大,容量承载不了,你给拆了,按什么字段来拆,你自己想好;分表,你考虑一下,你如果哪怕是拆到每个库里去,并发和容量都ok了 ,但是每个库的表还是太大了,那么你就分表,将这个表分开,保证每个表的数据量并不是很大。
95
+ 你就得考虑一下,你的项目里该如何分库分表?一般来说,垂直拆分,你可以在表层面来做,对一些字段特别多的表做一下拆分;水平拆分,你可以说是并发承载不了,或者是数据量太大,容量承载不了,你给拆了,按什么字段来拆,你自己想好;分表,你考虑一下,你如果哪怕是拆到每个库里去,并发和容量都 ok 了 ,但是每个库的表还是太大了,那么你就分表,将这个表分开,保证每个表的数据量并不是很大。
96
96
97
97
98
98
而且这儿还有两种** 分库分表的方式** :
0 commit comments