[讨论] 资料需要锁定并应付多个请求的作法

楼主: aoksc (重出江湖)   2016-09-30 00:18:08
请问各位
今天interview的时候有跟主管聊到以前的一个问题
就是某个流水号需要一次只能被一个请求读取
并且使用完要把最新的流水号更新回去
所以必须要用交易锁定
但主管有提到如果是大量的请求要读取要怎么做比较好呢?
这问题之前有跟朋友讨论过
结论是用queue
反正就排队一个一个来
但主管说叫我回去想想是否还有更好的作法
因为我也没遇过比较极端的情况
所以像这种需要频繁锁定资料表避免读取的话要怎么做才能效能太差的问题呢?
或是有哪些关键字可以寻找呢?
谢谢
作者: flowwinds (..)   2016-09-30 15:28:00
看不大懂..而虽然小弟不一定能回答 但建议可举个例
作者: iamnotfat (我不肥)   2016-09-30 16:58:00
数据库是用哪家的呢?
作者: longlongint (华哥尔)   2016-10-01 01:42:00
丢到云端上面跑吧 不过同步的问题还是无解通常会避免大家同时写入/读取同一个地方只要有"写入" 就一定要排队其实通常会有工具可以套 只是没用过不知道OTZ
作者: magus (Magus)   2016-10-06 01:44:00
'流水号增加到150的时候要update回原来字段'<=这段看不懂我的想法是用程式判断...
作者: AminLA (101)   2016-10-07 21:23:00
可以在update 时指定当初取得的序号例如 set seq=150 where seq=1 取得受影响的笔数就知道有没有成功,没成功的话就再次取得最新的序号 ,算出差值,下个update 帮原本已经写入的149 笔更新成新的序号,再下个update 更新当前的seq 反复这个过程直到成功 简单说就是 CAS
作者: iFEELing (ing)   2016-10-08 12:49:00
如果允许中间有空号就用SEQUENCE 没做完的就放弃如果一定要连号 本质上就是那个号码会被排斥性保护大概就是看能不能拆成分区段的几个小锁来分散....重点在你的需求是"不重复"还是"一定要连号"不重复的话好办 一定要连号就比较麻烦

Links booklink

Contact Us: admin [ a t ] ucptt.com