大型数据库,多用户并发访问,通过哪些手段解决性能问题?
现在有一大型数据库,近千用户同时通过浏览器进行数据登记、查询,要求响应时间
20秒以内。除了硬件上要较高的配置外,我想一个方法是要通过中间件。不知道还有
什么更好的办法?如果用中间件,采用什么好?
谢谢指点。
问题点数:22、回复次数:13Top
1 楼lemon223(oracle)回复于 2001-10-22 14:51:29 得分 0
大家踊跃点嘛,多交个朋友么。Top
2 楼erickleung()回复于 2002-04-11 16:53:12 得分 1
What Database System? Oracle ? DB2? Informix? or Others?
use J2EE?Top
3 楼tx117(TX117)回复于 2002-04-11 19:54:06 得分 0
要看你的数据量大不大?
数据量大就应该用分片.Top
4 楼cajon(峡谷泥)回复于 2002-04-11 20:09:46 得分 0
what is 分片Top
5 楼lemon223(oracle)回复于 2002-04-11 23:32:12 得分 0
100万以上数据(大概4G以上),用Oracle数据库。很久的问题,没人回答。谢谢各位。Top
6 楼KingSunSha(弱水三千)回复于 2002-04-12 11:28:52 得分 5
如果你想用中间件来提高效率,那恐怕会失望的,三层结构的主要目的不是是提高效率
Oracle处理这点数据量应该不是问题,当然服务器要求比较高Top
7 楼net_steven(素狼(W))回复于 2002-04-12 12:28:18 得分 3
中间件主要是解决分布式计算的问题,在访问效率上反而有所牺牲。
如果不考虑其他因素,尽量直接与数据库进行通信,是提升效率的
最好途径。Top
8 楼db2_seeker(小顺)回复于 2002-04-12 12:57:11 得分 0
关注
Top
9 楼icevi(按钮工厂)回复于 2002-04-12 13:42:28 得分 10
其实这个内容很大的,有很多方法来处理。下面是从书上看来的,也许有帮助:
可以通过使用单服务器解决方案来提高站点的伸缩性。可以将你的WEB服务器升级为具有更快的处理器或多处理器或者两者并举的计算机。这种叫扩大规模(scaling up)。但是,在有些时候这种方案并不能奏效,扩大程度也就如此而已,而且,高端市场的计算机价格高得令人不敢问津。一旦达到一定的限度,高成本-效益比的可伸缩性就要求使用多机多处理器。就是扩展规模cale out)。
这样就需要负载平衡的技术。你必须在多台不是太昂贵的计算机间对进入的HTTP请求进行分布。对于一个基于WEB的应用而言,最好把负载平衡定位在HTTP请求到达站点的地方。所以需要一种技术用来在一组IIS计逄机间分布进入的HTTP请求。这种方法称WEB服务器阵列(WEB server array)。
建立WEB服务器阵列:
有很多种方法可以在一组服务器间分布HTTP请求。有一个简单的方法就是把WEB站点设计成具有专用路由的服务器,而该路由服务器具有可以重定向客户的定制代码。
可以在global.asa文件中使用session_onstart事件,将客户重新定向。比如:
sub Session_OnStart
const server_count=3
dim sserver,surl
randomize
select case (fix(rnd*server_count)+1)
case 1
sserver="farmworker1"
case 2
sserver="farmworker2"
case 3
sserver="farmworker3"
end select
surl="http://" & sserver & ".mysite.com/myapp/default.asp"
response.redirect surl
end sub
这项技术要求客户到达路由服务器的初始请求必须是对扩展名为.asp的页的请求。
上面的算法是使用随机数实现重定向,也可以设计一种更精细的负载平衡机制。例如,每个服务器都可以向路由服务器传回执行数据。如果每台服务器都定时向路由服务器传输一定数量的活动会话,负载平衡代码就可以把每个新客户都重新定向到具有最少活动客户的服务器上。
另外也可以用循环DNS技术。每个逻辑DNS名都映射到多个IP地址。当一个BROWER试图对DNS名进行分解时,DNS服务器就从地址列表中返回一个地址。为了在一组服务器中分布客户,DNS服务器循环使用这些地址。这比前而的重定向技术要稍微快一些。
上面两种都可称为是基于会话的负载平衡技术。但是这种方法有明显的局限性。这种方法会出现一些偏差,而且会将IP地址暴露给客户,当某台WEB服务器崩溃或都由于维护而离线时,会出现“服务器不可用”的信息。而且当服务器崩溃时客户会话也会随之崩溃。
更好的办法是为每个客户提供一个单独的IP地址。有两种方法:一种基于硬件的,比如用CISCO的LOCALDIRECTOR转换器和F5公司的BIGIP路由器。一种是基于软件的,比如集成在WIN2000 ADVANCED SERVER中的NETWORK LOAD BALANCEING(NLB)。NLB不需要独自占用任何硬件,它作为WINDOWS设备驱动程序安装到每台WEB服务器上,能满足最多达32台服务器。
这两种方法可称为基于请求的负载平衡。
只要可以使用基于请求的负载平衡技术,就不应该考虑来使用基于会话的负载平衡技术。
另外,在WEB服务器中缓存只读数据是加快响应时间和提高整体吞量的最好办法。它们减少了与数据库的往返次数,还可以节省服务器方的处理周期。
WEB服务器可以向外扩展,但是数据库服务器却不能。所以应尽可以多地在WEB服务器上进行处理。还应想方设法将与安全有关的授权检查等工作从数据库服务器卸载到WEB服务器上去。
数据库服务器还代表单独的一个失败点,如果数据库服务器崩溃,你的应用也会随之淹没。用群集技术可以解决这一弱点。
Top
10 楼icevi(按钮工厂)回复于 2002-04-12 14:06:26 得分 0
另外,还有关于DCOM与可伸缩性的一些说法,下面:
DCOM不像HTTP那样可以利用NLB和LOCALDIRECTOR等负载平衡产品,它面向连接的本质也使得它不可能利用基于请求的负载平衡技术,因而限制了并发用户的数量并使应用不能达到最高程序的容错性和有效性。
DCOM在跨过防火墙时不能很好地工作。其安全模型也不能很好地适应INTERNET等公用网络。DCOM还要求每台客户计算机都运行某个版本的WINDOWS OS,并对每台客户机进行大量的配置和管理。
虽然DCOM在局域网下当只有少量或中等数量的用户时能够很好地工作,但是当增加更多的用户或者让他们远离服务器的时候,它就变得漏洞百出而不再可靠。
但COM和COM+提供了以下四个方面的重要内容:
1、粘合剂。用户可以用它将使用一种或几种自选语言编写的组件组半夜成应用。
2、增值运行时环培。它能过基于环境或基于属性的编程方法来体现系统服务。
3、运行在同一台计算机上的进程之间的调用方法。
4、允许用户实现计算机边界的通信。
这几个方面还是颇有价值的。
可以设置一个具伸缩性的平台将COM+技术与HTTP应用结合起来。强制使用用基于负载的平衡技术处理客户到服务器的通信。将WEB服务器同时做为COM+应用服务器,处理与数据库服务器间的通信。
Top
11 楼turkeywhy(火鸡)回复于 2002-04-13 11:56:46 得分 0
up!!!Top
12 楼lemon223(oracle)回复于 2002-04-16 10:53:40 得分 0
非常感谢各位。
我们现在采用的方式逻辑上是2台web服务器(可以是多台)+2台应用服务器+数据库服务器。实际上是2台web(包括应用)+1台数据库。这样的好处是可以负载均衡,节省成本,系统的可扩展行好,业务逻辑放在应用服务器上,便于系统升级。不知各位认为如何?Top
13 楼laurel(laurel)回复于 2002-04-16 11:10:43 得分 3
这样的体系结构没问题。Top




