设为首页 加入收藏

TOP

大型网站系统与 Java 中间件实践(三)
2017-12-30 06:06:51 】 浏览:618
Tags:大型 网站 系统 Java 中间件 实践
成之前的功能了。

跨库查询的问题及解决

一张逻辑表,对应多个数据库的多张数据表,在一些场景下比较复杂,如排序、最大最小求和等函数处理、求平均值、非排序分页、排序后分页。

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

1、为用户提供专有API

2、通用的方式,数据层JDBC

3、基于ORM或类ORM接口的方式

直接基于JDBC驱动方式较好~

数据层的整体流程

SQL解析==>规则处理==>SQL改写==>数据源选择==>SQL执行==>结果集返回合并处理

1、SQL解析阶段

  • SQL解析并不完备
  • SQL中不带有分库条件,但实际上是可以明确指定分库的

2、规则处理阶段

  • 采用固定哈希算法作为规则,如根据用户id取模,id mod 2分库,再id mod 4分表。实现简单,但是如果扩容的话比较复杂!
  • 一致性哈希,节点对应的哈希值为一个范围,分配给现有节点。如果有节点加入,会从原有节点分管一部分范围的哈希值;如果有节点退出,会把哈希值交给下一个节点管理
  • 虚拟节点对一致性哈希的改进,引入虚拟节点,如4个物理节点可以变为多个虚拟节点,每个虚拟节点支持连续的哈希环上的一段。
  • 映射表与规则自定义计算方式,映射表是根据分库分表字段的值的查表法来确定数据源的方法,一般用于对热点数据的特殊处理。

3、为什么要改写SQL

分库分表后,同一个卖家的商品可能会分在多个库中,查询就要跨库。分布的不同数据库中的表的结构虽然一样,但是表的名字、索引名字未必一样,所以要修改SQL。

还有需要修改SQL的地方,如跨库计算平均值,必须修改SQL获取数量、总数后再进行计算。

4、如何选择数据源,读写分析

5、执行SQL和结果处理阶段,异常处理和判断

第六章 消息中间件

JMS,Java Message Service是Java EE中关于消息的规范,ActiveMQ等是对这个规范的实现。如果是小型系统直接使用JMS是一个经济的选择,在大型系统中不适合使用JMS。

如何解决消息发送一致性

消息发送一致性是指产生消息的业务动作与消息发送一致,即如果业务操作成功了,那么由这个操作产生的消息一定要发送出去。

1、发送消息给消息中间件

2、消息中间件入库消息

3、消息中间件返回结果

4、业务操作

5、发送业务操作结果给消息中间件

6、更改存储中消息状态

……

注:后面内容略,不方便摘要

参考:《大型网站系统与Java中间件实践》

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇IDEA 代码生成插件 CodeMaker 下一篇String 常量池和 String#intern()

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目