基于Oracle高级复制的联网售票系统数据库设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
* 2006-12-06收到,2007-03-18改回
**李振宏,男,1972年生,讲师,硕士,研究方向:软件工程,图像处理与模式识别。
文章编号:1003-5850(2007)05-0062-03
基于Oracle 高级复制的联网售票系统数据库设计
Design of Online Booking System Database based on
Oracle Advanced Replication
李振宏
(南京信息工程大学 南京 210044)
【摘 要】概述了Oracle 高级复制技术,介绍了长途客运联网售票系统的功能需求与总体框架,介绍了Oracle 高级复制技术在联网售票系统中的应用,并对系统数据库中的存储过程设计进行了讨论,该系统已应用于实际联网售票,性能已达到用户要求。
【关键词】高级复制,实体化视图复制,联网售票系统
中图分类号:T P 311.13
文献标识码:A
ABSTRACT Or acle a dv anced r eplication and o nline boo king sy stem ar e intro duced in this paper.T he funct ion and the main fra me-wo rk o f a long-dist ance o nline boo king system are also intr oduced.And the desig n of sto red pr ocedure in databases o f this sy stem is also discussed .A nd this system has been ado pt ed in an actual online bo oking sy stem .KEYWORDS a dv anced replicatio n ,mater ialized visual replicatio n ,online bo oking system
联网售票系统往往涉及多个数据库,而且需要在数据库之间进行数据的同步,要求售票系统能够在较短时间内作出响应,因此对数据库管理系统的要求较高。
Oracle 作为应用范围较广的数据库管理系统之一,能够满足联网售票系统的性能要求。
为实现数据库之间数据的同步,可选择使用Ora-cle 提供的高级复制功能。
1 Oracle 复制技术概述
Oracle 复制可分为实体化视图复制与多主体复制,参与复制的可以是表、视图和存储过程等数据库对象[2]。
多主体复制支持全表在各个主体站点间的对称复制,允许所有主体站点对主表都有更新操作的权限。
任何一个主体站点上的复制表的更新都会被传播并被直接应用到其他所有主体站点的相应表。
一个主体站点出现问题,不会对其他主体站点之间变化的传播造成
影响。
多主体复制可以平衡负载、保护关键数据[1,4]。
实体化视图复制是在一个或多个实体化视图站点上创建主体站点中表的全部或部分副本。
实体化视图的刷新是按照一定的时间间隔或用户单独请求进行的。
多个实体化视图的刷新是在一个一致的事务中完成的,这就确保了数据和引用的完整性。
实体化视图复制启用本地访问,可降低响应时间并提高可用性,同时
也减轻了网络负载[1,3]。
2 系统需求与结构设计
某长途客运联网售票系统的功能需求如下:
¹系统需实现本地售票(包括单张和多张)和异地售票功能;º系统结构采用基于中间件的三层结构实现,客户端可为专用客户端软件或为浏览器;»系统由一个中心客运站和多个分客运站组成,中心客运站并不直接售票,售票由各个分客运站下属售票站完成,分客运站同时可作为售票站;¼票务数据在中心站和分站同时保存,且售票时中心客运站数据优先,只有中心站不连通时才使用本地数据。
3 系统实现
经过分析,整个售票系统的数据可分为两部分,即基本数据和票务及计划数据。
其中基本数据由各分客运站共享,而票务和计划数据则由各分售票站独立使用。
针对上述需求,进行如下设计:
¹在中心客运站和各个分客运站中安装Oracle 数据库,售票站通过售票客户端软件访问客运站数据库;
º基本数据在中心客运站生成,中心站作为主体站点,分客运站作为实体化视图站点,应用实体化视图复制技术将基本数据分发到各分客运站;
»票务和计划数据由各分客运站独立生成,为了提供系统的容错性和可靠性,将各客运站的票务和计划数据在中心站同时保存一份。
・62・(总352)
基于O ra cle 高级复制的联网售票系统数据库设计
2007年
3.1 实体化视图复制设置
为实现上述功能,需在中心客运站数据库中为每个分客运站数据库创建数据库链接并指向分客运站数据库,以实现基本数据的分发。
¹设置主体站点。
系统中应将中心客运站设置为主体站点。
建立主体站点时需要创建一个Oracle复制管理员用户,专门负责维护Oracle数据复制问题。
º设置实体化视图站点。
系统中所有分客运站都作为实体化视图站点。
设置实体化视图站点主要包括建立实体化视图组和刷新组,建立实体化视图组的目的是指定实体化视图站点能够从主体站点获取的数据,建立刷新组则指定需要刷新的实体化视图并设置刷新频率等内容。
为建立实体化视图站点,也需要在各分客运站建立数据库链接并指向中心客运站。
3.2 分客运站数据与中心客运站数据的同时生成
由于中心客运站数据库需要同时保存各分客运站的票务和计划数据,而各分客运站只保留本站的票务和计划数据,因此使用分布式事务完成此功能。
分客运站计划生成和票务处理业务逻辑主要通过存储过程实现。
为使中心客运站和分客运站数据库中同时生成票务和计划数据,在中心客运站和分客运站数据库中分别设计实现类似功能的存储过程,然后在分客运站的存储过程中调用中心存储过程,从而完成分客运站与中心客运站计划和票务数据的同时生成。
4 售票存储过程设计中的问题分析与讨论
4.1 远程存储过程中结果集数据的返回
由于系统中主要业务逻辑通过存储过程完成,因此系统的执行效率和响应时间能够得到保证。
售票系统中存在本地售票和异地售票两种售票模式,其实现过程是不同的。
本地售票的存储过程
其处理逻辑如图1,异地售
票存储过程处理流程如图2
所示。
为了能够实现异地售
票,需要由远程存储过程返
回结果集数据给本地存储过
程,而Or acle是不能直接通
过远程存储过程返回结果集
数据的,即使使用包也不能
完成此功能,因此笔者选择
了基于事务的临时表进行实现,过程如下:
¹在本地数据库中创建临时表;º在远程存储过程中向本地数据库中的临时表插入数据;»在本地数据库中通过游标返回给前台客户端进行处理。
4.2 售多张票的的存储过程实现
实现售票时,整个售票
过程是通过修改座位数据的
状态来实现的,具体分3个
步骤:
¹查询满足条件的车次
余票信息并加T X锁;
º修改座位数据的状态
为待售;
»若用户交款,则修改
车票状态标志为已售,否则
恢复车票状态为可售;
在查询余票信息时,需
完成如下功能,其他用户已
加锁数据不应出现在查询结
果中,且此用户的加锁不应
影响其他用户售票。
为此,在
实现第一步时应使用SE-
LECT FOR UPDAT E语句进行查询,同时使用NOWAIT关键字和SKIP LOCKED关键字。
此时对满足条件的车票数据已经加了行级排它锁,即T X锁。
格式如下:
SELECT*FROM座位表
FOR U PDAT E
WHERE条件NOW AIT SKIP LOCKED
需注意,上一步的加锁修改座位数据的状态为待售时要求加锁的满足要求的最前面的几条记录,即要实现类似于SQL Serv er数据库中T op关键字实现的功能,由于Oracle并不直接支持选取满足条件的前几条记录的功能,所以笔者采用了如下方法实现上述功能。
¹使用动态游标返回满足条件的所有记录,为了避免出现死锁和读脏数据等错误情况出现,首先对满足条件的所有数据加锁,游标使用的查询语句如上例,即:
OPEN游标变量FOR
SELECT*FROM座位表
FOR U PDAT E
WHERE条件NOW AIT SKIP LOCKED;
º利用游标循环,依次读取最前面若干条记录,并修改座位状态字段的状态为待售,游标循环次数为指定售票数,即:
LOOP
FET CH游标变量
INT O输出变量列表;
利用输出变量数据生成票务数据和已修改记录临时表;(下转第66页)
・
63
・
第20卷 第5期电脑开发与应用(总353)
具有最精确预测能力的决策树被选为最终的决策树。
在这一步中,既可以使用独立的剪枝集,也可以使用交叉验证的方法来评估树的预测能力。
ºCritical-value pruning(CVP)剪枝算法
CVP剪枝算法也是一种自下而上剪枝法,利用树生长过程中收集的信息对决策树进行剪枝。
在自上而下构造决策树的过程中,决策树生成算法递归调用选择标准将训练数据划分成越来越小和越来越纯的子集。
在每个节点上,选择使得某分割标准(例如,信息增益法)值最大的分割来划分数据。
CVP剪枝法就利用这个值来做出剪枝决定,当考虑剪枝某子树时,把在相应节点上的分割标准的值与一固定的阈值进行比较,如果前者太小,则剪枝子树。
但是,只有当子树的下属所有子树的值都不大于阈值时,方可进行剪枝。
剪枝的过程分两步:¹根据不同的阈值得到一系列的剪枝树;º评估得到的剪枝树的性能和预测能力,从中选择一个最优树。
可看出,CVP剪枝法不仅依赖于阈值,在很大程度上还依赖于分割标准预测子树的归纳特性的能力,大的阈值对应着更多的剪枝,但是,阈值的选择与相应的领域有关。
CVP剪枝的优点在于直接利用决策树生长过程中收集的信息,不需要单独的剪枝集,从而减少了计算复杂度。
但是在预剪枝中选择测试属性的标准和是否停止扩张决策树的标准相同的时候存在问题,如果将这些选择的标准用在叶节点,则进行判断的时候也是存在问题的,因为这些标准大都是与训练实例集的大小有关的,还有另外的问题就是说在相同标准下,可能当前的扩张不能满足要求,但是更进一步的扩张能满足要求,而预剪枝将会因为过早停止决策树的构造导致很大的误差,后剪枝将克服这些缺点,但是由于预剪枝不必生成整棵决策树使得其算法效率很高,适合解决大规模问题,而后剪枝的另外一个优点就是它能产生一组而不是一棵决策树,使得专家有可能在其中作出自己的选择而不是由计算机武断地作出选择。
4 总 结
基于决策树的学习算法是具有建立速度快,精度高,可以生成可理解的规则,计算量不是很大,可以处理连续值和离散值属性、可以清晰显示哪些属性比较重要,但决策树技术是一种“贪心”搜索,使用决策树方法时,还会遇到一些数据准备和数据表示方面的问题,如:不了解数据细节、数据翻译不准确、不考虑字段间关系、数据表示需要加额外的数据、数据噪音消除、欺骗性数据等,这些均会影响到最终生成决策树和规则提取准确性和实用性,也就是说其应用范围是有一定的局限性的,总之决策树算法理论在实际应用中还有很多课题有待于更进一步的研究。
参考文献
[1]王名扬.基于数据挖掘的决策树生成与剪枝方法[J].
计算机工程与科学,2005(11):19-20.
[2]杨 清.基于决策树的学习算法[J].湘潭师范学院学
报,2005(3):24-25.
[3]滕 皓.改进决策树的研究[J].济南大学学报,2004
(5):13-15.
(上接第63页)
EXIT WHEN循环变量值小于指定售票数
END LOOP;
»利用上一步的临时表,修改座位状态为待售;
此时,一定要提交修改,即运行提交命令,否则此时某一售票客户端将锁死全部满足条件数据,导致其他用户不能销售相同要求车票。
¼到上一步为止,用户还未交票款,此时若用户放弃售票,则需将先前修改恢复到最初值,否则将座位数据修改为已售。
5 结束语
Oracle高级复制既可以使用脚本来实现,也可以使用图形界面的复制管理工具建立。
不管采用哪种方式,都需要深刻理解Oracle数据复制机制,才能更好地实现分布式计算。
设计和实现一个分布式数据库系统特别是基于复制的分布式数据库系统是一项十分复杂的工作,在具体的工程实践中进行方案设计时要在网络连接方式、系统性能、安全性、可维护性及数据的一致性和完整性等多方面进行精心的考虑和设计。
本文提出的设计方案已应用于实际的售票系统中,经实践证明是切实可行的。
参考文献
[1]徐秀华,文必龙,毕硕本.Or acle9i高级复制技术及其
应用[J].计算机应用研究,2003(11):107-109.
[2]葛卫民,张 钢,舒炎泰.基于O racle高级复制的分布
式数据库系统应用研究[J].计算机工程与应用,2003
(21):186-191.
[3]姚文琳,王存刚,刘世栋等.基于O r acle的分布式数据
库设计与技术[J].计算机工程,2006,10(32):89-91. [4]张文东,侯飞,雷鸣.快照复制技术在分布式环境中的
应用[J].微计算机应用,2006,4(27):510-512.
・
66
・(总356)基于数据挖掘的决策树方法分析2007年 。