




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要随着全球一体化和经济全球化快速发展,金融市场风险呈现出多样性和复杂性,特别在2008年由美国引发金融危机后,金融业面临着前所未有风险和隐患,金融市场风险管理重要性也愈加突出。在国际上,许多大型企业、金融机构,各国政府以及金融监管部门在积极寻求金融风险管理技术和方法,以对金融风险进行有效识别、精确度量和严格控制论文首先介绍金融市场发展背景以及潜在风险,对银行保证金风险管理系统现状以及业务需求不断变化给系统带来挑战,明确基于数据库双引擎的线程池架构设计银行保证金风险管理系统必要性。在此基础上讨论银行保证金风险管理系统交易数据收集,业务处理和报表服务主要功能,分析交易数据收集存储、风险估值计算信息推送和结果处理等核心业务流程,然后分析系统整体架构,对交易数据收集存储、风险估值计算信息推送和结果处理等核心模块详细设计,重点讨论交易数据收集存储模块如何用OracleObject实现数据存储查询和用Cassandra实现系统数据共享,利用多线程技术提高运行速度及JavaAnnotation实现可配置业务逻辑,对系统风险运算和结果处理等业务提供及时有效支持,并和同类系统作对比说明系统特点。最后对系统的稳定性、扩展性及投资效益简单分析和展望绪论随着国际经济快速发展,各大金融机构为了谋取更大利益,不断进行金融创新,使市场上金融产品越来越多,金融交易也越来越频繁。但如何对这些数量和资金庞大交易进行适当风险管理,也变得更加重要,特别在金融危机后,各个金融机构对于风险控制管理投入了更大资金和人力,监控其风险承受能力。由此可见,金融机构在其结构化的标准配置中,将必不可少的包含风险管理系统,并且风险管理系统将占据非常重要的地位1.1背景目前,各国间的经济来往越发紧密,依存度逐步加深,各国之间的合作越来越多,经济发展向全球化过渡。一方面因为世界贸易越来越多,其增长速度远远超过了世界生产的速度;另一方面\o"跨国公司"跨国公司的全球化的战略布局和快速发展,需要大量的资金在全球进行流通,从而促进跨国金融机构的战略布局和其迅猛发展,例如跨国银行,基金,信贷公司。正是因为跨国金融机构的全球化,满足了跨国公司资金需求,相应也使金融机构可从国际金融市场中取得\o"资金"资金和在各国金融市场之间从事套利套汇活动为了攫取更多市场利润,满足不断增长的生存需求,西方发达国家依靠其长期发展的金融体系,对其金融机构开展金融创新。所谓金融创新,顾名思义就是为攫取更多利润,对市场进行改革,打乱市场中各金融要素的内在联系,重新排列组合,建立新市场秩序。金融创新简单之就是金融要素之间重新排列组合,将原先的金融产品重新修饰包装成新产品,就拿金融衍生品来说,就是都要归功于金融创新。金融创新作为一种新的攫取利润的手段,有着巨大利益空间,逐步被金融机构认可和采用,成为其主要发展手段。金融机构对于金融创新的狂热,催生出各式各样、形形色色的金融衍生产品,人们惊奇的发现,在其出现至今短短20—30年间,这些因金融创新而缔造的衍生品,迸发了旺盛的生命力,它给人们带来利润的同时,也表现出惊人的破坏力[1],2008年金融危机就是个很好的例子,若我们将其前因后果细细分析,其实质上就是由金融创新引发同时,随着科技力量快速发展及推广运用,互联网的崛起和发展,人类在计算机技术和通信技术方面取得的成绩用日新月异来形容毫不为过。从技术上讲,新技术应用,减少了全球各国金融市场互相通信的阻隔和障碍,让全球资金真正流动起来,也让经济金融实现全球自由化成为可能。人类可以通过人造通讯卫星,计算机,甚至智能手机实时的进行全球通信,信息的交流,从而实现金融市场上资金以可靠安全的方式进行着全球快速转移,极大程度上促进了金融的全球化综上所述,像商业银行,基金公司,投资公司,保险公司等全球各金融机构,为了达到在全球范围扩张实现金融全球化的目的,在全球各国各地区创建分支机构,创造了一次革命性变革,完成了其全球范围内,业务网络布局以及战略部署,也使金融资本实现全球化,从而形成国际新兴金融市场,并逐步推广至全球各国各地区,一举打破原有金融市场体系架构,并且借助信息技术和互联网这两项关键技术,在金融资本全球化基础上更进一步,实现了全球金融一体事情总有两面,人们在看到全球金融一体化让交易更便利的同时可能忽略了即将带来的危机。全球各金融机构面对日益巨大而复杂交易活动和资金流动,表现得越发力不从心,其对该类活动无法有效进行控制和协调,与此同时国际上出现越来越多金融炒作,不但没把国际金融市场拉回正规,反而将其推向深渊。因为金融市场传播敏感和扩大的特性,一个市场变化往往会很快传递到另一市场,就如同多米诺骨牌,会引起一系列变化,甚至会放大变化,接着会传递到另一地区,如病毒般在全球蔓延,形成一个连锁反应。正因为市场这个特性,使金融市场变得更加琢磨不定,更复杂和多样性。结果就是金融风险发生可能性也变更高,从世界范围看,金融市场大踏步向前迈进,国际化和一体化趋势越发明显,如此一来进一步推动了风险升级,由此金融衍生产品引发了一系列大事件,其中包括著名的美国垃圾债券市场事件,几乎摧毁整个亚洲体系的金融风暴等,再加上金融创新利用各种手段(如套期保值、以小搏大)来节约成本,想方设法使风险对产品的影响降到最低,都使得金融衍生产品雪上加霜,人们逐渐对其失去了信心,也开始觉醒真正使得人们意识到加强金融风险鉴别重要性以及高度重视风险管控必要性,是2008年“次贷危机”掀起的震惊全球的金融危机,但是直至今日“次贷”余波仍未完全歇止。特别是商业投资银行作为专门经营货币的特殊企业,具有高负债性和高外部性的特点,使其不仅追逐收益性,也必须关注安全性和流动性。我们从银行的本质上看,它其实是经营风险的企业,而主要依靠的手段就是管理货币,管理过程中无法避免的会遇到风险,因此银行在长久持续关注风险的同时更应该掌握如何管控风险。就拿全球卓越的金融机构——花旗集团来说,该集团前董事长沃尔特·瑞斯顿曾经谈到过:每个人从出生至死亡的一切,其实就是对于管理的风险,而并非去完全规避风险。风险管理的基本定义就是在设定的风险等级下,达到保证收益最大化的最终目的,也就是说在保证风险及收益相匹配前提下,金融机构在承担相应风险情况下依靠金融产品所攫取的收益,除去所有因风险而产生的成本后所得收益,这被视为银行风险管理的核心[2]上世纪90年代,风险价值(Value-at-Risk,简称VaR)开始在华尔街风行,成为风险管理的新标杆,此后被日益广泛应用,并确立了其“正统”地位。在金融界,测量市场风险的方法多种多样,据不完全统计,大多数金融机构主要采用度量\o"市场风险"市场风险的VaR(ValueatRisk:风险价值)方法。全球各大金融机构把所持资产的VaR风险值看得非常重要,会将其显示在定期发布的\o"会计报表"会计报表中的醒目位置。初步理解为:某种金融资产或者是\o"证券组合"证券组合价值,受到金融市场常规因素影响发生改变后,产生最大可能的损失。进一步理解,即某种金融资产或者是证券组合价值,在设定的置信度前提条件下,在将来某段认可的时间范围内,该价值最大可能的损失。相比较传统的风险定量化工具,VaR方法的优势在于其不仅能处理市场非线性波动,而且很好的概括了证券组合的市场风险,该方法克服了以往方法的不足,更助于测定并量化风险,是现代金融界风险管理的基石[3]结算中心CCP(CentralCounterparty)的风险管理。结算中心为市场的参与者减低信贷风险发挥了重要作用。对于买卖衍生工具的交易,结算中心通常是市场基础设施的核心部分,在场外交易市场,正发挥着越来越重要的作用。为了减少交易对手违约的风险,并保证,如果违约确实发生,可以使得损失最小,从而提供了各种风险管理保障[4]。在保障中,交易对手方在交易前缴纳的保证金(称为初始保证金),通常被认为是最基本保护,初始保证金是交易员在CCP上注册头寸后提供的资金,通常存放在投资者的结算账户中,其目的是用来抵御投资者持仓的市场风险。基于市场的变动,为了防止保证金逐渐侵蚀,交易员的头寸每天紧盯市场,同时如果发现结算账户不能满足最低的初始保证金,那么投资者就会被要求追加保证金用来补充帐户,以覆盖市场风险基于保证金的压力测试(StressMargintesting),实质上就是银行开展的一次模拟考试,也就是说压力测试是在金融工具或金融机构的资产负债表基础上分析或设计出一系列情景,模拟在某些特定情况甚至金融崩溃的情景下,用来展现出其应变经济危机的能力。上世纪九十年代初,国际大型银行开始内部组织开展该类“模拟考试”。在1996年,“巴塞尔资本协定”进行了修订,以要求银行和投资公司进行压力测试,以确定其能力,来应对市场的突发事件。然而直到2007年,压力测试仅仅只是一种银行自己内部自我评估的手段。但从2007年开始,政府监管机构开始对金融机构进行的压力测试,以确保金融机构可以有效运作。从那以后,在不同的国家或地区的金融监管,定期进行压力测试,确保在其管辖下的金融机构,银行可以正常运作,尽可能避免会出现的负面结果。2012年10月,美国监管机构推出了新的规则,扩大这种做法,要求美国最大的银行进行压力测试,每年两次,从该事例我们可以看出,压力测试已成为金融机构,特别是对于在国际上具备一定规模的商业银行来说是必备的手段[5]由此可见,风险价值、结算中心保证金的计算及压力测试将会是金融风险管理里重要的组成部分。随着全球金融一体化程度的深入,机构投资者们越来越重视风险,如何加强风险防控已被广泛认可是金融领域里重要的一门课程。因此,金融风险管理系统可以在一定程度上帮助金融机构,乃至政府及时了解自己的风险所在,规避风险,对当今金融体系有着前所未有的极为重要的现实意义。以目前金融市场上比较热门的风险管理为背景,就笔者在开发过程中实际使用的风险度量方法为前提,也就是上述提及的三种度量方法,介绍和分析实现银行保证金风险管理系统的开发过程1.2意义随着金融机构之间日益激烈的竞争以及为了谋求生存的金融创新,金融风险管理已成为各个金融机构重中之重。特别是在次贷危机引发全球经济大萧条之后,金融机构投资者更加清楚的明白金融风险管理非常重要,直接关系到其生死存亡。相应的金融机构的客户,一般会是对冲基金和一些大型的企业或政府,也意识到控制其风险的重要性,需要金融机构推出一个平台可以支持各类度量方法,使其可以监控自己的风险。同时因为金融危机的洗礼,美国政府出台了一系列法规,例如要求金融机构每年提交其公司的压力测试报表,从而达到风险控制的目的。而金融机构为了遵循这些法规,必须有能力评估其所持有的金融产品的风险。因此,风险管理系统成为了各大金融机构必须实现和使用的平台。一般而言,引发风险的原因主要可归纳为操作诱因、市场诱因以及信用诱因。由操作原因诱发的风险,大部分是在交易过程中由专职员工或者编码执行中产生错误诱发的,该原因一般可避免;由市场原因诱发的风险,起主要作用的是市场主体的不确定性及多变性,这也是由主体本身组成成分决定,无法规避;由信用原因诱发的风险,主要是由于交易对方的信用评级,潜在破产的一种可能性的高和低。银行保证金风险管理系统仅仅是针对信用风险的管理,而其中保证金的风险(MarginRisk)的管理对于金融机构本身或者外部客户而言,都是至关重要的。为了对冲因反向价格运动诱发的亏损,金融机构要求客户在购买其产品时,必须预存一定量的抵押资金,该部分资金被称为保证金。保证金可以是现金或者其他的可交易的金融资产,通常情况下指可交易的金融产品,如衍生品,债券[6]。基于上述原理,针对保证金的金融产品风险管理系统可以带来以下好处从企业内部来看,基于保证金的动态投资组合可以鼓励客户巩固与公司对冲,提高信用风险状况。赢得公司客户的信赖,同时依靠客户一传十十传百,吸引更多客户购买产品。集中化的管理模式可以提高公司运营效率和降低运营成本。可以满足政府的要求从企业外部的客户来说,方便客户了解其整体或投资组合的风险状况。可以事前计算,降低市场风险。通过向公司计入抵押品以抵消损失部分。方便客户能够及时了解其产品组合对整个资产的变化,并更好地管理投资组合风险和流动性文中通过实际的来自于国外领先金融机构的金融保证金风险管理系统的开发经验,介绍一些系统中使用的技术及其开发方法,从而为以后更为复杂的金融风险管理提供了一个经验和参考,更为中国或者一些发展中国家的金融机构提供一个可行的风险管理系统的样本1.3内容本文首先介绍了论文研究方向的宏观背景,进而提出构建银行保证金风险管理系统实现意义。在技术选择上综合考虑了系统的特点和实际业务需求,选择EXTJS作为客户端开发语言,JAVA作为后台开发语言,Oracle和Cassandra作为双数据库引擎,充分利用Java多线程的新特性,提高系统的效率,使用JavaAnnotation实现部分业务逻辑的配置化,提高开发效率,设计开发了一套符合需求变化的系统。论文重点分析和设计了交易数据收集存储、风险估值计算模块,从而克服了现有系统的不足同时满足未来业务的新需求的扩张要求本文详细分析了本文系统中使用的关键技术,从而构造出一个可扩展,灵活的系统。通过采用基于OracleObject,Cassandra,多线程,JavaAnnotation开发的银行保证金风险管理系统,大幅度地提高了系统的性能,构造出可重用的、结构模块化,低耦合,高效率的应用系统在介绍了关键技术的基础上,本文根据现有系统的模块高耦合,性能效率低下,模块扩展性差的情况下,讨论了系统的业务需求,并采用文中介绍的关键技术,分析了模块的设计和优化,符合企业应用及满足未来系统扩展的需要然后分析银行保证金风险管理系统的架构,提出了系统的用户需求,对系统的核心业务流程交易数据收集存储、风险估值计算进行了重点分析,根据需求和现有系统的不足之初,对两个核心模块式进行详细设计优化最后对改造后系统与同类系统做了比较分析,分析了系统的主要的创新点及论文的主要工作成果,对系统的不足之处给出了改进方案1.4结构一章对论文研究方向的宏观背景做概要性的阐述,介绍了目前金融市场的发展背景以及潜在的风险,给出实现金融产品资产风险管理系统的必要性和意义,明确课题研究领域的意义以及带来的好处,进一步简述论文的主要相关内容,突出了本文的现实意义二章介绍了系统的主要业务背景和利用的主要开发技术,说明了使用这些技术的优势以及给系统带来的好处。说明了银行保证金风险管理系统采用的关键技术及实现的技术路线三章在第二章详细了解系统核心技术的基础上,剖析了系统实际需求,探讨了系统的主要架构,对每个模块进行了简单描述,着重对系统的核心业务流程交易数据处理、风险估值计算进行了深入剖析,并探讨如何实现高效率的业务流程四章针对系统需求分析阐述了系统体系结构,给出了如何利用关键技术OracleObject,Cassandra,多线程和JavaAnnotation实现优化系统的关键流程,数据收集存储模块和风险估值计算模块,重点对使用Cassandra缓存策略对系统的架构和响应速度进行优化,使用OracleObject对系统的数据库存储性能优化以及校验模块中构思、开发展开分析论述。最后将本系统与相似产品进行类比,浅析其优缺点及运行效果五章针对实现的系统做出总体经验性总结,并做出后续展望,分析了本文亮点,阐述了本文所获得的些许成绩,并针对本文缺陷提出进一步优化的设想,最后指明了将来努力方向第22.1介绍随着世界经济一体化的快速发展,给金融市场带来了更多的变数,其所承担的风险也相应变得多样和复杂,特别是在2008年由美国房地产引发的金融危机后,金融业面临着前所未有的风险和隐患,金融机构越来越看重其运营的风险的监控和管理。因为不同的套利机会,金融机构每天交易着大量的不同金融产品,而交易的产品的不同,头寸结算也会在不同的系统中进行,那么对于一个金融公司很难轻易的对一个客户所持有的金融产品组合进行快速风险估算,造成了风险管理的困难。而且因为交易系统的不同,当市场风险发生变化后,金融机构会要求客户为其所交易的某些金融产品追加相应的保证金,用来覆盖市场风险,这样就增加了客户资金数量和流动性的要求银行金融产品保证金风险管理系统(跨产品保证金(CrossProductMargin)银行平台)是基于金融风险管理的理念(后文将使用简称银行保证金风险管理系统),不仅给公司内部提供不同的风险度量方法,同时在全球范围内为机构客户,对冲基金在所有市场提供了增强的服务。银行保证金风险管理系统在金融风险管理中起着至关重要的作用,在优化客户资产负债表的同时,通过降低对抵押品的要求,一方面降低了客户的准入门槛,可获得与此时风险价值相等价的报酬,让客户得到实惠,另一方面也起到保护公司现有资产目的。它可以收集不同系统中的不同金融产品的交易和风险值,从粗粒度来看,展现整个公司层面的风险估值,同时也可以从细粒度的展示每一笔交易背后的风险估值,给客户和公司内部提供了跨产品的风险管理的服务,相应的,由于不同金融产品的风险估值已经集成于跨产品的平台中,对于客户来说,不必在不同系统中为每一笔交易交付保证金,只需在基于银行保证金风险管理系统的估值交付一次,从而减少了客户的资金流动的压力2.2技术2.2.1OracleObjectOracleObject对象类型是Oracle数据库提供的用户定义的类型,是采用面向对象的理念,创建出能够模拟真实世界的实体,就如同Java对象一样。OracleObject技术是Oracle关系型技术的一种抽象。新的OracleObject对象类型可以被任何内置的数据库类型和任何先前创建的对象类型,对象引用和集合类型中创建出来。Oracle数据库的Schema内存储了OracleObject类型的元数据,该类型是用户根据实际需求,在编写代码时自定义的,同时该类型可以被SQL,PL/SQL,Java中和其他接口访问到
OracleObject对象类型及面向对象设计模块,给用户带来更多便捷,用户可利用该类型和模块,轻而易举地访问数据库,从中编译或查询到所需要的数据。从内部机制来说,虽然数据依然被保存在列和数据表中,但是却提供了能够与类似真实世界的实体对象进行交互,使数据的可读性更强,数据显得更有含义,而不是必须使用SQL语句对数据表进行查询,然而数据可能仅仅是一个实体的一部分,然后还需要一张张的表继续更深层的查询。我们采用OracleObject对象类型可以轻易得到一个需要囊括所有有关元素的实体对象进行编译OracleObject编译时,在系统和数据库之间建立了一座桥梁,这座桥梁就是面向对象,在两者进行交互时,并不像我们想象的那样摈弃了经典的操作方式,它仅仅换了一种思维方式,这样就使编译变得快速而高效[7]在一般情况下,OracleObject对象类型模型类似JavaPOJO机制,这样对象就可以轻易的模拟复杂的现实世界中的业务和逻辑实体,同时由于面向对象的设计理念,可以更好的利用对象可重用性,继承关系,能够更快,更有效地开发数据库应用程序。而且Oracle数据库对对象类型的原生支持,可以使应用程序直接使用OracleObject,而不需要中间的映射关系。如此一来,就使得在对对象进行抽象和封装操作时,会变得比有中间映射更能读懂并且便于后续对系统的维护。一般来说,数据库表只是用来保存数据的地方,而OracleObject却可以提供一些方法,对这些数据进行操作,使得可以得到的数据不仅仅是原生的数据表中的数据。不仅如此,OracleObject可以轻易的表达出整体和部分的关系,一个数据对象可以包含另一个数据对象,而这个数据对象又可相对独立的显示出本身固有属性,同时当把这个对象放到关系型数据库中去时,它仅能将自身建立多表的关联,而不能把包含的数据对象与自己捆绑作为整体建立关联,所以我们认为该对象能起到和原来一样的作用。OracleObject这种关系模型是Oracle对关系型数据库的一种扩展,所以它支持基本上所有的Oracle的操作,例如SQL查询(select*from…)或者行级锁等一系列操作。像VB、VC、JAVA等通用、流行的语言都能运行OracleObject进行编译。从效率上讲,因为OracleObject和数据都是保存在数据库中的,所以在数据的返回速度上是非常快的,而且任何应用程序都可以方便地使用它们。在数据库查询过程中,可以获取一组相关的数据并作为单个单元操作。反之对单个数据进行操作,如果该数据需要获取与其关联对象,从而组成一组数据时,服务器可分配给该数据一个空间让其进行检索,直至找到所需对象后再归还空间结束操作2.2.2CassandraApacheCassandra是一款时下非常流行的非关系型数据库,可被用于实时的事务型的应用以及读密集型的大规模商务智能数据库,是一个可靠的大规模的分布式存储系统。最早在2007年由FaceBook开发,在2009年成为了Apache孵化项目。Cassandra面向的对象不再是以行为单位的数据库,而是以列为单位的数据库,它采用分布式的结构化Key-Value的存储方案,Cassandra的模式较传统模式灵活,可在线任意添加或者删除字段,而不必像原先一样开始编译就预定义Schema及Datasheet等,Cassandra利用多个节点建构网络服务,摈弃了传统的单节点模式,使内部具有分布式特点,其中列被组织成ColumnFamily(列族)[9]。不仅如此Cassandra提供了多数据节点的自动识别。Cassandra的一个写操作会被自动复制到其他节点上去,就是说Cassandra的数据会自动的写入多个节点,用来保证数据的可靠性。为了确保数据的完整性和连续性,Cassandra会利用每次写、读操作对节点上的数据进行备份,那么就要求写、读操作必须一一对应,根据写操作的原理,当进行读操作时,路由也会根据路径,从写入数据的多个节点上读取,来降低数据丢失的概率。在数据的一致上,可用性上Cassandra也是比较灵活的,可以有不同的配置,比如要求所有副本,节点上的数据一致(高一致性),或者只要读到一个副本的值即可(高可用性)。最后Cassandra是一个分布式的系统,对于一个Cassandra群集来说,扩展性能是比较简单的事情,只需要在群集里面添加节点就可以了Cassandra是面向列的Key-Value的NoSQL数据库。Cassandra提供了几个关键概念:KeySpace(关键空间)和ColumnFamily(列族)。KeySpace是位于Cassandra存储层面最高的层次上,从原理上有点类似于关系型数据库的Schema。在它之下的是ColumnFamily(列族),和关系型数据库的表相近[10]。其中每一个圆弧表示一个Column,是Cassandra中最小的数据单元,是由一个三元的数据类型,由Name,Value,Timestamp组成具体来看,一个Column的表现形式就如{Name:ID,value:1234567,timestamp:123456789123}。同时和关系型数据库不同的是可以在ColumnFamily中同一列(Column)上存储任何数据类型,例如可以存储一行有列名是“姓名”,数据类型是字符;你也可以再存储一个新行,也有列名“姓名”,但数据类型是数字型。当然,在不同的行也可以有不同的数量的列。第一行的Column列表是ID,NAME,BIRTH而第二行则是ID,NAME,SEX。这二行都属于同一个KeySpace除了Column之外,这里还简单提一下SuperColumn的概念,简单的说就是一种嵌套关系,可以想象成Column的组合,就是Key-Value的Value是一个map,包含了Key-Value,即某个Column有多个子列。而ColumnFamily则是多条行的组成,每行记录包含了一个Key和一系列Column,是Column的组成。同样的,SuperColumnFamily则是SuperColumn的组成。最后KeySpace则是最外层的结构,所有的ColumnFamily或者SuperColumnFamily都必将属于某一个KeySpace总体来说,Cassandra可以提供一下优点1、运用方便,操作简便,模式灵活:不用在开始编译前就预定义Datasheet及Data格式。使用Cassandra,就如同文档存储一样,不需要关心具体的数据格式和列数的限制与匹配,只需要把记录简单的保存到Cassandra的空间内就可以了,与此同时,可以在线根据实际编译需要添加或者删除字段[11]。因为在集群中所有的节点保持相同,这样就不需要复杂的配置去管理这些节点,减少了管理任务2、数据的自动分布和很好的读、写吞吐量:在集群的环境下Cassandra节点可以自动的进行数据同步,每个节点都可以接受读写的请求,这样大大提高了读写的速度3、支持Range查询,类似SQL的查询语句:Cassandra在整体性能得到较大改进,主要是Cassandra对其关键词Key进行定义,并用Range进行查询4、分布式操作:可以在Cassandra集群中统一的进行读写每个数据。为了确保数据的完整性和可靠性,Cassandra在对一个网络进行读、写操作过程中,会对该网络中的每个节点都进行相同操作,这样就能确保系统的集群服务。但是如果没有副本存在而又有需要恢复数据,就需要通过手动的操作5、数据集群:通过数据节点的配置,可以做到数据集群的效果,简单的说就是当某个数据节点失效的时候,至少有其他的数据节点保存着目前每条记录的完全复制6、弹性扩展性和高度可用性:能够较容易的在线的增加Cassandra的容量以达到更高要求。假设在现有的配置下,容量已经不能满足数据或性能的需要,就可以为给集群添加更多容量,例如指向另一台电脑或者服务器。在整个过程中不再需要像关系型数据库那样进行人为的数据备份和迁移,只需要增加新的节点并把它配置到Cassandra的集群后,集群环境会自动识别和管理,根据配置信息,进行相应的数据复制在本系统中,主要把Cassandra作为一个第三方的大数据量的存储空间用于数据的传输,由于模式的灵活,可以快速的把数据存入Cassandra,同时根据不同的查询需求建立不同的ColumnFamily,从而加快了查询速度。不仅如此,Cassandra的节点自动备份机制,使得系统在数据的一致性和准确性上也得到了保证2.2.3并发多线程编程多线程(multithreading),顾名思义就是同一时间能够完成不少于单线程,它是依靠软件或者硬件作为载体。而更进一步理解它,必须首先理解“线程”(Thread)。我们知道在一个单独的program中,有些programfragment能够不依赖于系统而自行执行,那么这样的programfragment就是线程,更进一步利用线程编译的概念被认为是Multithreading,即“多线程处理”,像对称多处理机、多核心处理器及Chip-levelmultithreading或Simultaneousmultithreading等等都可以这样运行,在有软件支持的情况下,若再加上相应的硬件,那就是我们所说的多线程处理计算机,将大大提高效率[12]。给出了一个线程的生命周期图中线程各个状态的介绍如下New:代表着一个新线程的生命周期的开始,起始状态我们称之为New,相当于系统首先分给该线程一个为New的存储空间,当系统进入运行状态节点时,将收回该存储空间,New状态结束Runnable:运行状态。当系统开始正式执行该线程后,其状态就变成了Runnable,这个状态通常被认为指令进行中Waiting:等候状态。当需要执行外部优先级较高的线程时,正在执行任务的线程进入等候状态,直到优先级较高的线程执行完毕或者系统终止执行,等候状态才会消除,进而执行原有线程TimedWaiting:时间等候状态。此状态主要是延时或系统有特殊需要时才用,通常当该状态终止线程会返回原来的运行状态Terminated:终止状态。该状态表示线程执行完毕。同时也有可能是其他的一些情况会引起线程进入终止状态。比如系统崩溃了解完一个线程的生命周期后,我们再来看下一个概念——进程。其实单个在线运行的program就被称为进程。进程和线程之间有着千丝万缕的联系,首先线程隶属于进程,其次两者都是程序的一部分,都是在线运行状态,只不过进程范围广而线程范围小,最后,进程相对复杂通常由系统负责调度和执行,而线程相对简单是其中的一个流程而两者也存在一定的区别:子、父两种线程有各自不一样的代码,存放在不同的数据空间里,而进程是多线程其共享数据空间;单线程在执行过程中,执行各自的堆栈和出栈指令,每个线程都需要调用内存和CPU,但是多线程则不一定要调用资源,能更好较低功耗,提高效率在系统开发过程中,主要使用了synchronized关键字实现同步的机制,同时结合使用了Executor的架构和Callable分别实现了线程池和线程返回值,从而实现了性能上的提升。这种方式主要的思路是在数据单位互相没有依赖的情况下,首先对原始数据分割成一块块小的数据单元,然后利用线程池中可执行的线程对每一个小的数据单元进行操作,与此同时利用每个线程的返回值查看当前线程的运行状态,如果所有的数据单元都被处理成功,则返回结果;如果有一个或者多个线程的返回结果非正常,则会生成异常报告。同时synchronized关键字很好的解决了同步问题。例如,在系统中的验证模块,由于输入的数据比较大,而且不同的数据有着不同的验证规则,互相没有依赖关系,这样就可以使用线程池和同步概念加快运算速度。如果没有多线程支持返回值的新特性,很难简单的实现验证模块对于功能的需求2.2.4JavaAnnotation注解编程Annotation是Java5开始引入的新特征,一般叫注解。Annotation功能可以让程序员自定义Annotation类型。与Java和Javadoc中的comments注释相比,Annotation注解强大很多。它提供了一种安全的类似注释的机制,可以将任何的信息或元数据(metadata)及程序元素(类、方法、成员变量等)关联。简单的说就是在不影响逻辑,代码语义的前提下,帮助程序员读懂程序元素的语义,即可以以类似与程序工具类一样,对正在运行的程序语义进行影响。也就是说,Annotation是不会影响程序代码的执行,不管annotation怎么变化,代码都会不受影响的执行。一般而言Annotation是供指定的工具或框架使用的。Annotation像一种修饰符一样,可以用在类、方法、成员变量、方法的参数、方法的局部变量上面,任何地方都可以使用注解。Annotation其实是一种接口,其工作时是通过与Java语言中的反射机制相关的API来访问Annotation信息。而框架中或者其他工具类中的类则会根据这些信息来决定如何使用该程序元素或改变它们的行为。但在实际程序执行过程中Java语言解释器会过滤这些annotation信息,因此在JVM中这些信息无法按照程序员设想的执行,因此不得不运用配套工具来达到预期的目的[14]和XML相比,Annotation具有以下优点:存储于class中,可以节约维护支出;无需工具支持,无需解析;通译通验,方便纠错;提升开发效率正是由于这些特性,很多流行框架已经开始使用Annotation,如Spring,Hibernate等在系统开发过程中,最常见的用法就是开源框架中的类根据这些Annotation来决定如何使用该程序元素或改变它们的行为,例如使用Spring的内置注解@autowired去自动的装配类实例;使用Resteasy中内置的注解@Get/@Post指明Webservice的工作方式同时使用@Path指明Webservice的访问路径[15]。除了以上常规用法之外,Annotation在本项目中主要用于动态代码生成。在系统验证模块中,考虑到针对不同的金融产品需要不同的验证,如果使用常规的编程方式一定会有很多判断(ifelse),增加将来运行维护的成本。除了在验证模块中,同时在数据表的生成,基本数据存储的语句的生成中也使用了Annotation。因为系统中设计的数据表结构和业务对象是一一对应的,而且插入,更新,删除的SQL语句也是对应的,如果当业务对象改变的时候,必须人为的去维护数据表和SQL语句,那么使用Annotation去定义每一个实体类型所对应表名,字段名。这样当业务对象改变时,只需要通过Annotation执行一下代码生成器,就可以得到更新后的数据表和SQL语句,极大程度上加快了开发效率虽然Annotation为系统的开发带来诸多好处,但也不能在系统中过度依赖于Annotation。一般而言,在某些情况下不应该使用过多的Annotation。例如:1、过度使用Annotation会污染代码,使得代码很难理解2、尽可能少用Annotation去转变对象操作。毕竟Annotation是元数据不是代码,而程序是由代码编写的,每个对象都可以有多种方法用代码编写实现,不用拘泥于元数据3、程序员应尽量不用注解去标明environment/AP/database中的信息3.1系统背景在全世界金融都呈现低迷态势下,特别在2008金融危机后,海外市场金融投资公司,特别是投资银行运作举步维艰。接着坏消息接踵而至,首先是部分中小型公司要么选择破产要么通过各种途径求助于政府,然而政府扶持却并未见到大成效,特别像雷曼兄弟公司这样投资寡头宣布无力偿还债务时,世界引发了轩然大波,金融市场发生动荡,紧接着产生的影响就想多米诺骨牌的连锁反应一样,各大银行需要开始进行清算。除此之外对于投资银行来说,不仅要想办法识别和整理现有的损失,更为重要的是有能力识别出公司所做每笔交易所承担的风险甚至基于整个投资组合的风险,而且要在资金面紧张的情况下,可以尽量保持一定的资金流动性目录摘要 1关键词 1TOC\o"1-2"\h\z\u一、引言 2二、我国中小型连锁零售企业供应链管理的基本概况 31、供应链管理的概念 32、供应链管理的目标 43、我国中小型连锁零售企业的发展情况与趋势 4三、我国中小型连锁零售企业实施供应链管理的现状及问题
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 岩土基础课课件
- 小龙虾水彩课件
- 输液泵应急预案脚本课件
- 小鸭子学游泳课件
- 商铺租赁合同终止及租赁物使用消防安全协议书范本
- 水稻-养殖一体化土地承包种植合同
- 小鸡家着火了课件
- 小食品调味培训课件模板
- 设备制造行业细分领域高端装备制造业发展策略分析报告
- 贪吃的变色龙课件
- TSZUAVIA 009.1-2019 多旋翼无人机系统实验室环境试验方法 第1部分:通用要求
- GB/T 13993.2-2002通信光缆系列第2部分:核心网用室外光缆
- 综合布线系统-第2版第3章-接续设备
- 五年级上册英语课件-Unit 4《Hobbies》|译林版
- 国际商务文化与礼仪课件
- 人工智能导论课件
- 部编版(人教版)三年级语文上册、下册教材解析及教学建议课件
- 危险化学品安全生产技术培训教程(-)课件
- 质量异常处理单、不合格品审理单
- 中国石油天然气集团公司建设项目其他费用和相关费用的规定
- 道路交通事故现场图绘制PPT讲解(104页)
评论
0/150
提交评论