大型网站系统与Java中间件—读书笔记5(数据访问层)

一 数据库从单机到分布式的挑战和应用

     1 单机数据库

         JDBC ODBC ORM

     2 数据库水平垂直/水平拆分的困难

        数据库减压方案: 优化应用(看是否有没必要的压力给数据库)

                                      其他办法降低对数据库的压力(引入缓存,搜索引擎)

                                      数据拆分(垂直拆分 水平拆分)

        垂直拆分带来的影响:单机ACID被打破 引入分布式事务

                                            join操作困难

                                            靠外键约束场景收到影响

        水平拆分带来的影响:除了和垂直拆分带来的影响一样外,还有

                                            依赖单库的自增序列生产唯一ID受影响

                                            针对单个逻辑的表查询需要跨库

     3 分布式事务

        分布式事务模型与规范:分布式事务规范 XA

                                                分布式事务处理模型 DTP模型

        DTP模型:Distributed Transaction Processing Reference Model

                          定义了三个组件:Application Program

                                                       Resource Manager

                                                       Transaction Manager

        Application Program(AP)   应用程序

        Resource Manager(RM) 资源管理器 可以理解为一个DBMS系统

                                                      AP通过RM对资源进行控制

        Transaction Manager(TM) 事务管理器 

                                                         提供给AP应用程序编程接口并管理RM

        注:如何实际应用?

        两阶段提交(2PC):提交阶段前增加准备阶段

        CAP/BASE理论:   C Consistency 数据上的一致性,当数据写入成功后,所有节点会同时看到这个数据

                                         A Availability 无论成功或失败,请求都能收到一个反馈(可用性)

                                         P Partition-Tolerance 系统的一部分出现问题时,系统仍能正常工作(分区容忍性)       

        CAP不能同时满足 选择CA AP 或者CP(一般选择AP)

        BASE:Basically Available 基本可用

                      Soft state 软状态

                      Eventually consistent 最终一致(选择AP后 一致性通过最终一致解决)

        Paxos协议:比两阶段提交要轻量的保证一致性的协议

     4 多机的Sequence问题与处理

         针对数据水平分库后,原来单库中的Sequence及自增Id的做法需要改变

         Id:唯一性 连续性

         唯一性:UUID 但是连续性不好

         连续性:架设Id生成器,每次取ID都从这台机器上取

                       这样会带来问题  性能问题(每次远程取ID都有资源损耗)  改进方案 取一段ID缓存在本地

                       稳定性问题 Id生成器作为一个无状态集群存在,可用性要靠整个集群保证

                       存储问题

         优化:将生成器嵌入到应用中,直接在独立的存储中取ID

     5 多机的数据查询

         跨库join:JOIN操作分为多次操作

                          数据冗余:对常用信息进行冗余

                          借助外部系统(如搜索引擎) 

         外键约束

         跨库查询


二 数据访问层的设计与实现

      在分布式系统中,数据访问层也称为分布式数据访问层

     1 如何对外提供数据访问层功能

         专有API  通用JDBC方式 基于ORM或者类ORM接口形式

     2 按照数据层流程顺序看数据层设计

         流程:SQL解析  规则处理 SQL改写 数据源选择 SQL执行 结果集返回

         SQL解析阶段:考虑 对SQL支持程度

                                          支持多少种SQL语言

         规则处理阶段(分库分表规则):采用固定哈希算法作为规则 

                                                               采用一致性哈希算法

         SQL改写:不同库中表名 索引名可能雷同

         选择数据源:根据要执行的SQL特点 是否在事务中以及各个库的权重规则

         执行SQL和处理结果

     3 独立部署的数据访问层实现方式 

         对应用呈现的方式:Jar包方式/Proxy方式

     4 读写分离的挑战和应对

         目的:分担主库的读压力

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值