数据库的并发处理
Ⅰ 数据库原理并发控制问题
并发(concurrent)和并行(parallel)这两个概念,在数据库系统的资料中经常出现,然而有关它们的定义和区别却没有明确的说法。这里,我们根据这两个概念在资料中的使用,对它们的不同做一个说明。
并发是指多个任务的同时执行,任务与任务之间没有联系。由于数据库系统要同时为许多用户提供服务,每个用户都可以发出自己的访问请求,一个请求就是一个任务。在一个时间点,数据库系统可能要同时处理多个任务。因此,数据库系统一定要具备并发处理能力。
并行是指将一个任务划分为多个子任务,这些子任务同时执行。在所有子任务处理完成后,将它们的结果进行合并,就得到该任务的最终处理结果。在数据库系统中,如果要执行一个大的数据查询,为了提高速度、降低响应时间,用户可以通过系统配置或者在命令中,要求对该大数据量查询进行并行处理,将该查询划分成多个子查询。这些子查询同时执行,最后系统将所有子查询的处理结果进行合并,作为该查询处理的最终结果。现有的大型数据库系统都支持并行处理。
需要说明的是,并发和并行与数据库系统采用多进程还是多线程体系结构无关。对采用多进程结构的数据库系统,所有的任务、子任务通过进程来处理;而对采用多线程结构的数据库系统,这些工作是由线程来完成。
数据库系统的并发控制,涉及到任务的调度、数据的一致性及可靠性等,而数据库系统的并行处理,主要涉及任务的处理速度、系统性能等方面。
Ⅱ 数据库的并发控制跟恢复之间有什么联系
数据库管理系统(databasemanagementsystem)是一种操纵和管理数据库的大型软件,是用于建立、使用和维护数据库,简称dbms。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过dbms访问数据库中的数据,数据库管理员也通过dbms进行数据库的维护工作。它提供多种功能,可使多个应用程序和用户用不同的方法在同时或不同时刻去建立,修改和询问数据库。它使用户能方便地定义和操纵数据,维护数据的安全性和完整性,以及进行多用户下的并发控制和恢复数据库。按功能划分,数据库管理系统大致可分为6个部分:(1)模式翻译:提供数据定义语言(ddl)。用它书写的数据库模式被翻译为内部表示。数据库的逻辑结构、完整性约束和物理储存结构保存在内部的数据字典中。数据库的各种数据操作(如查找、修改、插入和删除等)和数据库的维护管理都是以数据库模式为依据的。(2)应用程序的编译:把包含着访问数据库语句的应用程序,编译成在dbms支持下可运行的目标程序。(3)交互式查询:提供易使用的交互式查询语言,如sql。dbms负责执行查询命令,并将查询结果显示在屏幕上。(4)数据的组织与存取:提供数据在外围储存设备上的物理组织与存取方法。⑸事务运行管理:提供事务运行管理及运行日志,事务运行的安全性监控和数据完整性检查,事务的并发控制及系统恢复等功能。(6)数据库的维护:为数据库管理员提供软件支持,包括数据安全控制、完整性保障、数据库备份、数据库重组以及性能监控等维护工具。基于关系模型的数据库管理系统已日臻完善,并已作为商品化软件广泛应用于各行各业。它在各户服务器结构的分布式多用户环境中的应用,使数据库系统的应用进一步扩展。随着新型数据模型及数据管理的实现技术的推进,可以预期dbms软件的性能还将更新和完善,应用领域也将进一步地拓宽。它所提供的功能有以下几项:(1)数据定义功能。DBMS提供相应数据语言来定义(DDL)数据库结构,它们是刻画数据库框架,并被保存在数据字典中。(2)数据存取功能。DBMS提供数据操纵语言(DML),实现对数据库数据的基本存取操作:检索,插入,修改和删除。(3)数据库运行管理功能。DBMS提供数据控制功能,即是数据的安全性、完整性和并发控制等对数据库运行进行有效地控制和管理,以确保数据正确有效。(4)数据库的建立和维护功能。包括数据库初始数据的装入,数据库的转储、恢复、重组织,系统性能监视、分析等功能。(5)数据库的传输。DBMS提供处理数据的传输,实现用户程序与DBMS之间的通信,通常与操作系统协调完成。着名数据库管理系统常见的数据库管理系统目前有许多数据库产品,如Oracle、Sybase、Informix、MicrosoftSQLServer、MicrosoftAccess、VisualFoxPro等产品各以自己特有的功能,在数据库市场上占有一席之地。下面简要介绍几种常用的数据库管理系统。OracleOracle是一个最早商品化的关系型数据库管理系统,也是应用广泛、功能强大的数据库管理系统。Oracle作为一个通用的数据库管理系统,不仅具有完整的数据管理功能,还是一个分布式数据库系统,支持各种分布式功能,特别是支持Internet应用。作为一个应用开发环境,Oracle提供了一套界面友好、功能齐全的数据库开发工具。Oracle使用PL/SQL语言执行各种操作,具有可开放性、可移植性、可伸缩性等功能。特别是在Oracle8i中,支持面向对象的功能,如支持类、方法、属性等,使得Oracle产品成为一种对象/关系型数据库管理系统。是一种典型的关系型数据库管理系统,可以在许多操作系统上运行,它使用Transact-SQL语言完成数据操作。由于MicrosoftSQLServer是开放式的系统,其它系统可以与它进行完好的交互操作。目前最新版本的产品为MicrosoftSQLServer2000,它具有可靠性、可伸缩性、可用性、可管理性等特点,为用户提供完整的数据库解决方案。MicrosoftOffice作为MicrosoftOffice组件之一的MicrosoftAccess是在Windows环境下非常流行的桌面型数据库管理系统。使用MicrosoftAccess无需编写任何代码,只需通过直观的可视化操作就可以完成大部分数据管理任务。在MicrosoftAccess数据库中,包括许多组成数据库的基本要素。这些要素是存储信息的表、显示人机交互界面的窗体、有效检索数据的查询、信息输出载体的报表、提高应用效率的宏、功能强大的模块工具等。它不仅可以通过ODBC与其它数据库相连,实现数据交换和共享,还可以与Word、Excel等公软件进行数据交换和共享,并且通过对象链接与嵌入技术在数据库中嵌入和链接声音、图像等多媒体数据。数据库管理系统选择原则选择数据库管理系统时应从以下几个方面予以考虑:(1)构造数据库的难易程度。需要分析数据库管理系统有没有范式的要求,即是否必须按照系统所规定的数据模型分析现实世界,建立相应的模型;数据库管理语句是否符合国际标准,符合国际标准则便于系统的维护、开发、移植;有没有面向用户的易用的开发工具;所支持的数据库容量,数据库的容量特性决定了数据库管理系统的使用范围。(2)程序开发的难易程度。有无计算机辅助软件工程工具CASE——计算机辅助软件工程工具可以帮助开发者根据软件工程的方法提供各开发阶段的维护、编码环境,便于复杂软件的开发、维护。有无第四代语言的开发平台——第四代语言具有非过程语言的设计方法,用户不需编写复杂的过程性代码,易学、易懂、易维护。有无面向对象的设计平台——面向对象的设计思想十分接近人类的逻辑思维方式,便于开发和维护。对多媒体数据类型的支持——多媒体数据需求是今后发展的趋势,支持多媒体数据类型的数据库管理系统必将减少应用程序的开发和维护工作。(3)数据库管理系统的性能分析。包括性能评估(响应时间、数据单位时间吞吐量)、性能监控(内外存使用情况、系统输入/输出速率、SQL语句的执行,数据库元组控制)、性能管理(参数设定与调整)。(4)对分布式应用的支持。包括数据透明与网络透明程度。数据透明是指用户在应用中不需指出数据在网络中的什么节点上,数据库管理系统可以自动搜索网络,提取所需数据;网络透明是指用户在应用中无需指出网络所采用的协议。数据库管理系统自动将数据包转换成相应的协议数据。(5)并行处理能力。支持多CPU模式的系统(SMP,CLUSTER,MPP),负载的分配形式,并行处理的颗粒度、范围。(6)可移植性和可括展性。可移植性指垂直扩展和水平扩展能力。垂直扩展要求新平台能够支持低版本的平台,数据库客户机/服务器机制支持集中式管理模式,这样保证用户以前的投资和系统;水平扩展要求满足硬件上的扩展,支持从单CPU模式转换成多CPU并行机模式(SMP,CLUSTER,MPP)(7)数据完整性约束。数据完整性指数据的正确性和一致性保护,包括实体完整性、参照完整性、复杂的事务规则。(8)并发控制功能。对于分布式数据库管理系统,并发控制功能是必不可少的。因为它面临的是多任务分布环境,可能会有多个用户点在同一时刻对同一数据进行读或写操作,为了保证数据的一致性,需要由数据库管理系统的并发控制功能来完成。评价并发控制的标准应从下面几方面加以考虑:保证查询结果一致性方法数据锁的颗粒度(数据锁的控制范围,表、页、元组等)数据锁的升级管理功能死锁的检测和解决方法(9)容错能力。异常情况下对数据的容错处理。评价标准:硬件的容错,有无磁盘镜象处理功能软件的容错,有无软件方法异常情况的容错功能(10)安全性控制包括安全保密的程度(帐户管理、用户权限、网络安全控制、数据约束)(11)支持汉字处理能力包括数据库描述语言的汉字处理能力(表名、域名、数据)和数据库开发工具对汉字的支持能力。
Ⅲ 怎么解决数据库并发的问题
1.用一个标识,在选择那张票的时候先用 (Update 表 set 票flag=‘占用了!’ where 票flag=‘未占用’ and ........) 这样是保险的,不可能存在并发问题,这就牵扯到sql锁机制问题了,你可以测试一下,其实sql中update是先查询出然后删除再添加,但由于使用了update,过程中就自动加锁了,很方便吧 2.加锁。 Microsoft® SQL Server™ 2000 使用锁定确保事务完整性和数据库一致性。锁定可以防止用户读取正在由其他用户更改的数据,并可以防止多个用户同时更改相同数据。如果不使用锁定,则数据库中的数据可能在逻辑上不正确,并且对数据的查询可能会产生意想不到的结果。 虽然 SQL Server 自动强制锁定,但可以通过了解锁定并在应用程序中自定义锁定来设计更有效的应用程序。
Ⅳ 如何处理数据库并发问题
想要知道如何处理数据并发,自然需要先了解数据并发。
什么是数据并发操作呢?
就是同一时间内,不同的线程同时对一条数据进行读写操作。
在互联网时代,一个系统常常有很多人在使用,因此就可能出现高并发的现象,也就是不同的用户同时对一条数据进行操作,如果没有有效的处理,自然就会出现数据的异常。而最常见的一种数据并发的场景就是电商中的秒杀,成千上万个用户对在极端的时间内,抢购一个商品。针对这种场景,商品的库存就是一个需要控制的数据,而多个用户对在同一时间对库存进行重写,一个不小心就可能出现超卖的情况。
针对这种情况,我们如何有效的处理数据并发呢?
第一种方案、数据库锁
从锁的基本属性来说,可以分为两种:一种是共享锁(S),一种是排它锁(X)。在MySQL的数据库中,是有四种隔离级别的,会在读写的时候,自动的使用这两种锁,防止数据出现混乱。
这四种隔离级别分别是:
读未提交(Read Uncommitted)
读提交(Read Committed)
可重复读(Repeated Read)
串行化(Serializable)
当然,不同的隔离级别,效率也是不同的,对于数据的一致性保证也就有不同的结果。而这些可能出现的又有哪些呢?
脏读(dirty read)
当事务与事务之间没有任何隔离的时候,就可能会出现脏读。例如:商家想看看所有的订单有哪些,这时,用户A提交了一个订单,但事务还没提交,商家却看到了这个订单。而这时就会出现一种问题,当商家去操作这个订单时,可能用户A的订单由于部分问题,导致数据回滚,事务没有提交,这时商家的操作就会失去目标。
不可重复读(unrepeatable read)
一个事务中,两次读操作出来的同一条数据值不同,就是不可重复读。
例如:我们有一个事务A,需要去查询一下商品库存,然后做扣减,这时,事务B操作了这个商品,扣减了一部分库存,当事务A再次去查询商品库存的时候,发现这一次的结果和上次不同了,这就是不可重复读。
幻读(phantom problem)
一个事务中,两次读操作出来的结果集不同,就是幻读。
例如:一个事务A,去查询现在已经支付的订单有哪些,得到了一个结果集。这时,事务B新提交了一个订单,当事务A再次去查询时,就会出现,两次得到的结果集不同的情况,也就是幻读了。
那针对这些结果,不同的隔离级别可以干什么呢?
“读未提(Read Uncommitted)”能预防啥?啥都预防不了。
“读提交(Read Committed)”能预防啥?使用“快照读(Snapshot Read)”方式,避免“脏读”,但是可能出现“不可重复读”和“幻读”。
“可重复读(Repeated Red)”能预防啥?使用“快照读(Snapshot Read)”方式,锁住被读取记录,避免出现“脏读”、“不可重复读”,但是可能出现“幻读”。
“串行化(Serializable)”能预防啥?有效避免“脏读”、“不可重复读”、“幻读”,不过运行效率奇差。
好了,锁说完了,但是,我们的数据库锁,并不能有效的解决并发的问题,只是尽可能保证数据的一致性,当并发量特别大时,数据库还是容易扛不住。那解决数据并发的另一个手段就是,尽可能的提高处理的速度。
因为数据的IO要提升难度比较大,那么通过其他的方式,对数据进行处理,减少数据库的IO,就是提高并发能力的有效手段了。
最有效的一种方式就是:缓存
想要减少并发出现的概率,那么读写的效率越高,读写的执行时间越短,自然数据并发的可能性就变小了,并发性能也有提高了。
还是用刚才的秒杀举例,我们为的就是保证库存的数据不出错,卖出一个商品,减一个库存,那么,我们就可以将库存放在内存中进行处理。这样,就能够保证库存有序的及时扣减,并且不出现问题。这样,我们的数据库的写操作也变少了,执行效率也就大大提高了。
当然,常用的分布式缓存方式有:Redis和Memcache,Redis可以持久化到硬盘,而Memcache不行,应该怎么选择,就看具体的使用场景了。
当然,缓存毕竟使用的范围有限,很多的数据我们还是必须持久化到硬盘中,那我们就需要提高数据库的IO能力,这样避免一个线程执行时间太长,造成线程的阻塞。
那么,读写分离就是另一种有效的方式了
当我们的写成为了瓶颈的时候,读写分离就是一种可以选择的方式了。
我们的读库就只需要执行读,写库就只需要执行写,把读的压力从主库中分离出去,让主库的资源只是用来保证写的效率,从而提高写操作的性能。
Ⅳ SQL数据库并发处理
你这个也不会涉及到并发啊,就按正常的处理就行。一般涉及并发的都是减法问题,加法没关系。
Ⅵ 数据库并发控制的主要方法
MVCC:多版本并发控制。
Ⅶ 用MS-SQL数据库时处理并发问题的方法
buzd
Ⅷ 数据库并发操作主要解决哪三个问,基本方法是什么
这很简单啊!!
1减少并发数,
2做一个消息队列,
3采用异步方式操作数据库
Ⅸ 2:在数据库中如何处理几十万条并发数据
只要不指定主键,并发的增,是没有问题的. 并发访问的话,数据库是有默认的并发访问处理级别的. 另外可以使用悲观锁,乐观锁来实现数据并发访问的问题. 几十万条的数据并发访问会在国家级,门户级别的服务器上出现.其他的并发数据.则不多见,除非出现数据攻击. 不过考虑现在的服务器硬件级别和数据处理能力,这种情况,很少会使用这种数据攻击.
麻烦采纳,谢谢!
Ⅹ 数据库有几十万条数据,求高手指点如何处理并发
如果有20万条数据,5分钟内处理完成,那么每秒最少要处理600多条数据。你这个瓶颈在三个方面:
本地数据库读写,你这个需要数据库表不人导致死锁的,这个可以通过堆硬件性能(IO和CPU主频),数据库做好对应的索引提升查询速度,返回的结果先缓存到redis里,然后再写回去,应该是可以解决的
提交速度,每秒提交600条,这个靠单线程是肯定解决不了的,这需要多任务多线程处理。。。最好的方式是第三方网站可以批量查询
你以这么快的速度提交过去,第三方接口不一定能处理完成,可能有QPS限速的。这就不是你解决的了,需要第三方提升性能。