数据库分库分表实现结构
来源:互联网 发布:nginx.exe 一闪而过 编辑:程序博客网 时间:2024/06/16 00:26
1、客户端分库分表
客户端实现起相对简单一点,主要通过配置中心来确定如何读取和写入数据,实现起来简单,但是对使用的用户来说绑定的过于紧密。
开源的软件当前有乐视开源的
- 芒果主页:mango.jfaster.org
- 芒果源码:github.com/jfaster/mango
大概的看了下文档,主要基于spring的注解,结合动态datasoure进行的处理。
2、中间件分库分表
2.1请求流程
上面这幅图就可以看出中间件作用,比如下面的这个SQL:
select * from table_name where id = 1;
按照中间件分库分表算法,此SQL将发送到DB1节点,由DB1这个MySQL负责解析和获取id=1的数据,并通过中间件返回给客户端。而在读写分离结构中并没有这些分库分表规则,他只能在众多读节点中load balance随机进行分发,它要求各个节点都要存放一份完整的数据。
中间件实现要点:
1、需要一个全局的数据分布配置
2、中间件需要解析mysql协议,保持对客户端透明
3、中间件需要解析sql语法,到对应的节点上进行操作返回
4、尽量维护分布式数据的事务
5、如果能有查询缓存更好
2.2当前开源产品介绍
mysql中间件
Cobar:
阿里巴巴B2B开发的关系型分布式系统,管理将近3000个MySQL实例。 在阿里经受住了考验,后面由于作者的走开的原因cobar没有人维护 了,阿里也开发了tddl替代cobar。
MyCAT:
社区爱好者在阿里cobar基础上进行二次开发,解决了cobar当时存 在的一些问题,并且加入了许多新的功能在其中。目前MyCAT社区活 跃度很高,目前已经有一些公司在使用MyCAT。总体来说支持度比 较高,也会一直维护下去,
OneProxy:
数据库界大牛,前支付宝数据库团队领导楼总开发,基于mysql官方 的proxy思想利用c进行开发的,OneProxy是一款商业收费的中间件, 楼总舍去了一些功能点,专注在性能和稳定性上。有朋友测试过说在 高并发下很稳定。
Vitess:
这个中间件是Youtube生产在使用的,但是架构很复杂。 与以往中间件不同,使用Vitess应用改动比较大要 使用他提供语言的API接口,我们可以借鉴他其中的一些设计思想。
Kingshard:
Kingshard是前360Atlas中间件开发团队的陈菲利用业务时间 用go语言开发的,目前参与开发的人员有3个左右, 目前来看还不是成熟可以使用的产品,需要在不断完善。
Atlas:
360团队基于mysql proxy 把lua用C改写。原有版本是支持分表, 目前已经放出了分库分表版本。在网上看到一些朋友经常说在高并 发下会经常挂掉,如果大家要使用需要提前做好测试。
MaxScale与MySQL Route:
这两个中间件都算是官方的吧,MaxScale是mariadb (MySQL原作者维护的一个版本)研发的,目前版本不支持分库分表。
MySQL Route是现在MySQL 官方Oracle公司发布出来的一个中间件
3、参考资料
分布式数据库中间件对比总结 http://www.open-open.com/news/view/1708e64
- 数据库分库分表实现结构
- 数据库层级结构实现
- 树结构在数据库中的实现
- 用数据库实现树型结构
- 数据库系统实现——索引结构
- 数据库系统实现 第三章 索引结构
- 在PB中快速实现数据库树形结构
- 基于日志结构的嵌入式数据库设计和实现1
- 在PB中快速实现数据库树形结构
- 利用DAC(Data-tier Application)实现数据库结构迁移
- 利用DAC(Data-tier Application)实现数据库结构迁移
- 利用DAC(Data-tier Application)实现数据库结构迁移
- 利用DAC(Data-tier Application)实现数据库结构迁移
- 利用Navicat工具实现MySQL数据库结构同步
- 使用Navicat实现MySQL数据库 表结构同步
- 数据库系统实现-第3章 索引结构
- zTree树形结构框架连接数据库实现增删改
- 利用Navicat实现MySQL数据库结构对比和同步
- 第1章 BashShell命令------------(sort、grep、bzip2、bzcat、bunzip2、gzip、zip)
- hdoj2048
- angular中如何实现上拉无限加载
- 集成学习自动权重设置python实现
- 移动支付之微信支付
- 数据库分库分表实现结构
- Add/Remove Classes With Raw Javascript
- 电子面单接口申请对接(返回电子面单模板)
- 探究react native的View
- Android Studio出现Error:No service of type Factory available in ProjectScopeServices.
- shell常用alias
- bullet3.0中btKinematicCharacterController类的使用
- LeetCode刷题系列_16题
- java判断文件编码格式