企业应用
- 定义: 企业应用一般都涉及到持久化数据。
- 企业应用一般都涉及大量数据
- 企业应用还涉及很多人同时访问
- 企业应用还涉及大量操作数据的用户界面屏幕。
- 企业应用很少独立存在,通常需要与散布在企业周围的其他企业应用集成。(技术多样化,协议多样化)
可伸缩性:
- 响应时间
- 响应性
- 等待时间
- 吞吐率
- 负载
- 负载敏度
- 效率
领域逻辑组织方式:
- 1.事务脚本
- 2.领域模型
- 3.表模块
服务层:
- 表现逻辑和领域逻辑之间的交互完全通过服务层,就像应用程序API一样。
- 如果确实需要,使用最小化的服务层
映射到关系数据库:
- 1. 为查询语句返回的每一行产生一个它的实例,种种行数据入口就行是面向对象方式来看待数据。
- 2.许多环境提供记录集,这种表和数据行的一种通用数据结构,用来模拟数据库的表格属性。
- 如果使用记录集,对于数据库的每个表只需要一个对象来管理。
并发:
- 解决方案有两个,一个是隔离,一个是不变性
- 隔离是学习操作系统分配内存的方式,让一个单元只允许一个进程访问
- 只有共享数据可以被修改的情况下并发问题才会出现。
事务属性:
- 1.原子性 在事务里面所有的动作要么全部完成,要么全部回滚
- 2.一致性 在事务开始和结束的时候,所有的资源要保持一致
- 3.隔离性 在事务完成之后,他的结果对于其他事务才是可见的
- 4.持久性 已提交的事务必须是可持久性的,即任何崩溃都是可以保存下来的
事务资源:
- 定义:用事务来控制并发的过程
- 长事务:跨越多个事务请求的事务
- 请求事务:在请求开始时启动,在请求结束时完成的事务
- 延迟事务:在外界事务读取或加载完成时,启动的事务,即在更新时才启动的事务
事务建议:
- 1.使用事务的时间应尽可能的短,尽量避免长事务,因为事务进行时间越长,锁定的东西越多,
- 在没有任何并发控制的情况下,事务时间越长越有机会导致数据的不一致,造成事务的无效回滚,使用延迟事务能够提供事务的性能。
- 2.使用事务时应该清楚的知道锁定的到底是什么,对于数据库来说,锁定的是被访问的行级数据。
- 3.如果一个事务要求锁定的行数超过数据库最大可支持事务锁定,那么会上升为表级锁,即锁升级。锁升级显然对并发造成很大的影响。
- 这也是为什么不能在领域层超类型级别上使用“对象”表的原因。
- 4.尽可能的减少事务隔离
事务隔离级别(由低到高):
- 1.读未提交
- 2.读已提交
- 3.可重复读
- 4.可串行化
业务事务和系统事务
- 系统事务:关系数据库系统和事务监视所支持的事务
- 业务事务:业务事务是保证用户操作行为完整的事务
离线并发控制模式:
- 1.应该尽可能让事务系统自己来处理并发问题。
- 这样做会损失部分系统伸缩性
- 2.乐观离线锁
- 优点:易于编程实现,提供最好的灵活性
- 缺点:只能在提交数据时才发现事务将要失败
- 3.悲观离线锁:
- 优点:尽可能早的发现错误
- 缺点:不利于编程实现,丧失部分灵活性
应用服务器并发:
- 1.显式多线程
- 缺点:构建复杂,难以调试
- 2.每个会话一个进程,配合进程池来提高效率
- 3.每个会话一个线程,线程崩溃可能会导致整个进程垮掉
- 4.中间层屏蔽,比如J2EE中的EJB