作者adrianshum (Alien)
看板Database
标题Re: [问题] DBMS支援的交易管理
时间Wed May 13 12:05:14 2009
※ 引述《yfmail (纯粹)》之铭言:
: 标题: [问题] DBMS支援的交易管理
: 时间: Mon May 11 19:48:43 2009
:
: 第一次接触database差点灭顶........怎麽那麽奥秘...泣~
:
: DAMS有支援交易管理
:
: 其中两个最重要的异动操作是 并行控制 跟 回复处理
:
: 我在念并行控制(concurrency control)时
:
: 有一小节是在谈排程(schedules)是否满足"可循序性(serializability)"
:
: 但即使我知道有回圈就不满足可循序性
:
: 可是它仍可用two-phase locking来使交易正确执行
:
: 问题一:那麽多个交易发生不可循序性时到底会怎麽样?
:
: 是会使交易结果错误吗?
:
: 我现在脑中的糨糊
:
: 1.交易是循序性(serial)时→免用锁定法→交易会正确无误
:
: 问题二:2.交易是可循序性时(serializability)→到底要不要用到锁定法.....
:
: 3.交易是不可循序性时→可以用二阶段锁定法→交易会正确无误(排除死结可能)
:
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 118.232.182.92
:
: 我刚刚灵光乍现发现一件事
:
: 好像只要符合可循序性,那再搭配锁定法,可以保证交易顺利执行完毕
:
: 但不可循序性,配上锁定法,有时交易可以执行,有时会有死结发生,这将
: 导致交易无法执行
:
: 以上的观念是对的吗?
: ※ 编辑: yfmail 来自: 118.232.182.92 (05/11 20:38)
: 推 adrianshum:2-phase commit 和 deadlock 是两回事吧? 05/11 21:23
: → yfmail:喔~我是看讲义写说基本型或严格型(strict)2-phase locking 05/11 22:37
: → yfmail:不保证不会有死结发生....我头..头...好昏... 05/11 22:42
: 推 AndCycle:而且理论跟实务的实做会有出入, 你两边都要看 05/12 03:34
: → yfmail:好~我两边都会注意 那...可循序性的目的到底是什麽 05/12 10:29
我一向处理 database 交易的做法 (应该也是最正常的做法)
我想就是你所谓的循序性吧?.
简而言之, 就是假设有一堆 resources 要占用 (table, rows,
whatsoever), 就大家都得依同样的顺序去取得使用权.
只要能做到这效果, 就不会有死结发生
假设 process 1 要 update table A, B, C
process 2 要 update table C, B
process 3 要 update table B, A
先定义好, A, B, C 的顺序是要 A->B->C
那麽 process 1 的 update 顺序要改为是 A, B, C
process 2 是 B, C
process 3 是 A, B
(不能改变里面的 update 顺序, 就在 procss 开始的
时候依次序先做好 table/row lock)
然後, 死结就不再出现了 :)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 202.155.236.82