一个关于数据库的并发问题(40分)

  • 主题发起人 主题发起人 sunny_ok
  • 开始时间 开始时间
S

sunny_ok

Unregistered / Unconfirmed
GUEST, unregistred user!
DELPHI的TABLE控件和QUERY控件,
在并发控制时,锁的粒度有何不同?
有何具体的区别?请详细告知,多谢!!
 
他们锁相同,他只是个数据集组件,无所谓锁,设置锁应该在数据库组件database,不过在开发时,
大型数据库或多层数据库一般采用query,因为他有缓冲机制,小型数据库或本地数据库采用table,
但table再多层数据库有时也采用,比如在lookup字段时,可采用他作为源组件,提高查询速度!!
!,有什末问题可尽管问?
加分吧!!!
 
Ttable和TQuery通过bde对数据库进行访问。
它们无法控制锁的颗粒,也不能进行并发控制。

所谓并发控制要不就是利用编程技巧对本地数据库进行并发操作;
要不就是完全由后台数据库处理,这与程序员基本无关,属dba的职责。
锁的颗粒越小,数据库的并发程度越高,
但颗粒越小,数据库的开销也会越大,效率不一定高,颗粒大小的配置也属dba的职责。

 
amo:
怎样利用编程技巧对数据库进行并发操作呢?
 
它们区别非常大~~特别是在锁和并发控制方面(我是指在大型数据库中)
下面以SQLServer为例讲用这两个控件的区别:
要谈它们的区别首先要理解SQLServer的工作原理,SQLServer的锁一般分为三级,行级
页级与表级,这三级之间的切换是透明的(也就是说前台不可控制的),但是,只要了解
了SQLServer的加锁规则及其升级规则,就可以影响它,这就是用TQuery还是用TTable的
区别了。
一般SQLServer优先选择行级锁,因为其代价最小,但是,如果它觉得用页级锁会增加某
个操作的执行速度,就会升级,同理,也可以升级到表级锁。
那么,TTable是什么工作原理呢?它在实际取数据时,类似于TTQuery中执行
Select * from Table1
一般情况下SQLServer不会将其理解为对整个表进行操作的,但是,这样的语句,有很大的
可能会引起SQLServer的误会,认为页锁或是整个表的锁更有效率,所以,它会升级到页锁
甚至表锁(这点在SQLSErver6.5中概率非常大,这是实践中的教训)
而且用TTable没有办法对于索引的利用效率也比较低,如果表中有多个索引的话这个缺点就
更明显。
而用TQuery就没有这样的麻烦。
因为用SQL语句构造的数据集是按需分配的,也就是说,减少了SQLServer误会的可能。
再有,用TQuery可以返回用存储过程中建立的数据集,
当然,它可以充分利用索引。效率更高

 
TTable是表锁,将整张表锁定
TQuery则根据提交的SQL语句来决定锁的类型
 
多人接受答案了。
 
后退
顶部