当前位置:首页 » 操作系统 » 郭红数据库

郭红数据库

发布时间: 2022-11-02 03:25:03

❶ 求《数据库原理与应用》SQL Server版 毛一梅,郭红着的课后习题答案,发至[email protected]

地方史蒂夫

❷ 基于J2EE的图书管理系统毕业设计

摘要:对基于XML的多源异构数据融合、遥感数据存储、数据持久化以及用户访问控制技术进行了分析和设计;讨论了元数据管理系统的实现技术、设计思想和系统构架,注重系统的可移植性、可维护性和可扩展性;实现了基于J2EE技术的元数据管理系统。�
关键词:Java 2平台企业版;元数据管理;扩展标记语言�

随着信息技术的发展,产生了海量的信息。如何有效地管理和组织这些海量信息已经成为一个突出的问题。元数据机制是解决这一问题的有效手段。一些部门已经针对数据在行业内部的应用特点来开发自己的管理系统[1]。目前,在元数据管理系统的建设中存在的主要问题是:基于不同操作系统和数据库的管理平台不可移植、安全性差、难以维护和扩展、缺乏统一的建设模式与内容服务提供方式[2,3]。�
以J2EE平台为基础的各项技术的成熟为这些问题提供了良好的解决方案。J2EE是一种利用Java2平台来简化诸多与多级解决方案的开发、部署和管理相关的复杂问题的体系结构。J2EE的核心技术是Java2平台的标准版,具有Java语言的特性,是一个开放的、跨平台的结构,提供了健全的意外事件处理机制,具有良好的可移植性和扩展性。�
基于J2EE的元数据管理系统具有高效、稳定、可复用、易维护的特点;独立于平台,可以部署于Microsoft Windows、Linux、UNIX等操作系统之上;可对Oracle、SQL Server 2000、MySQL等多种数据库进行操作。但是J2EE涉及的技术种类繁多,在实际应用中要根据需要准确使用,而且基于J2EE的系统需要具有良好的系统设计结构,才能最大限度地发挥优势。尽管基于J2EE平台的系统具有诸多优点,但目前J2EE还没有被广泛应用在元数据管理中。本文提出的基于J2EE架构的元数据管理系统建设方法和应用实例,是将J2EE引入元数据管理的一个初步尝试。�

1关键技术研究�

1.1基于XML的多源异构数据融合�
各个部门采用了不同的元数据存储方式。由于缺乏统一的标准,很难对这些元数据进行有效的管理和发布。必须实现多源异构数据的融合。�
采用简单文本文件作为中间介质的信息交换方法不能描述数据的结构,不适合用来进行复杂的元数据交换。 XML技术实现信息交换与共享已经成为一种发展趋势。孙君明等人[4]对基于XML的数据交换技术进行了研究。XML是采用线性语法描述树状结构的标志语言。作为一种数据交换的中间件,XML具有跨平台、结构化和自描述性强的特点。�
用XML实现多源异构数据融合的过程如图1所示。�
在图1中,首先各地的数据提供者通过浏览器将数据传送给服务器,由服务器端的XML引擎将这些数据转换成标准的XML文档;再由一些服务组件根据需要对XML文档进行处理,如建立索引等。这样,多源异构数据就被转换成了具有统一标准的XML文档;通过对这样具有固定结构的XML中间件的解析,实现从XML文档到数据库的转换,完成了多源异构数据的统一存储[4,5]。进行信息发布时,根据客户端的查询条件在数据库中提取相应的结果集,形成XML文档,将该文档发送至客户端;由客户端的格式化工具解析该XML文档,显示在客户端。�

1.2遥感数据的分块存储�
遥感数据(如DEM、TM、ASTER等)具有数据量庞大的特点,应用数据库中的大数据类型存储,如Oracle 9i中的Blob、SQL Server 2000中的Image。但是如果将它们直接存入数据库中会造成系统效率低下;可采用一种分块存储的策略,将原始数据分割成大小一致的若干块,一块一块地进行存储。分块大小要根据磁盘的读写性能和网络的传输性能确定,过大或过小都会导致系统运行效率低下[6]。每块数据以一条记录的方式进行存储,包含数据的编号、经纬度、步长、时间等信息,并且建立索引。�

1.3数据持久化�
为了能使系统部署在任意数据库系统上,加入了一个持久化层,作为连接Java应用和关系数据库的通道。为数据库中的每张表建立一个Java对象,定义好对象与表之间的对应关系,只需对Java对象进行操作,不用关心SQL语句和系统最终使用的数据库。持久层作为一个中间件,封装对数据库的操作,提供接口,隐藏数据访问的细节[7]。�
1.4用户访问控制�
元数据的使用人员级别复杂,用户管理困难。使用RBAC(Role-Based Access Control,基于角色的访问控制)模型,可以提高管理的效率和安全性。RBAC在传统的用户——权限模型中引入了角色的概念。角色是一组用户的集合,也是一个授权的集合,它将一组用户与权限联系起来。一个角色可以与多个用户对应,一个用户可以拥有多个角色,每个角色可以执行多种权限,每个权限可以被多个角色共享。对一个用户授予相应的角色,使用户可以进行相应的操作[8]。引入角色可以使系统的安全机制具有很大的灵活性,减少了权限管理的负担和代价,同时也增强了系统的可维护性。�

