高并发

 

脏数据

  脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这

个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据(Dirty Data),依据脏数据所做的操作可能是不正确的。

不可重复读

  不可重复读是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。 

 

高并发处理:

表拆分:表名不一样,但结构一样

乐观锁;不锁定数据库表,利用业务逻辑解决并发问题,既能保证数据的并发可读性,又能保证保存数据的排他性,在保证性能的同时解决了并发带来的脏读数据问题

Hibernate中实现乐观锁:前提:在现有表中增加一个冗余字段,version版本号,long类型

只有当前版本号》=数据库中表的版本号时才能提交,提交后版本version++

高并发下尽量使用缓存:用户缓存、信息缓存等尽量减少与数据库的交互性

 

实现:在ormapping增加一属性optimistic-lock="version"即可,以下是样例片段

<hibernate-mapping>

<class name="com.insigma.stock.ABC" optimistic-lock="version" table="T_Stock" schema="STOCK">

 

数据库查询优化、读写分离 分表优化查询语句,尽量减少使用hibernate等工具直接生成的语句,优化数据库结构、多做索引,提高查询效率,尽可能多的使用静态页面,减少容器的解析,服务器集群

一种是使用缓存、另一种是使用生成静态页面;还有就是从最基础的地方优化我们写代码减少不必要的资源浪费:(

1.不要频繁的new对象,对于在整个应用中只需要存在一个实例的类使用单例模式.对于String的连接操作,使用StringBuffer或者StringBuilder.对于utility类型的类通过静态方法来访问。

2. 避免使用错误的方式,如Exception可以控制方法推出,但是Exception要保留stacktrace消耗性能,除非必要不要使用 instanceof做条件判断,尽量使用比的条件判断方式.使用JAVA中效率高的类,比如ArrayList比Vector性能好。)

posted on 2018-11-13 22:00  Boahz  阅读(154)  评论(0编辑  收藏  举报

导航