免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2247 | 回复: 0
打印 上一主题 下一主题

数据并发 -2 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-05 08:12 |只看该作者 |倒序浏览
数据并发 -2

事务是什么
事务是一种规范
这种规范规定了一组的数据操作要么都成功执行,要么都不执行。
打个比方你就知道了
假设我给你汇款500元
那么这种操作在底层的代码层面是先在我存款帐户上减去500元
然后往你的帐户上加500元
这样,从会计学的角度,帐才能平,从逻辑上说,才是一个整体的始终过程。
从这个例子看
我们知道这种事情里面的2个操作必须一起成功执行,要么一个都不执行,只有在这样的情况下面,
逻辑正确,账目正确
假设其中只有任意一个操作成功的话,都会造成类似许霆案件的发生。

所以我们看到事务是一种保证数据一致性和完整性的重要机制。

那么这种机制的运作和管理是有数据库软件本身提供的重要的功能之一。


那么锁是什么
锁是保护数据的模式
锁有共享锁,独占锁,升级锁,超级独占锁
也许你很迷糊
你不要着急
请听我继续往下说
一般来说,锁是由数据库的sql 引擎自己根据sql语句的类型自己决定的
比如
select语句,数据库会为其操作的数据加一个共享锁
insert语句,则是独占锁
独占锁的数据是不能被其他的操作并行共享,只能等待独占锁释放
共享锁可以被其他的共享锁的语句并行共享
所以
我们可以看出
当我们的应用中的写操作很多的时候
要很小心的性能的考虑
因为产生的都是独占锁
医院的应用就是典型的写操作很多

当然我们也可以根据特定的需要去专门锁一个对象,那么db2或者oracle等待都提供了这样的功能

锁其实就是一种制约,假设我找了女孩,出对象,实际此时,法律上说我跟这个女孩之间就是共享锁
别的男孩也可以跟这个女孩同时处对象,也可以保持这样的共享锁

那么结婚了,法律来说就意味着有了对这个女孩的独占锁
别的男孩就不能跟这个女孩处对象,更不能结婚

这就是锁的兼容性的问题


锁是保护的类型
隔离级别是什么呢

隔离级别是锁的施加范围
就是这个锁是株连九族还是株连几族的问题?

简单来说
假设我们select一些数据,比如是凡是去年进厂的职工,假设有10个,假如我们通常只是对当前的处理的数据行加锁,
那木,我们并不能阻止一种事情的发生,这种事情就是另外的事务又往插入了去年进厂的职工,插入5个,那么我们在同样的事务中,
第二次取这个数据的时候,我们就发现,数据变成了15个
是10呢还是15呢?
是刚才我们看错了还是幻觉?
老外称之为“幻想读” (phantom read)
那么如何防止这种事情发生呢
我们就需要对select操作所涉及的基数行都加锁,
这样,具有相同特征的数据加不进来了,简单来说,无法对相应的数据行做任何操作,除了select
这样的锁的范围的设定就是隔离级别

当然隔离级别有未提交读,游标稳定性,读稳定性,可重复读

这四种区别,分别表示了我们想得到的数据的稳定的区别
未提交读就是不对任何数据加锁,也就是数据锁的范围是0,我们可以读到别人没有提交和确认的数据
游标稳定性是只对我们当前处理的数据行加锁,这也是db2的默认隔离级别的
读稳定性是对我们取得的数据结果的行数加锁,
可重复读是最严格的加锁,我们在一个事务中的数据结果不能有任何的变化,这就需要对所有的数据行加锁

你读起来有点迷茫和难以理解
我试图将之生动,只是试图,因为我正在沈阳回北京的火车上,我一边思索一边眺望外面飞驰的景色


我想说的是,你们可以跳过这些难懂的定义
我要告诉你的是所有的定义都是为了满足我们的日常的人为需要而设定的
我们人的需要和欲望越简单,我们的产品就越简单
我们的需要和欲望越复杂,我们的产品和及其的概念和体系就越复杂
如果我们大家都能很老庄
目睹之便成景
耳闻之便成风
那么我们就不会有这样复杂的产品和社会规则

但是我们的欲望太多了
我们总想立刻达到一个地方去和我们相爱的人相见
这样就构成了我们复杂的交通系统和配套的售票安检和位置管理系统
我们总是想和人说话的时候就要说话
所以就构成了我们复杂的固定通话和移动通话系统
我们睹知道在这样的通信的行业他们的比如boss等系统是很复杂的

总是
这是个方便的时代
是个我们继续着我们欲望扩张的时代
在支撑着这样的一个社会现实的是我们为之骄傲的科学技术和迅速进步的产品



比如
为什么有未提交读隔离级别?
因为我们有时候只是需要简单大概粗略知道一个结果,比如航空公司的老板大约想知道今天上午大概卖出了多少机票,
而不在乎准确性,这个时候,未提交读隔离级别是最合适的,因为它既能满足我们的业务需要,又能允许最大的并发

所以我们发现
越精确
越昂贵

我们想取得越精确的数据
我们必然要牺牲其对其他的并发性
锁的级别和隔离级别的程度是最高的

很多银行为了做年终结算,那是需要数据一定准确的
在这个时候,他们往往都是直接发布:  quesiece database的命令
独占这个数据库
不准任何其他的任何访问


数据库也是在平衡
在各种用户的需求之间努力平衡
努力想出更好的办法来取悦用户
所以才有了锁,隔离级别等等功能组件的出现

原文链接: http://www.ituren.org.cn/html/jishusuibi/200809/03-122.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP