楼主: qiu_hong_yun

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

[复制链接]
论坛徽章:
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
11#
发表于 2016-10-26 12:57 | 只看该作者
本帖最后由 yulihua49 于 2016-10-26 13:16 编辑
atgc 发表于 2016-10-24 12:22
铁路(12306)是每张表一条记录?这样似乎问题简单一些
update的时候判断一下数量是否>=1,或者某个状态值
...

每个席位一个记录。大意(不是真的哦)
日期  车次 上车站  下车站   席别(铺别)  车厢号   座位号  状态    占用者  占用时间戳,等等。

状态有:-1   禁售,0未售,1占用,2售出等等。
后台有进程专门检查占用时间戳,超过一定时间就释放它。前台程序在最后要售出时发现占用者不是自己就必须夭折这个事务。
这就是12306订票,超过一定时间不付款作废的原理。

这个方法,在大并发条件下的效率肯定比计数器高。这是与IBM一帮专家进行长期争论的结果,适合中国国情。其他各国售票系统都是计数器式。
越南和中国是一样的。




使用道具 举报

回复
论坛徽章:
3
ITPUB15周年纪念
日期:2016-10-13 13:15:34秀才
日期:2017-03-20 13:42:20秀才
日期:2017-03-28 15:59:38
12#
发表于 2016-10-26 14:02 | 只看该作者
yulihua49 发表于 2016-10-26 12:57
每个席位一个记录。大意(不是真的哦)
日期  车次 上车站  下车站   席别(铺别)  车厢号   座位号   ...

这么清楚购票原理,怀疑你跟12306有关系呵呵,
如果有并发的好例子欢迎共享出来啊

使用道具 举报

回复
论坛徽章:
4
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34慢羊羊
日期:2015-03-04 14:19:442015年新春福章
日期:2015-03-06 11:57:31
13#
发表于 2016-10-26 14:33 | 只看该作者
yulihua49 发表于 2016-10-26 12:57
每个席位一个记录。大意(不是真的哦)
日期  车次 上车站  下车站   席别(铺别)  车厢号   座位号   ...

学习了。 不过,这会导致表特别大吧? 分库分表了?

使用道具 举报

回复
论坛徽章:
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
14#
发表于 2016-10-26 22:27 | 只看该作者
yulihua49 发表于 2016-10-26 12:57
每个席位一个记录。大意(不是真的哦)
日期  车次 上车站  下车站   席别(铺别)  车厢号   座位号   ...

我以前做过类似东西,但是我可不会搞一个后台程序来清除占用状态。

我的方法是设计一个类似于“占用失效时间”的列,如果这个时间小于当前时间,那么就相当于已经释放,并不需要另外一个程序来清除它。

使用道具 举报

回复
论坛徽章:
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
15#
发表于 2016-10-27 10:52 | 只看该作者
jxc_hn 发表于 2016-10-26 14:33
学习了。 不过,这会导致表特别大吧? 分库分表了?

对的,表很大,而且在铁总一个数据库。至于分不分表,多年来已经改变多次了。先前不分表,后来分表了,现在不知道。

使用道具 举报

回复
论坛徽章:
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
16#
发表于 2016-10-27 10:54 | 只看该作者
newkid 发表于 2016-10-26 22:27
我以前做过类似东西,但是我可不会搞一个后台程序来清除占用状态。

我的方法是设计一个类似于“占用失 ...

票在占用态,你不清除,票状态就不能改回未售态,好继续卖给别人啊,

使用道具 举报

回复
论坛徽章:
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
17#
发表于 2016-10-27 11:01 | 只看该作者
本帖最后由 yulihua49 于 2016-10-27 12:09 编辑
kelis2004 发表于 2016-10-26 14:02
这么清楚购票原理,怀疑你跟12306有关系呵呵,
如果有并发的好例子欢迎共享出来啊

1995年,铁路真正意义的计算机售票系统(之前有不少雏形系统),由北京地区开发并实施。此系统由我主持。
96年才有了铁道部的介入,由铁科院实施全路统一版本。真正统一的完成是在1998年12月。
他们完全参考了我的系统。至今,系统总的数据结构框架和主要处理流程没有改变(绝对是中国特色)。

实际你要找到所需的票有非常复杂的过程。(头像即是检索过程,好像只显示了一部分,我可是放了整张图上去的)
例如,北京-广州,你要武汉上车,你的上车日期比始发日期差一天,先必须找到车次的始发日期才能找到相应的票。
如果赶上调图期间,问题更复杂。我们必须找到高并发高竞争环境下,高效率的检索方法。
银行和电信,虽然是高并发,但不是高竞争。铁路是高竞争,一筐票来了,一百只手下去抓。不允许抓重,也不允许抓丢。



使用道具 举报

回复
论坛徽章:
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
18#
发表于 2016-10-27 22:22 | 只看该作者
yulihua49 发表于 2016-10-27 10:54
票在占用态,你不清除,票状态就不能改回未售态,好继续卖给别人啊,

你这思路未免太局限了吧?状态就一定要用一个状态列来表示吗?我用个 expiry_time<sysdate 作附加条件配合其它状态列,也可以表示一种未售状态。

写后台程序的弊端很多:状态修改不及时;增加系统负担;多一个依赖点;引入新的并发竞争。

使用道具 举报

回复
论坛徽章:
7
ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26现代
日期:2013-09-13 12:03:19优秀写手
日期:2014-03-25 05:59:50秀才
日期:2017-09-18 17:04:46蒙奇·D·路飞
日期:2018-09-10 10:43:30妮可·罗宾
日期:2018-12-20 17:00:02弗兰奇
日期:2020-03-28 20:32:37
19#
发表于 2016-10-28 11:59 | 只看该作者
支持newkid这种做法.

使用道具 举报

回复
论坛徽章:
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
20#
发表于 2016-10-28 15:18 | 只看该作者
本帖最后由 yulihua49 于 2016-10-28 15:29 编辑
newkid 发表于 2016-10-27 22:22
你这思路未免太局限了吧?状态就一定要用一个状态列来表示吗?我用个 expiry_time

那个状态还有别的用。expiry_time有时是空。感觉凭检索条件来代替状态不把牢。在大系统里,类似的功能会在多处出现,由不同的人开发,先前的人不在了,后来的人也在不断换代,这种不靠谱的事,给人家埋雷啊。
反正12306也是我那么干的。

使用道具 举报

回复

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

本版积分规则 发表回复

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