2元数据管理系统的设计�

使用本系统的各部门实际情况不同,系统可能被部署到不同的平台上,而且需要对该系统进行一定的扩展和改进。所以在系统设计上,需要充分考虑到系统的可移植性和可扩展性。�

2.1系统设计�
本系统基于J2EE平台,是一个浏览器/服务器(B/S)结构的系统,具有J2EE平台可以跨系统使用的特性,采用MVC(Model-View-Controller)应用框架。MVC设计框架的内部原理比较复杂,将MVC运用到应用程序中会带来大量的额外工作,增加应用的复杂性。但是MVC可以轻松地实现程序代码与HTML的分离,而且MVC的三个模块相互独立,可以构造良好的松耦合构件,提高应用系统的可维护性、可扩展性、可移植性和可复用性。从长远的应用考虑,应使用MVC设计框架[9]。�

本系统在传统的B/S三层结构上作了一定的改进。�
(1)表现层。在该层使用Struts框架。Struts是一个MVC模式的表现层应用框架。浏览器向Web服务器提出请求后,Web服务器会把请求交给控制器处理。ActionServlet控制器根据请求的不同,将它们转发给不同的Action实例。Action实例在这里充当了用户请求与业务处理逻辑之间的适配器,它只负责控制整个程序的流程,不关心具体业务的实现,实现了请求与业务逻辑的分开。本系统使用一个高效的Action类——DispatchAction类。只要继承该类,就可以在一个Action中集成多个业务方法,有利于系统的维护。在视图显示方面,其大量使用了Struts标签,用来控制显示的逻辑和内容。由于不同平台采取的编码方式不同,在进行系统移植时很容易出现中文乱码问题。在这里使用一个可插拔式的过滤器,实现对请求和响应的预处理及后处理,很好地解决了字符编码问题,使系统可以在不同的平台上进行移植。

(2)业务层。它处理用户请求和应用逻辑。在处理之前,将所有涉及到表现层的数据结构替换成更加通用的数据结构类型;使用通用的、与表现层无关的数据结构在这两层之间传递参数。表现层方法提交的参数类型主要是HttpServletRequest和HttpServletResponse;使用这样的参数会增加系统的耦合性,不利于代码的重用,所以要将它们处理成通用的数据类型,如数组。这一过程在Action适配器进行转发之前完成,提供给业务层的参数是通用的数据类型[10]。业务层方法之间的通信也通过通用的参数类型进行,使得每个业务方法均独立存在于系统之中,在很大程度上减少了系统的耦合,提高了可复用性。�

(3)数据层。为了实现数据库访问细节与业务层的分离,引入持久化层。�
为了使系统具有较好的可维护性、可移植性和可复用性,采用以上的设计思想,以搭建一个逻辑清楚、功能明确、模块化程度高的元数据管理系统。�

2.2工作流程�
用户通过浏览器(IE/Netscape)向服务器提交请求,请求经过过滤器处理后再提交给控制器ActionServlet;控制器根据请求的类别将它们转发给不同的DispatchAction类。该类中的方法对参数进行处理后调用不同的业务逻辑对请求进行分析处理,处理后得到的信息通过视图显示在用户浏览器上。�

3基于J2EE的元数据管理系统的实现�

根据本文提出的设计思想,实现了一个元数据管理系统——基于J2EE的小城镇元数据管理平台。本实例以J2EE平台为基础,Tomcat 5.0为服务器,可以使用Oracle 9i、SQL Server 2000、MySQL数据库,使用了ORM(Object-Relation Mapping)模式的持久化层中间件Hibernate,以Eclipse 3.0为开发平台。在系统实现过程中,使用了以J2EE平台为基础的各项技术,遵循Java2标准平台的编码标准,注重系统的可扩展性和可维护性。系统的XML引擎采用了DOM(Document Object Model)和SAX(Simple API for XML)。DOM负责XML文档的生成和修改;SAX对XML进行解析。
小城镇元数据管理平台的功能主要分为管理与检索两部分,可以实现对矢量数据、栅格数据、文档数据、原始试验数据、报表数据和模型数据的管理与检索;用户管理可以对用户进行权限设置;系统管理功能可以提供系统运行的日志和帮助文件。�

4结束语�

基于J2EE的元数据管理平台,具有良好的跨平台特性;解决了多源异构数据的融合、遥感数据的存储、数据持久化和用户控制访问问题;在设计和实现过程中遵循J2EE的设计模式,具有良好的扩展性和维护性;功能模块具有低耦合的特点,极大地提高了代码的可复用性;可对元数据进行有效管理,实现信息的共享发布,广泛地应用在各个领域。在如何提高系统的安全性方面还有待于对其进行进一步的研究。�

