2.4.1 数据库中间件设计篇

目录

2.4.1.1 数据库中间件设计理论

1、为什么需要数据库中间件?

    1.1、数据库存储的数据量不是很大,但并发的读写操作超过数据库服务器的处理能力

    1.2、应用的业务模块很多,总的数据量很大,并发读写操作均超过单个数据库服务器的处理能力

    1.3、如果单个表的数据量很大,超出单表的上限

2、高并发、海量数据的情况下

2.4.1.2 数据库中间件设计要点

1、数据库中间件设计要点

2、数据库的拆分

    2.1、垂直拆分

    2.2、水平拆分

    2.3、水平拆分---分片规则

    2.4、分库分表的技术难点

3、数据库中间件的两种实现模式

    3.1、客户端模式

    3.2、服务端(代理)模式

4、常用的数据库中间件


2.4.1.1 数据库中间件设计理论

1、为什么需要数据库中间件?

    普通的应用程序---数据库访问

2.4.1 数据库中间件设计篇

2.4.1 数据库中间件设计篇

 

    1.1、数据库存储的数据量不是很大,但并发的读写操作超过数据库服务器的处理能力

解决办法:加缓存、读写分离、增加数据库访问模块(数据库中间件)

2.4.1 数据库中间件设计篇 

    1.2、应用的业务模块很多,总的数据量很大,并发读写操作均超过单个数据库服务器的处理能力

解决办法:缓存、分库、读写分离、数据库中间件

对数据库中间件的能力要求很高

2.4.1 数据库中间件设计篇

    1.3、如果单个表的数据量很大,超出单表的上限

eg:商品、订单......
        解决办法:分区表、分表
        由“数据库中间件”来做 

2、高并发、海量数据的情况下

为了解决数据存储、访问性能问题我们需要数据库中间件
    数据库中间件:让我们可以在应用程序中快速应用读写分离、分库分表

2.4.1.2 数据库中间件设计要点

1、数据库中间件设计要点

    1、能解析SQL
    2、支持读写分离
    3、支持从(slave)库读的负载均衡
    4、支持分库操作
    5、支持分表操作
    6、支持跨库关联查询
    7、对事务处理的支持
    8、主键ID生成
    9、数据源管理

2、数据库的拆分

    拆分方式:垂直拆分、水平拆分

    2.1、垂直拆分

        按业务模块垂直拆分

优点
    1、拆分后业务清晰,拆分规则明确
    2、系统之间整合或扩展容易
    3、数据维护简单
缺点
    1、部分业务表无法join,只能通过接口方式解决,提高了系统复杂度
    2、受每种业务不同的限制存在单库性能瓶颈,不易数据扩展跟性能提高
    3、事务处理复杂

2.4.1 数据库中间件设计篇

    2.2、水平拆分

对海量数据的表进行分表分库存储

优点:
    1、如果拆分规则抽象得好的话,join操作基本可以数据库做
    2、不存在单库大数据,高并发的性能瓶颈
    3、应用端改造较少
    4、提高了系统的稳定性跟负载能力
缺点:
    1、拆分规则难以抽象
    2、分片事务一致性难以解决
    3、数据多次扩展难度跟维护量极大
    4、跨库join性能较差

2.4.1 数据库中间件设计篇 

2.4.1 数据库中间件设计篇

    2.3、水平拆分---分片规则

 水平对数据进行拆分最重要的是分片规则---拆分规则
    可以如何来拆分?
        1、范围:时间、数值
        2、列表:按地域、按组织、分类
        3、散列:hash(某个字段) % 分片数、一致性hash
        4、复合多种方式

    2.4、分库分表的技术难点

    无论垂直拆分、水平拆分,都有共同的技术难点
        1、引入分布式事务的问题
        2、跨节点join的问题
        3、跨节点合并排序分页问题
        4、多数据源管理问题

3、数据库中间件的两种实现模式

    3.1、客户端模式

        在应用程序中集成数据库中间件模块,通过该模块来配置管理应用需要的一个(或者多个)数据源,
        以及访问各个数据源,在模块内完成数据的整合。

2.4.1 数据库中间件设计篇

    3.2、服务端(代理)模式

        通过中间代理层来统一管理所有的数据源,后端数据库集群对前端应用程序透明,同时易于数据库扩展。
        独立的服务,能提供更强的处理能力。适用于大型复杂系统。

2.4.1 数据库中间件设计篇 

4、常用的数据库中间件

2.4.1 数据库中间件设计篇 

2.4.1 数据库中间件设计篇