请问都怎么解决数据更新并发(Concurrency)的问题?
一般来说,对更新并发有两种策略(参考http://www.internet.com/icom_cgi/print/print.cgi?url=http://www.15seconds.com/issue/030604.htm):乐观的,或者悲观的。
乐观的,就是直到更新的那一刻,才比较要更新的部分是否有人在上次我的读取之后有更改,这样,需要把DataSet保存起来,或者在Session中,或者在ViewState里,总之都很麻烦——如果DataSet很大呢?
悲观的,就是在读取的时候就锁定,这又分为两种,一种是利用数据库的功能,一种是用程序。
在http://www.15seconds.com/issue/030604.htm中,作者给出的“悲观策略”中用程序实现锁定的部分,实现它需要在数据库中定义一个“锁定数据表”,或者把想要锁定的表加上“锁定标记列”。考虑到,B/S的程序,很容易锁定完了就结束了,中途退出或者断线,这样做值得吗?出了问题,是不是还要Administrator一个一个去解锁?
我想问的是
一、对于乐观策略,如果DataSet很大呢?这方面大家有什么建议呢?谢谢。
二、对于悲观策略,程序实现锁定的部分,请问,是不是可以考虑采用Singleton的做法呢?Singleton保证了资源的独占。我不清楚的事,一旦用户断线或者非正常退出,Singleton对象是不是会像Session对象一样被自动回收(GC)呢?如果这样,岂不是就解决了“死锁”的问题,不需要超级用户去一个个解锁了?
不好意思,菜鸟,很多概念很模糊,请高手指点!