参考文献:�
〔1〕吴洪桥,何建邦,池天河,等.基于Internet的元数据管理模式研究[J].计算机科学,2003,30(4):89-91. [2]李广乾 .小城镇信息化建设的基本思路[J].信息化建设,2005(Z1):24-26.�
[3]赵春江,杨信廷. 加强信息技术研究和开发促进小城镇健康发展[J].小城镇建设,2005(1):22-23.�
[4]孙君明,郭红. 基于XML的异构信息交换技术研究[J].计算机应用研究,2003,20(1):70-72.�
[5]李德冠,陈梦东. 一种基于XML的数据交换系统的设计和实现[J].微机发展,2005,15(12):12-14.�
[6]朱雷,潘懋,李丽勤,等. GIS中海量栅格数据的处理技术研究[J].计算机应用研究,2006,23(1):66-68.�
[7]孙卫琴. 精通Hibernate:Java对象持久化技术详解[M]. 北京:电子工业出版社,2005.�
[8]范会联,李献礼. 基于Struts框架的Web信息系统中RBAC的实现[J].计算机时代,2005(12):33-34.�
[9]孙卫琴. 基于MVC的Java Web设计与开发[M]. 北京:电子工业出版社,2004.

❸ 转SQLSERVER 会不会自动加锁

[SQL]提升查询效率与避免LOCK发生nolock: 可能把没有提交事务的数据也显示出来,可能会产生脏读readpast: 会把被锁住的行不显示出来
所有Select加 With (NoLock)解决阻塞死锁
在查询语句中使用 NOLOCK 和 READPAST

处理一个数据库死锁的异常时候,其中一个建议就是使用 NOLOCK 或者 READPAST 。有关 NOLOCK 和 READPAST的一些技术知识点:

对于非银行等严格要求事务的行业,搜索记录中出现或者不出现某条记录,都是在可容忍范围内,所以碰到死锁,应该首先考虑,我们业务逻辑是否能容忍出现或者不出现某些记录,而不是寻求对双方都加锁条件下如何解锁的问题。

NOLOCK 和 READPAST 都是处理查询、插入、删除等操作时候,如何应对锁住的数据记录。但是这时候一定要注意NOLOCK 和 READPAST的局限性,确认你的业务逻辑可以容忍这些记录的出现或者不出现:

简单来说:

NOLOCK 可能把没有提交事务的数据也显示出来.

READPAST 会把被锁住的行不显示出来

不使用 NOLOCK 和 READPAST ,在 Select 操作时候则有可能报错误:事务(进程 ID **)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。

下面就来演示这个情况。

为了演示两个事务死锁的情况,我们下面的测试都需要在SQL Server Management Studio中打开两个查询窗口。保证事务不被干扰。

演示一 没有提交的事务,NOLOCK 和 READPAST处理的策略:

查询窗口一请执行如下脚本

CREATE TABLE t1 (c1 int IDENTITY(1,1), c2 int)
go

BEGIN TRANSACTION
insert t1(c2) values(1)

在查询窗口一执行后,查询窗口二执行如下脚本:

select count(*) from t1 WITH(NOLOCK)
select count(*) from t1 WITH(READPAST)

结果与分析:

查询窗口二依次显示统计结果为: 1、0

查询窗口一的命令没有提交事务,所以 READPAST 不会计算没有提交事务的这一条记录,这一条被锁住了,READPAST 看不到;而NOLOCK则可以看到被锁住的这一条记录。

如果这时候我们在查询窗口二中执行:

select count(*) from t1 就会看到这个执行很久不能执行完毕,因为这个查询遇到了一个死锁。

清除掉这个测试环境,需要在查询窗口一中再执行如下语句:

ROLLBACK TRANSACTION
drop table t1

演示二:对被锁住的记录,NOLOCK 和 READPAST处理的策略

这个演示同样需要两个查询窗口。

请在查询窗口一中执行如下语句:

CREATE TABLE t2 (UserID int , NickName nvarchar(50))
go
insert t2(UserID,NickName) values(1,'郭红俊')
insert t2(UserID,NickName) values(2,'蝈蝈俊')
go

BEGIN TRANSACTION
update t2 set NickName = '蝈蝈俊.net' where UserID = 2

请在查询窗口二中执行如下脚本:

select * from t2 WITH(NOLOCK) where UserID = 2
select * from t2 WITH(READPAST) where UserID = 2

结果与分析:

查询窗口二中, NOLOCK 对应的查询结果中我们看到了修改后的记录,READPAST对应的查询结果中我们没有看到任何一条记录。 这种情况下就可能发生脏读

热点内容
安卓桌面应用如何变大 发布:2025-05-13 20:59:39 浏览:360
解压通知单有什么用 发布:2025-05-13 20:58:37 浏览:567
俄罗斯方块的编程 发布:2025-05-13 20:51:08 浏览:611
python开发项目 发布:2025-05-13 20:44:17 浏览:736
安卓手机怎么样刷国行系统 发布:2025-05-13 20:44:14 浏览:320
云服务器端口如何设置断网间隔 发布:2025-05-13 20:43:15 浏览:131
linux系统休眠 发布:2025-05-13 20:30:05 浏览:906
安卓手表进水了怎么搞 发布:2025-05-13 20:11:31 浏览:515
linuxc语言随机数 发布:2025-05-13 20:09:16 浏览:240
c语言通用链表 发布:2025-05-13 19:53:04 浏览:806