楼主: qiu_hong_yun

关于oracle 11g处理并发。麻烦各位提个方法

[复制链接]
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
31#
发表于 2017-7-6 22:36 | 只看该作者
sxq129601 发表于 2017-7-6 15:34
我在处理类似的购票问题,就是有张cache表,点击购票时先插入到cache表,同时减去原表的票数,如果用户取消 ...

你这样搬来搬去更没必要,而且丝毫不能解决并发的问题,你要怎么防止两个会话同时把同一张票搬到CACHE表里面去?

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
32#
发表于 2017-7-13 19:34 | 只看该作者
sxq129601 发表于 2017-7-6 15:34
我在处理类似的购票问题,就是有张cache表,点击购票时先插入到cache表,同时减去原表的票数,如果用户取消 ...

当采用非号码制这样是可以的。如果对号入座,你不把指定座位号锁起来,不怕别人抢走?在选定座位还没付款期间。

使用道具 举报

回复
论坛徽章:
5
2014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02优秀写手
日期:2014-10-22 06:00:13秀才
日期:2016-12-21 16:55:07秀才
日期:2017-08-18 11:06:45
33#
发表于 2017-7-14 16:29 | 只看该作者
newkid 发表于 2017-7-6 22:36
你这样搬来搬去更没必要,而且丝毫不能解决并发的问题,你要怎么防止两个会话同时把同一张票搬到CACHE表 ...

这种是有必要的,因为存在用户购票到付款之前存在很长的间隔,并且还存在超期未付款的情况,有了CACHE表,我就可以建个JOB定时去扫超过时间未付款的数据,累加回原表票数。确实可能存在两个会话搬到CACHE表情况,但这种概率不大,在付款时再次校验下就行。

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
34#
发表于 2017-7-14 22:49 | 只看该作者
sxq129601 发表于 2017-7-14 16:29
这种是有必要的,因为存在用户购票到付款之前存在很长的间隔,并且还存在超期未付款的情况,有了CACHE表 ...

你没看前面讨论吗?只需要在原表上设计状态列以及加锁失效时间,就可以解决你的问题,而且利用ORACLE的行锁机制,万无一失。注意我说的并不是长时间持有一个锁,而是打上临时占用标记、失效时间后马上就解锁了,这样别人并不会受阻塞,看到临时被加锁的行也可以跳过,如果锁已经失效则认为可用。

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
35#
发表于 2017-7-16 09:20 | 只看该作者
newkid 发表于 2017-7-14 22:49
你没看前面讨论吗?只需要在原表上设计状态列以及加锁失效时间,就可以解决你的问题,而且利用ORACLE的行 ...

对,就是“乐观锁”的一种实现方法。

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
36#
发表于 2025-9-13 11:10 | 只看该作者
顶一下

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
37#
发表于 2025-9-16 20:40 | 只看该作者
本帖最后由 yulihua49 于 2025-9-16 20:43 编辑
sxq129601 发表于 2017-7-6 15:34
我在处理类似的购票问题,就是有张cache表,点击购票时先插入到cache表,同时减去原表的票数,如果用户取消 ...

你这个办法也行。但是也得加锁,把指定记录从原表删除之前也是需要加锁的。可以避免多于一个人搬同一张票的问题。
从Cache表里删除也是一样的。感觉开销比较大。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表