大数据下高并发的处理详解

大数据下高并发的处理详解

ID:8831629

大小:32.28 KB

页数:10页

时间:2018-04-08

大数据下高并发的处理详解_第1页
大数据下高并发的处理详解_第2页
大数据下高并发的处理详解_第3页
大数据下高并发的处理详解_第4页
大数据下高并发的处理详解_第5页
资源描述:

《大数据下高并发的处理详解》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、大数据下高并发的处理详解本文章来自于阿里云云栖社区对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了。而并发问题是绝大部分的程序员头疼的问题,但话又说回来了,既然逃避不掉,那我们就要想想应对措施,今天我们就一起讨论一下常见的并发和同步吧。首先为了更好的理解并发和同步,我们需要首先明白两个重要的概念:同步和异步同步和异步的区别和联系所谓同步,就是一个线程执行一个方法或函数的时候,会阻塞其它线程,其他线程要等待它执行完毕才能继续执行。异步,就是多个线程之间没有阻塞,多个线程同时执行。通俗一点来说,同步就是一件事一件事的做

2、,异步就是做一件事,不影响做其他事情。例如:吃饭和说话,只能一件一件的来,因为只有一张嘴。但是吃饭和听音乐是异步的,可以一起进行,因为听音乐并不影响我们吃饭。对于Java程序员来说,Synchronized最为熟悉了,如果它作用于一个类的话,那么就是一个线程访问类的方法时,其他线程就会阻塞,相反,如果没有这个关键字来修饰的话,不同线程就可以在同一时间访问同一个方法,这就是异步。脏读和不可重复读脏读脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这是,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还

3、没有提交的数据,那么另外一个事务读取的这个数据是脏数据(DirtyData),依据脏数据所做的操作可能是不正确的。不可重复读在第一个事务读取数据后,第二个事务对数据进行了修改,导致第一个事务结束前再访问这个数据的时候,会发现两次读取到的数据是不一样的,因此称为不可重复读。如何处理并发和同步今天讲的如何处理并发和同同步问题主要是通过锁机制。我们需要明白,锁机制有两个层面。一种是代码层次上的,如果Java中的同步锁Synchronized,另一种是数据库层次上的,比较典型的就是悲观锁(传统的物理锁)和乐观锁悲观锁悲观锁,正如其名,它指的是对数据被外界(包括

4、本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度。因此,在这个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)。一个典型的倚赖数据库的悲观锁调用:select*fromaccountwherename=”Erica”forupdate这条sql语句锁定了account表中所有符合检索条件(name=”Erica”)的记录。本次事务提交之前(事务提交时会释放事务过程中的锁),外界无法修改

5、这些记录。Hibernate的悲观锁,也是基于数据库的锁机制实现。下面的代码实现了对查询记录的加锁:1234StringhqlStr="fromTUserasuserwhereuser.name='Erica'";Queryquery=session.createQuery(hqlStr);query.setLockMode("user",LockMode.UPGRADE);//加锁ListuserList=query.list();//执行查询,获取数据观察运行期Hibernate生成的SQL语句:1selecttuser0_.idasid,tuse

6、r0_.nameasname,tuser0_.group_idasgroup_id,tuser0_.user_typeasuser_type,tuser0_.sexassexfromt_usertuser0_where(tuser0_.name='Erica')forupdate这里Hibernate通过使用数据库的forupdate子句实现了悲观锁机制。Hibernate的加锁模式有:123456789101LockMode.NONE:无锁机制。LockMode.WRITE:Hibernate在Insert和Update记录的时候会自动获取LockM

7、ode.READ:Hibernate在读取记录的时候会自动获取。以上这三种锁机制一般由Hibernate内部使用,如Hibernate为了保证Update过程中对象不会被外界修改,会在save方法实现中自动为目标对象加上WRITE锁。LockMode.UPGRADE:利用数据库的forupdate子句加锁。LockMode.UPGRADE_NOWAIT:Oracle的特定实现,利用Oracle的forupdatenowait子句实现加锁。上面这两种锁机制是我们在应用层较为常用的,加锁一般通过以下方法实现:Criteria.setLockMode112Q

8、uery.setLockModeSession.lock注意,只有在查询开始之前(也就是Hib

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。