﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-lhm108-文章分类-学习笔记</title><link>http://www.cnitblog.com/lhm108/category/5878.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 02 Oct 2011 00:15:36 GMT</lastBuildDate><pubDate>Sun, 02 Oct 2011 00:15:36 GMT</pubDate><ttl>60</ttl><item><title>ajax</title><link>http://www.cnitblog.com/lhm108/articles/39037.html</link><dc:creator>留声机</dc:creator><author>留声机</author><pubDate>Fri, 18 Jan 2008 17:54:00 GMT</pubDate><guid>http://www.cnitblog.com/lhm108/articles/39037.html</guid><wfw:comment>http://www.cnitblog.com/lhm108/comments/39037.html</wfw:comment><comments>http://www.cnitblog.com/lhm108/articles/39037.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lhm108/comments/commentRss/39037.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lhm108/services/trackbacks/39037.html</trackback:ping><description><![CDATA[<table class="htb wr" cellSpacing=0 cellPadding=0 width="100%" border=0>
    <tbody>
        <tr>
            <td>
            <div class="box2 p14">AJAX全称为&#8220;Asynchronous JavaScript and XML&#8221;（异步JavaScript和XML），是指一种创建交互式网页应用的网页开发技术。 <br><br><br>
            <div class=titord><span class=t1><a name=1></a><strong>主要包含了以下几种技术</strong></span></div>
            <br>Ajax（Asynchronous JavaScript + XML）的定义 <br>基于web标准（standards-based presentation）XHTML+CSS的表示； <br>使用 DOM（Document Object Model）进行动态显示及交互； <br>使用 XML 和 XSLT 进行数据交换及相关操作； <br>使用 XMLHttpRequest 进行异步数据查询、检索； <br>使用 JavaScript 将所有的东西绑定在一起。<a href="http://baike.baidu.com/view/170434.htm" target=_blank><u><font color=#0000ff>英文</font></u></a>参见Ajax的提出者Jesse James Garrett的原文。<br>类似于DHTML或LAMP，AJAX不是指一种单一的技术，而是有机地利用了一系列相关的技术。事实上，一些基于AJAX的&#8220;派生/合成&#8221;式（derivative/composite）的技术正在出现，如&#8220;AFLAX&#8221;。 <br><br>AJAX的应用使用支持以上技术的web浏览器作为运行平台。这些浏览器目前包括：<a href="http://baike.baidu.com/view/393243.htm" target=_blank><u><font color=#0000ff>Mozilla</font></u></a>、<a href="http://baike.baidu.com/view/3279.htm" target=_blank><u><font color=#0000ff>Firefox</font></u></a>、<a href="http://baike.baidu.com/view/85144.htm" target=_blank><u><font color=#0000ff>Internet Explorer</font></u></a>、<a href="http://baike.baidu.com/view/10019.htm" target=_blank><u><font color=#0000ff>Opera</font></u></a>、<a href="http://baike.baidu.com/view/459265.htm" target=_blank><u><font color=#0000ff>Konqueror</font></u></a>及<a href="http://baike.baidu.com/view/110484.htm" target=_blank><u><font color=#0000ff>Safari</font></u></a>。但是Opera不支持XSL格式对象，也不支持XSLT。<br><br><strong><br>
            <div class=titord><span class=arr><a title=返回页首 href="http://baike.baidu.com/view/1641.htm#"></a></span><span class=t1><a name=2></a>与传统的web应用比较</span></div>
            </strong><br>传统的web应用允许用户填写表单(form)，当提交表单时就向<a href="http://baike.baidu.com/view/3912.htm" target=_blank><u><font color=#0000ff>web</font></u></a><a href="http://baike.baidu.com/view/899.htm" target=_blank><u><font color=#0000ff>服务器</font></u></a>发送一个请求。服务器接收并处理传来的表单，然後返回一个新的<a href="http://baike.baidu.com/view/828.htm" target=_blank><u><font color=#0000ff>网页</font></u></a>。这个做法浪费了许多带宽，因为在前後两个页面中的大部分HTML代码往往是相同的。由于每次应用的交互都需要向服务器发送请求，应用的响应时间就依赖于服务器的<a href="http://baike.baidu.com/view/84619.htm" target=_blank><u><font color=#0000ff>响应时间</font></u></a>。这导致了用户界面的响应比本地应用慢得多。 <br><br>与此不同，AJAX应用可以仅向服务器发送并取回必需的数据，它使用SOAP或其它一些基于XML的web service接口，并在客户端采用JavaScript处理来自服务器的响应。因为在服务器和浏览器之间交换的数据大量减少，结果我们就能看到响应更快的应用。同时很多的处理工作可以在发出请求的客户端机器上完成，所以Web服务器的处理时间也减少了。<br><br>Ajax应用程序的优势在于：<br>1. 通过异步模式，提升了用户体验<br>2. 优化了<a href="http://baike.baidu.com/view/7718.htm" target=_blank><u><font color=#0000ff>浏览器</font></u></a>和服务器之间的传输，减少不必要的数据往返，减少了带宽占用<br>3. Ajax引擎在客户端运行，承担了一部分本来由服务器承担的工作，从而减少了大用户量下的服务器负载。<br><br>
            <div class=titord><span class=arr><a title=返回页首 href="http://baike.baidu.com/view/1641.htm#"></a></span><span class=t1><a name=3></a><strong>发展史</strong></span></div>
            该技术在1998年前后得到了应用。允许客户端脚本发送HTTP请求(XMLHTTP)的第一个组件由Outlook Web Access小组写成。该组件原属于微软Exchange Server，并且迅速地成为了Internet Explorer 4.0[3]的一部分。部分观察家认为，Outlook Web Access是第一个应用了Ajax技术的成功的商业应用程序，并成为包括Oddpost的网络邮件产品在内的许多产品的领头羊。但是，2005年初，许多事件使得Ajax被大众所接受。Google在它著名的交互应用程序中使用了异步通讯，如Google讨论组、Google地图、Google搜索建议、Gmail等。Ajax这个词由《Ajax: A New Approach to Web Applications》一文所创，该文的迅速流传提高了人们使用该项技术的意识。另外，对Mozilla/Gecko的支持使得该技术走向成熟，变得更为易用。<br><br><strong>
            <div class=titord><span class=arr><a title=返回页首 href="http://baike.baidu.com/view/1641.htm#"></a></span><span class=t1><a name=4></a>优点和缺点</span></div>
            </strong>使用Ajax的最大优点，就是能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作，并避免了在网络上发送那些没有改变过的信息。<br>Ajax不需要任何浏览器插件，但需要用户允许JavaScript在浏览器上执行。就像DHTML应用程序那样，Ajax应用程序必须在众多不同的浏览器和平台上经过严格的测试。随着Ajax的成熟，一些简化Ajax使用方法的程序库也相继问世。同样，也出现了另一种辅助程序设计的技术，为那些不支持JavaScript的用户提供替代功能。<br>对应用Ajax最主要的批评就是，它可能破坏浏览器后退按钮的正常行为[4]。在动态更新页面的情况下，用户无法回到前一个页面状态，这是因为浏览器仅能记下历史记录中的静态页面。一个被完整读入的页面与一个已经被动态修改过的页面之间的差别非常微妙；用户通常都希望单击后退按钮，就能够取消他们的前一次操作，但是在Ajax应用程序中，却无法这样做。不过开发者已想出了种种办法来解决这个问题，当中大多数都是在用户单击后退按钮访问历史记录时，通过建立或使用一个隐藏的IFRAME来重现页面上的变更。（例如，当用户在Google Maps中单击后退时，它在一个隐藏的IFRAME中进行搜索，然后将搜索结果反映到Ajax元素上，以便将应用程序状态恢复到当时的状态。）<br>一个相关的观点认为，使用动态页面更新使得用户难于将某个特定的状态保存到收藏夹中。该问题的解决方案也已出现，大部分都使用URL片断标识符（通常被称为锚点，即URL中#后面的部分）来保持跟踪，允许用户回到指定的某个应用程序状态。（许多浏览器允许JavaScript动态更新锚点，这使得Ajax应用程序能够在更新显示内容的同时更新锚点。）这些解决方案也同时解决了许多关于不支持后退按钮的争论。<br>进行Ajax开发时，网络延迟——即用户发出请求到服务器发出响应之间的间隔——需要慎重考虑。不给予用户明确的回应 [5]，没有恰当的预读数据 [6]，或者对XMLHttpRequest的不恰当处理[7]，都会使用户感到延迟，这是用户不欲看到的，也是他们无法理解的[8]。通常的解决方案是，使用一个可视化的组件来告诉用户系统正在进行后台操作并且正在读取数据和内容。<br>一些手持设备（如手机、PDA等）现在还不能很好的支持Ajax; <br>用JavaScript作的Ajax引擎，JavaScript的兼容性和DeBug都是让人头痛的事; <br>Ajax的无刷新重载，由于页面的变化没有刷新重载那么明显，所以容易给用户带来困扰――用户不太清楚现在的数据是新的还是已经更新过的；现有的解决有：在相关位置提示、数据更新的区域设计得比较明显、数据更新后给用户提示等; <br>对串流媒体的支持没有FLASH、Java Applet好; <br><br><br>
            <div class=titord><span class=arr><a title=返回页首 href="http://baike.baidu.com/view/1641.htm#"></a></span><span class=t1><a name=5></a><strong>Ajax的工作原理</strong></span></div>
            <br>　　Ajax的核心是JavaScript对象XmlHttpRequest。该对象在Internet Explorer 5中首次引入，它是一种支持异步请求的技术。简而言之，XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应，而不阻塞用户。<br><br>　　在创建Web站点时，在客户端执行屏幕更新为用户提供了很大的灵活性。下面是使用Ajax可以完成的功能：<br><br>&nbsp; &nbsp; 动态更新购物车的物品总数，无需用户单击Update并等待服务器重新发送整个页面。 <br><br>&nbsp; &nbsp; 提升站点的性能，这是通过减少从服务器下载的数据量而实现的。例如，在某购物车页面，当更新篮子中的一项物品的数量时，会重新载入整个页面，这必须下载整个页面的数据。如果使用Ajax计算新的总量，服务器只会返回新的总量值，因此所需的带宽仅为原来的百分之一。 消除了每次用户输入时的页面刷新。例如，在Ajax中，如果用户在分页列表上单击Next，则服务器数据只刷新列表而不是整个页面。 <br>直接编辑表格数据，而不是要求用户导航到新的页面来编辑数据。对于Ajax，当用户单击Edit时，可以将静态表格刷新为内容可编辑的表格。用户单击Done之后，就可以发出一个Ajax请求来更新服务器，并刷新表格，使其包含静态、只读的数据。<br><br>　　一切皆有可能！但愿它能够激发您开始开发自己的基于Ajax的站点。然而，在开始之前，让我们介绍一个现有的Web站点，它遵循传统的提交/等待/重新显示的范例，我们还将讨论Ajax如何提升用户体验。<br><br>　　　Ajax的工作原理相当于在用户和服务器之间加了—个中间层，使用户操作与服务器响应异步化。这样把以前的一些服务器负担的工作转嫁到客户端，利于客户端闲置的处理能力来处理，减轻服务器和带宽的负担，从而达到节约ISP的空间及带宽租用成本的目的。<br><br>
            <div class=titord><span class=arr><a title=返回页首 href="http://baike.baidu.com/view/1641.htm#"></a></span><span class=t1><a name=6></a><strong>基础应用</strong></span></div>
            <br>我们以两个验证通行证帐号是否存在的例子来讲述AJAX在实际中的应用：<br><br>(1)用文本字符串的方式返回服务器的响应来验证网易通行证帐号是否存在； <br><br>(2)以XMLDocument对象方式返回响应来验证金山通行证帐号是否存在；<br><br>首先，我们需要用JavaScript来创建<a href="http://baike.baidu.com/view/1105115.htm" target=_blank><u><font color=#0000ff>XMLHttpRequest </font></u></a>类向服务器发送一个HTTP请求， XMLHttpRequest 类首先由Internet Explorer以ActiveX对象引入，被称为XMLHTTP。 后来Mozilla﹑Netscape﹑Safari 和其他浏览器也提供了XMLHttpRequest类，不过它们创建XMLHttpRequest类的方法不同。<br><br>对于Internet Explorer浏览器，创建XMLHttpRequest 方法如下：<br><br>xmlhttp_request = new ActiveXObject("Msxml2.XMLHTTP.3.0"); //3.0或4.0, 5.0 <br>xmlhttp_request = new ActiveXObject("Msxml2.XMLHTTP"); <br>xmlhttp_request = new ActiveXObject("Microsoft.XMLHTTP"); <br><br>由于在不同Internet Explorer浏览器中XMLHTTP版本可能不一致，为了更好的兼容不同版本的Internet Explorer浏览器，因此我们需要根据不同版本的Internet Explorer浏览器来创建XMLHttpRequest类，上面代码就是根据不同的Internet Explorer浏览器创建XMLHttpRequest类的方法。<br><br>对于Mozilla﹑Netscape﹑Safari等浏览器，创建XMLHttpRequest 方法如下：xmlhttp_request = new XMLHttpRequest();<br><br>如果服务器的响应没有XML mime-type header，某些Mozilla浏览器可能无法正常工作。 为了解决这个问题，如果服务器响应的header不是text/xml，可以调用其它方法修改该header。<br><br>xmlhttp_request = new XMLHttpRequest(); <br>xmlhttp_request.overrideMimeType('text/xml'); <br><br>在实际应用中，为了兼容多种不同版本的浏览器，一般将创建XMLHttpRequest类的方法写成如下形式：<br><br>try{ <br>if( window.ActiveXObject ){ <br>for( var i = 5; i; i-- ){ <br>try{ <br>if( i == 2 ){ <br>xmlhttp_request = new ActiveXObject( "Microsoft.XMLHTTP" ); }<br>else{ <br>xmlhttp_request = new ActiveXObject( "Msxml2.XMLHTTP." + i + ".0" ); <br>xmlhttp_request.setRequestHeader("Content-Type","text/xml"); <br>xmlhttp_request.setRequestHeader("Content-Type","gb2312"); }<br>break;} <br>catch(e){ <br>xmlhttp_request = false; } } }<br>else if( window.XMLHttpRequest )<br>{ xmlhttp_request = new XMLHttpRequest(); <br>if (xmlhttp_request.overrideMimeType) <br>{ xmlhttp_request.overrideMimeType('text/xml'); } } }<br>catch(e){ xmlhttp_request = false; } <br><br>在定义了如何处理响应后，就要发送请求了。可以调用HTTP请求类的open()和send()方法，如下所示：<br><br>xmlhttp_request.open('GET', URL, true); <br>xmlhttp_request.send(null); <br><br>open()的第一个参数是HTTP请求方式—GET，POST或任何服务器所支持的您想调用的方式。 按照HTTP规范，该参数要大写；否则，某些浏览器(如Firefox)可能无法处理请求。 <br><br>第二个参数是请求页面的URL。<br><br>第三个参数设置请求是否为异步模式。如果是TRUE，JavaScript函数将继续执行，而不等待服务器响应。这就是"AJAX"中的"A"。<br><br>用JavaScript来创建XMLHttpRequest 类向服务器发送一个HTTP请求后，接下来要决定当收到服务器的响应后，需要做什么。这需要告诉HTTP请求对象用哪一个JavaScript函数处理这个响应。可以将对象的onreadystatechange属性设置为要使用的JavaScript的函数名，如下所示：<br><br>xmlhttp_request.onreadystatechange =FunctionName;<br><br>FunctionName是用JavaScript创建的函数名，注意不要写成FunctionName()，当然我们也可以直接将JavaScript代码创建在onreadystatechange之后，例如：<br><br>xmlhttp_request.onreadystatechange = function(){<br>// JavaScript代码段<br>};<br><br>首先要检查请求的状态。只有当一个完整的服务器响应已经收到了，函数才可以处理该响应。XMLHttpRequest 提供了readyState属性来对服务器响应进行判断。<br><br>readyState的取值如下： <br><br>0 (未初始化) <br><br>1 (正在装载) <br><br>2 (装载完毕) <br><br>3 (交互中) <br><br>4 (完成)<br><br>所以只有当readyState=4时，一个完整的服务器响应已经收到了，函数才可以处理该响应。具体代码如下：<br><br>if (http_request.readyState == 4) { // 收到完整的服务器响应 } <br>else { // 没有收到完整的服务器响应 }<br><br>当readyState=4时，一个完整的服务器响应已经收到了，接着，函数会检查HTTP服务器响应的状态值。完整的状态取值可参见W3C文档。当HTTP服务器响应的值为200时，表示状态正常。<br><br>在检查完请求的状态值和响应的HTTP状态值后，就可以处理从服务器得到的数据了。有两种方式可以得到这些数据：<br><br>(1) 以文本字符串的方式返回服务器的响应<br><br>(2) 以XMLDocument对象方式返回响应<br><br>实例一： 用文本字符串的方式返回服务器的响应来验证网易通行证帐号是否存在<br><br>首先，我们登陆网易通行证注册页面，可以看到检测用户名是否存在是将用户名提交给checkssn.jsp页面进行判断，格式为：<br><br>reg.163.com/register/checkssn.jsp?username=用户名 <br><br>根据上面讲到的方法，我们可以利用AJAX技术对网易通行证用户名进行检测：<br><br>第一步：新建一个基于Xhtml标准的网页，在区域插入Javascript函数如下：<br><br>function getXMLRequester( )<br><br>{ var xmlhttp_request = false; <br><br>try<br><br>{ if( window.ActiveXObject )<br><br>{ for( var i = 5; i; i-- ){ <br><br>try{ <br><br>if( i == 2 )<br><br>{ xmlhttp_request = new ActiveXObject( "Microsoft.XMLHTTP" ); }<br><br>else<br><br>{ xmlhttp_request = new ActiveXObject<br><br>( "Msxml2.XMLHTTP." + i + ".0" ); <br><br>xmlhttp_request.setRequestHeader("Content-Type","text/xml"); <br><br>xmlhttp_request.setRequestHeader("Content-Type","gb2312"); }<br><br>break;} <br><br>catch(e){ xmlhttp_request = false; } } }<br><br>else if( window.XMLHttpRequest )<br><br>{ xmlhttp_request = new XMLHttpRequest();<br><br>if (xmlhttp_request.overrideMimeType)<br><br>{ xmlhttp_request.overrideMimeType('text/xml'); } } }<br><br>catch(e){ xmlhttp_request = false; } <br><br>return xmlhttp_request ; } <br><br>function IDRequest(n) { //定义收到服务器的响应后需要执行的JavaScript函数<br><br>url=n+document.getElementById('163id').value;//定义网址参数<br><br>xmlhttp_request=getXMLRequester();//调用创建XMLHttpRequest的函数<br><br>xmlhttp_request.onreadystatechange = doContents;//调用doContents函数<br><br>xmlhttp_request.open('GET', url, true); <br><br>xmlhttp_request.send(null); } <br><br>function doContents() <br><br>{ if (xmlhttp_request.readyState == 4) {// 收到完整的服务器响应 <br><br>if (xmlhttp_request.status == 200) {//HTTP服务器响应的值OK<br><br>document.getElementById('message').innerHTML = xmlhttp_request.responseText; <br><br>//将服务器返回的字符串写到页面中ID为message的区域 } <br><br>else { alert(http_request.status); } } } <br><br>在区域建立一个文本框，id为163id，再建一个id为messsge的空白区域用来显示返回字符串(也可以通过Javascript函数截取一部分字符串显示)： <br><br>&lt;input type=text id="163id"&gt;<br>&lt;span id="message"&gt;&lt;/span&gt;<br><br>这样，一个基于AJAX技术的用户名检测页面就做好了，不过这个页面将返回服务器响应生成页面的所有字符串，当然还可以对返回的字符串进行一些操作，便于应用到不同的需要当中。<br><br>实例二： 以XMLDocument对象方式返回响应来验证金山通行证帐号是否存在<br><br>在上面的例子中，当服务器对HTTP请求的响应被收到后，我们会调用请求对象的reponseText属性。该属性包含了服务器返回响应文件的内容。现在我们以XMLDocument对象方式返回响应，此时将不再需要reponseText属性而使用responseXML属性。<br><br>首先登陆金山通行证注册页面，我们发现金山通行证用户名的检测方式为： pass.kingsoft.com/ksgweb/jsp/login/uid.jsp?uid=用户名,并且返回XML数据:<br><br>isExistedUid -2 <br><br>当result值为-1时表示此用户名已被注册，当result值为-2时表示此用户名尚未注册，因此通过对result值的判断可以知道用户名是否被注册。<br><br>对上例代码进行修改：<br><br>首先找到<br><br>document.getElementById('message').innerHTML = xmlhttp_request.responseText;<br><br>改为:<br><br>var response = xmlhttp_request.responseXML.documentElement;<br><br>var result = response.getElementsByTagName('result')[0].firstChild.data;//返回result节点数据<br><br>if(result ==-2){<br><br>document.getElementById('message').innerHTML = "用户名"+document.getElementById('163id').value+"尚未注册";}<br><br>else if(result ==-1){<br><br>document.getElementById('message').innerHTML = "对不起,用户名"+document.getElementById('163id').value+"已经注册";}<br><br>通过以上两个实例说明了AJAX的客户端基础应用，采用的是网易和金山现成的服务器端程序，当然为了开发合适自己页面的程序，还需要对自己编写服务器端程序，这设计到程序语言及数据库的操作，对于有一定程序基础的读者一定不是很难的事情。<br><br><br><br><strong>补充：</strong><br>1.Ajax：著名希腊史诗伊利亚特中英雄埃阿斯的名字。<br>2.Ajax：荷兰著名足球俱乐部阿贾克斯，以培养青年球员而著称，并多次夺得欧洲冠军杯。<br><br><span class=arr><a title=返回页首 href="http://baike.baidu.com/view/1641.htm#"></a></span>
            <div class=btn_edit>如果您认为本词条还有待完善，需要补充新内容或修改错误内容，请 <a href="http://baike.baidu.com/edit/id=1641"><img src="http://img.baidu.com/img/baike/btn_edit.gif" align=absMiddle vspace=4 border=0><strong><u><font color=#0000ff>编辑词条</font></u></strong></a></div>
            </div>
            </td>
        </tr>
        <tr>
            <td>
            <div class=ref><strong>开放分类：</strong><br><a href="http://baike.baidu.com/w?ct=17&amp;lm=0&amp;tn=baiduWikiSearch&amp;pn=0&amp;rn=10&amp;submit=search&amp;word=tag:%CD%F8%C2%E7" target=_blank><u><font color=#0000ff>网络</font></u></a>、<a href="http://baike.baidu.com/w?ct=17&amp;lm=0&amp;tn=baiduWikiSearch&amp;pn=0&amp;rn=10&amp;submit=search&amp;word=tag:%B3%CC%D0%F2" target=_blank><u><font color=#0000ff>程序</font></u></a>、<a href="http://baike.baidu.com/w?ct=17&amp;lm=0&amp;tn=baiduWikiSearch&amp;pn=0&amp;rn=10&amp;submit=search&amp;word=tag:%CD%F8%D2%B3%BC%BC%CA%F5" target=_blank><u><font color=#0000ff>网页技术</font></u></a><br>
            <div class=disti>&nbsp;</div>
            <strong>参考资料：</strong><br>&nbsp;1.<a href="http://www.cnic.org/wiki/AJAX" target=_blank><u><font color=#0000ff>http://www.cnic.org/wiki/AJAX</font></u></a> <br>&nbsp;2.<a href="http://blog.inmedia.cn/index.php/2006/03/29/ajaxasbasncn_erd_ac" target=_blank><u><font color=#0000ff>http://blog.inmedia.cn/index.php/2006/03/29/ajaxasbasncn_erd_ac</font></u></a> <br>&nbsp;3.Ajax——JS与XML的精彩组合: <a href="http://www.micy.cn/blog/index.php/archives/199.html" target=_blank><u><font color=#0000ff>http://www.micy.cn/blog/index.php/archives/199.html</font></u></a> <br>&nbsp;4.<a href="http://tech.chinaasp.com/20051123/ajax/31503.shtml" target=_blank><u><font color=#0000ff>http://tech.chinaasp.com/20051123/ajax/31503.shtml</font></u></a> <br>&nbsp;5.<a href="http://www.hotajax.cn/" target=_blank><u><font color=#0000ff>http://www.hotajax.cn</font></u></a> <br>
            <div class=disti>&nbsp;</div>
            <strong>贡献者：</strong><br><a href="http://passport.baidu.com/?detail&amp;apid=1&amp;default_tab=3&amp;un=workstar" target=_blank><u><font color=#0000ff>workstar</font></u></a>、<a href="http://passport.baidu.com/?detail&amp;apid=1&amp;default_tab=3&amp;un=88tags" target=_blank><u><font color=#0000ff>88tags</font></u></a>、<a href="http://passport.baidu.com/?detail&amp;apid=1&amp;default_tab=3&amp;un=vipdu" target=_blank><u><font color=#0000ff>vipdu</font></u></a>、<a href="http://passport.baidu.com/?detail&amp;apid=1&amp;default_tab=3&amp;un=qinyf" target=_blank><u><font color=#0000ff>qinyf</font></u></a>、<a href="http://passport.baidu.com/?detail&amp;apid=1&amp;default_tab=3&amp;un=suyuening2005" target=_blank><u><font color=#0000ff>suyuening2005</font></u></a>、<a href="http://passport.baidu.com/?detail&amp;apid=1&amp;default_tab=3&amp;un=lekai63" target=_blank><u><font color=#0000ff>lekai63</font></u></a>、<a href="http://passport.baidu.com/?detail&amp;apid=1&amp;default_tab=3&amp;un=hatoyu" target=_blank><u><font color=#0000ff>hatoyu</font></u></a>、<a href="http://www.baidu.com/search/baike/kedoutuan/index.html" target=_blank><img title=百科蝌蚪团 src="http://img.baidu.com/img/baike/tadpole.gif" border=0></a>&nbsp;<a href="http://passport.baidu.com/?detail&amp;apid=1&amp;default_tab=3&amp;un=%BB%C3%D3%B0%C4%A7%B5%C1" target=_blank><u><font color=#0000ff>幻影魔盗</font></u></a>、<a href="http://passport.baidu.com/?detail&amp;apid=1&amp;default_tab=3&amp;un=super_phenix" target=_blank><u><font color=#0000ff>super_phenix</font></u></a>、<a href="http://passport.baidu.com/?detail&amp;apid=1&amp;default_tab=3&amp;un=summit677" target=_blank><u><font color=#0000ff>summit677</font></u></a>、<a href="http://passport.baidu.com/?detail&amp;apid=1&amp;default_tab=3&amp;un=%B7%E8%BF%F1%B4%F0%CC%E2%CA%D6" target=_blank><u><font color=#0000ff>疯狂答题手</font></u></a>、<a href="http://passport.baidu.com/?detail&amp;apid=1&amp;default_tab=3&amp;un=%BE%B0%B9%DB%C3%C0" target=_blank><u><font color=#0000ff>景观美</font></u></a>、<a href="http://passport.baidu.com/?detail&amp;apid=1&amp;default_tab=3&amp;un=Kealin" target=_blank><u><font color=#0000ff>Kealin</font></u></a>、<a href="http://passport.baidu.com/?detail&amp;apid=1&amp;default_tab=3&amp;un=wtmgsn" target=_blank><u><font color=#0000ff>wtmgsn</font></u></a>、<a href="http://passport.baidu.com/?detail&amp;apid=1&amp;default_tab=3&amp;un=Jobs_Lee" target=_blank><u><font color=#0000ff>Jobs_Lee</font></u></a>、<a href="http://passport.baidu.com/?detail&amp;apid=1&amp;default_tab=3&amp;un=guoyongfei" target=_blank><u><font color=#0000ff>guoyongfei</font></u></a>、<a href="http://passport.baidu.com/?detail&amp;apid=1&amp;default_tab=3&amp;un=%BB%A2%B3%BA" target=_blank><u><font color=#0000ff>虎澈</font></u></a> </div>
            <div class=ref><strong>本词条在以下词条中被提及：</strong><br><a href="http://baike.baidu.com/view/733.htm" target='\"_blank\"'><u><font color=#0000ff>web2.0</font></u></a>、<a href="http://baike.baidu.com/view/1332553.htm" target='\"_blank\"'><u><font color=#0000ff>SWFUpload</font></u></a>、<a href="http://baike.baidu.com/view/1111734.htm" target='\"_blank\"'><u><font color=#0000ff>2.0文化</font></u></a>、<a href="http://baike.baidu.com/view/476970.htm" target='\"_blank\"'><u><font color=#0000ff>discuz!</font></u></a>、<a href="http://baike.baidu.com/view/68029.htm" target='\"_blank\"'><u><font color=#0000ff>iwf</font></u></a>、<a href="http://baike.baidu.com/view/447185.htm" target='\"_blank\"'><u><font color=#0000ff>Box.net</font></u></a> </div>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.cnitblog.com/lhm108/aggbug/39037.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lhm108/" target="_blank">留声机</a> 2008-01-19 01:54 <a href="http://www.cnitblog.com/lhm108/articles/39037.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>磁盘阵列基础知识</title><link>http://www.cnitblog.com/lhm108/articles/34569.html</link><dc:creator>留声机</dc:creator><author>留声机</author><pubDate>Tue, 09 Oct 2007 03:07:00 GMT</pubDate><guid>http://www.cnitblog.com/lhm108/articles/34569.html</guid><wfw:comment>http://www.cnitblog.com/lhm108/comments/34569.html</wfw:comment><comments>http://www.cnitblog.com/lhm108/articles/34569.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lhm108/comments/commentRss/34569.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lhm108/services/trackbacks/34569.html</trackback:ping><description><![CDATA[<h2 class=post-title><a href="http://www.1979y.com/index.php?id=5"><font color=#000080></font></a>&nbsp;</h2>
<div class=post-body><br>磁盘阵列 <br>磁盘阵列是通过硬件或管理软件将两个或更多的硬盘结合在一起，对于服务器而言是 <br>一个或多个逻辑硬盘。计算机所能看到就是存储空间和剩余的可用空间，不能看到存储空 <br>间是如何在磁盘上存放。通常我们使用SCSI&nbsp;磁盘做磁盘阵列，目前IDE&nbsp;设备也可以采用 <br>阵列技术，但技术水平仍然较低，所以多用于低端的客户机或低端服务器使用。从性能角 <br>度考虑，最好不要在阵列中将多种SCSI&nbsp;设备混合使用。通过使用惠普的磁盘阵列卡可以 <br>配置出各种RAID&nbsp;盘，也可以使用部分网络操作系统实现阵列的配置，但由于运行阵列软 <br>件需要占用大量的CPU&nbsp;和内存资源，所以软件阵列会使服务器的性能降低很多。 <br><br>为什么要使用磁盘阵列？ <br>在评价一个服务器的性能的时候，我我们经常使用一个概念就是木桶原则，在中国南 <br>方常用一种木制的水桶，一个木桶一般采用几木板拼接而成，如果将这个概念引入到服务 <br>器中时可以认为计算机的各部分组件是木桶的各块板子，如果木桶的板子高低不同时，决 <br>定这个木桶的最高水位却是由最低的木板决定。因此在网络服务器的性能评定时，所有部 <br>件中性能最低的设备决定了服务器的最高性能。 <br><br>那么哪些设备性能较低呢？ <br>现在，我们来分析一下一个网络服务器在运行过程中核心组件的性能参数， <br>INTEL&nbsp;PⅢ&nbsp;CPU&nbsp;1000MB/S <br>SDRAM&nbsp;内存800MB/S <br>AGP&nbsp;显卡532～1000MB/S <br>硬盘80MB/S <br>从上面的列表中可以看出，硬盘是网络服务器瓶颈所在，许多人也都有这种感觉，当 <br>我们使用鼠标点击某个应用程序时，屏幕上出现一个小沙漏，硬盘的红灯不停的闪烁，这 <br>是因为我们需要大量的从硬盘读取的相应的程序或数据，而今天硬盘读写速度限制了我们 <br>的程序的快速执行。为什么会这样呢？因为今天我们无论使用IDE&nbsp;硬盘还是普通的SCSI <br>硬盘，在每一时刻只能对计算机内部的一块硬盘进行读或者写的操作，现在的硬盘理论上 <br>可以支持到每秒80MB&nbsp;的速率，但在实际运行时往往是达不到的，较好的情况下恒定读写 <br>速率可以达到每秒20MB&nbsp;左右，这已经是一个非常理想的指标了，但与CPU&nbsp;和内存的IO <br>速率相比是在是太低了。那有没有解决的办法呢？ <br><br>硬件阵列 <br><br>普通的SCSI&nbsp;卡在每一时刻只能对一块硬盘读写，有没有可以同时对多块硬盘的读写 <br>的SCSI&nbsp;控制卡呢？有，惠普公司所提供的NetRAID&nbsp;阵列卡就是性能卓越，功能强大的阵 <br>列卡，通过惠普的阵列卡可以同时对多达几十块硬盘进行读写，普通的SCSI&nbsp;卡只能提供 <br>512KB&nbsp;的高速缓存，而惠普的阵列可以配置16～256MB&nbsp;的高速缓存，与传统的SCSI&nbsp;卡相 <br>比，性能提供了数十倍，通过实际测试，效果惊人。而且惠普阵列卡还提供硬盘损坏时数 <br>据自动恢复功能，当硬盘容量不够时，可以在网络操作系统运行的状态下直接带电插入一 <br>块新的硬盘，并将新插入的硬盘动态添加到原有的磁盘阵列当中，实现在线容量扩充。惠 <br>普的NetRAID&nbsp;阵列还有多种强大的功能，在此不作详细赘述。 <br>通过上面介绍我们有了解决硬盘子系统性能较低的解决方案，实际上，使用磁盘阵列 <br>技术还有另外一个重要的原因，那就是通过磁盘阵列可以有效实现数据冗余，通过磁盘阵 <br>列技术可以将数据以镜像或校验的方式存贮起来，一旦磁盘阵列中的某块硬盘出现了故障， <br>其余的硬盘仍然可以将保存的数据恢复出来。 <br>总结磁盘阵列优势就是： <br>&nbsp;&nbsp;最大限度的提高磁盘子系统的IO&nbsp;性能 <br>&nbsp;&nbsp;为服务器提供数据冗余 <br>硬件阵列组成：阵列卡＋硬盘 <br><br>软件阵列 <br>软件阵列是指通过网络操作系统自身提供的磁盘管理功能将连接的普通SCSI&nbsp;卡上的 <br>多块硬盘配置成逻辑盘，软件阵列可以提供数据冗余，但硬盘子系统的性能会有所降低。 <br>目前Windows&nbsp;NT、NetWare、Linux&nbsp;几种操作系统都可以提供软件阵列功能，其中Windows <br>NT&nbsp;可以提供RAID0、RAID1、RAID5。NetWare&nbsp;操作系统可以实现RAID1&nbsp;功能。 <br>分析一下软件阵列的工作原理就可以了解软件阵列的优点与缺点，当我们使用软件阵 <br>列将硬盘配置RAID1&nbsp;或RAID5&nbsp;时，数据以镜像或校验方式存贮，当某块硬盘出现故障， <br>存贮在RAID&nbsp;盘中数据仍然不会丢失，保障了数据的安全。由于软件阵列使用普通SCSI <br>卡，几乎所有的网络服务器都可以使用软件阵列配置，软件随网络操作系统免费提供，配 <br>置软件阵列时，只需另外添加相同的硬盘即可实现，因此，软件阵列实现成本低，配置简 <br>单方便，易于使用。 <br><br>软件阵列的缺点是要实现软件阵列需要执行相应的磁盘管理程序，过去对一块硬盘进 <br>行操作，而现在需要对更多的硬盘的进行操作，因此需要占用网络服务器的CPU&nbsp;及内存资 <br>源，同时为了保证数据的同步，需要额外增加数据校验的步骤，因此服务器在硬盘子系统 <br>的整体性能比单一硬盘要有所下降，服务器还需要额外提供CPU&nbsp;和内存资源供磁盘管理工 <br>具使用，因此服务器的整体性能下降了大约20～30%。同时软件阵列还不具有硬件阵列的 <br>在线扩容、动态修改盘阵级别，自动数据恢复等诸多功能。我们说，软件阵列是用性能换 <br>安全。 <br>软件阵列组成：服务器的SCSI&nbsp;卡＋硬盘＋操作系统阵列程序 <br><br>阵列卡与硬件阵列 <br><br>磁盘阵列控制器 <br>磁盘阵列控制器 <br>D2140A&nbsp;NetRAID&nbsp;-1Si磁盘阵列卡 <br>D5955A&nbsp;NetRAID&nbsp;-3Si&nbsp;磁盘阵列卡 <br>P3410A&nbsp;NetRAID&nbsp;-1M磁盘阵列卡(Ultra3,1通道) <br>P3411A&nbsp;NetRAID&nbsp;-2M磁盘阵列卡(Ultra3,2通道,64MB缓存) <br>P3475A&nbsp;NetRAID&nbsp;-2M磁盘阵列卡(Ultra3,2通道,128MB缓存) <br>D9161A&nbsp;NetRAID&nbsp;-4M磁盘阵列卡(Ultra3,4通道,64MB缓存) <br>D9351A&nbsp;NetRAID&nbsp;-4M磁盘阵列卡(Ultra3,4通道,128MB缓存) <br>物理硬盘 <br>物理硬盘即物理驱动器。惠普目前所提供的硬盘有9GB、18GB、36GB&nbsp;和72GB&nbsp;多种 <br>容量。 <br>逻辑硬盘 <br>逻辑硬盘是由物理硬盘的一部分或多个物理硬盘结合在一起组成的。通过操作系统几 <br>个物理硬盘可以分成两个逻辑硬盘，如C：盘和D：盘。或将两个物理硬盘组成一个更大 <br>的逻辑硬盘。 <br>逻辑硬盘可作为物理盘的一部分 <br>可以将一个物理硬盘可分成多个逻辑盘，并指明驱动盘符和容量大小。这样一个物理 <br>盘可以被分成多个盘符和不同的容量。 <br>逻辑硬盘可以由多个物理盘组成 <br>可以将多个物理盘可结合在一起组成一个大的逻辑盘。 <br>对于操作系统来说，它不能区分物理盘和逻辑盘，它认为是一样的。通过逻辑盘的技 <br>术能实现磁盘吞吐量增大或磁盘冗余。 <br><br>RAID&nbsp;阵列技术特点 <br><br>RAID&nbsp;0&nbsp;条带存储(Striping): <br>将数据分散防止在阵列的各个硬盘上，每个硬盘均存贮不同的数据，具有最大数据存 <br>储容量;&nbsp;低成本;&nbsp;速度很快，但没有数据冗余。RAID0&nbsp;是一个比较特殊的磁盘阵列，通常 <br>用于不要求数据有冗余，但要求磁盘阵列的性能较高时使用。例如，临时存放数据。转存 <br>数据库，为满足高速访问而设置的临时数据库等。 <br><br>RAID&nbsp;1&nbsp;镜像/双工(Mirroring&nbsp;/&nbsp;Duplexing): <br>RAID1&nbsp;采用两块硬盘互为镜像，每块硬盘存贮的数据均与另一块相同。当一块硬盘出现故 <br>障时，另一块硬盘继续工作，保障系统的继续运行。具有最大冗余;&nbsp;快速恢复的功能，但 <br>成本较高。存贮容量为一块硬盘的容量。适合于作操作系统，要求安全的数据存贮。 <br><br>RAID&nbsp;3&nbsp;(条带分布+专用盘校验): <br>RAID3&nbsp;使用至少三块硬盘配置，在其中的一块硬盘上存贮专用的校验数据，当某块硬盘出 <br>现故障时，其它硬盘可以通过校验数据将有故障的硬盘的数据重新恢复出来，由于使用一 <br>块硬盘作为校验使用，所以实际可以使用的硬盘容量为N-1。RAID3&nbsp;在高可用性、成本、 <br>性能间获得平衡，由于需要计算校验数据会导致速度稍慢，要求3&nbsp;块硬盘或更多。 <br><br>RAID&nbsp;5&nbsp;(条带技术+&nbsp;分布式校验): <br>RAID5&nbsp;使用至少三块硬盘配置，与RAID3&nbsp;所不同的是，RAID5&nbsp;将所有校验的数据分别存 <br>贮在所有的硬盘上，每一个硬盘的不同地方既存贮数据，也存贮校验数据。当某块硬盘出 <br>现故障时，其它硬盘可以通过校验数据将故障的硬盘的数据重新恢复出来，由于所有校验 <br>数据要使用一块硬盘的容量作为校验使用，所以实际可以使用的硬盘容量为N-1。RAID5 <br>在高可用性、成本、性能间获得平衡，由于计算校验导致速度稍慢;&nbsp;但比使用RAID&nbsp;3&nbsp;稍 <br>好。要求3&nbsp;块硬盘或更多。 <br><br>RAID&nbsp;10&nbsp;(Striping&nbsp;of&nbsp;Mirrored&nbsp;Arrays): <br>RAID10&nbsp;是由惠普独家提供的特殊的磁盘阵列，它是建立在RAID1&nbsp;和RAID0&nbsp;的基础上而 <br>形成的。使用四块或六块、八块硬盘。每两块硬盘作RAID1，然后将形成的低级阵列重新 <br>组合作RAID0。这样，RAID10&nbsp;可以在多数情况下，两个硬盘同时损坏仍然可以继续工作， <br>所以容错能力大大提高。由于采用多个阵列组合，冗余的硬盘也增加为两个，所以有效使 <br>用的容量为N-2。容量大于RAID&nbsp;1，成本较高。 <br><br>RAID&nbsp;30&nbsp;(Striping&nbsp;of&nbsp;Dedicated&nbsp;Parity&nbsp;Arrays): <br>RAID30&nbsp;是由惠普独家提供的特殊的磁盘阵列，它是建立在RAID3&nbsp;和RAID0&nbsp;的基础上而 <br>形成的。使用6、8、10、12、14、16、32&nbsp;块硬盘。先使用3&nbsp;块或更多的硬盘作RAID3， <br>然后将形成的低级阵列重新组合作RAID0。这样，RAID30&nbsp;可以在多数情况下，两个硬盘 <br>同时损坏仍然可以继续工作，所以容错能力大大提高。由于采用多个阵列组合，冗余的硬 <br>盘也增加为两个，所以有效使用的容量为N-2。容量较高，硬盘的读的性能较高，适合作 <br>为检索服务器等要求读性能较高的系统使用，成本较高。 <br><br>RAID&nbsp;50&nbsp;(Striping&nbsp;of&nbsp;Distributed&nbsp;Parity&nbsp;Arrays): <br>RAID50&nbsp;是由惠普独家提供的特殊的磁盘阵列，它是建立在RAID5&nbsp;和RAID0&nbsp;的基础上而 <br>形成的。使用6、8、10、12、14、16、32&nbsp;块硬盘。先使用3&nbsp;块或更多的硬盘作RAID5， <br>然后将形成的低级阵列重新组合作RAID0。这样，RAID50&nbsp;可以在多数情况下，两个硬盘 <br>同时损坏仍然可以继续工作，所以容错能力大大提高。由于采用多个阵列组合，冗余的硬 <br>盘也增加为两个，所以有效使用的容量为N-2。容量较高，硬盘的读的性能较高，适合作 <br>为检索服务器等要求读性能较高的系统使用，成本较高。容量大于RAID&nbsp;RAID&nbsp;5;</div>
<img src ="http://www.cnitblog.com/lhm108/aggbug/34569.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lhm108/" target="_blank">留声机</a> 2007-10-09 11:07 <a href="http://www.cnitblog.com/lhm108/articles/34569.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Raid教程：全程图解手把手教你做RAID</title><link>http://www.cnitblog.com/lhm108/articles/34567.html</link><dc:creator>留声机</dc:creator><author>留声机</author><pubDate>Tue, 09 Oct 2007 03:04:00 GMT</pubDate><guid>http://www.cnitblog.com/lhm108/articles/34567.html</guid><wfw:comment>http://www.cnitblog.com/lhm108/comments/34567.html</wfw:comment><comments>http://www.cnitblog.com/lhm108/articles/34567.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lhm108/comments/commentRss/34567.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lhm108/services/trackbacks/34567.html</trackback:ping><description><![CDATA[<p>【51CTO.com综合报道】说到磁盘阵列（RAID，Redundant Array of Independent Disks），现在几乎成了网管员所必须掌握的一门技术之一，特别是中小型企业，因为磁盘阵列应用非常广泛，它是当前数据备份的主要方案之一。然而，许多网管员只是在各种媒体上看到相关的理论知识介绍，却并没有看到一些实际的磁盘阵列配置方法，所以仍只是一知半解，到自己真正配置时，却无从下手。本文要以一个具体的磁盘阵列配置方法为例向大家介绍磁盘阵列的一些基本配置方法，给出一些关键界面，使各位对磁盘阵列的配置有一个理性认识。当然为了使各位对磁盘阵列有一个较全面的介绍，还是先来简要回顾一下有关<a href="http://stor.51cto.com/col/232/"><font color=#000080>磁盘阵列</font></a>的理论知识，这样可以为实际的配置找到理论依据。</p>
<p><strong>一、磁盘阵列实现方式</strong></p>
<p>磁盘阵列有两种方式可以实现，那就是&#8220;软件阵列&#8221;与&#8220;硬件阵列&#8221;。</p>
<p>软件阵列是指通过网络操作系统自身提供的磁盘管理功能将连接的普通SCSI卡上的多块硬盘配置成逻辑盘，组成阵列。如微软的Windows NT/2000 Server/Server 2003和NetVoll的NetWare两种操作系统都可以提供软件阵列功能，其中Windows NT/2000 Server/Server 2003可以提供RAID 0、RAID 1、RAID 5；NetWare操作系统可以实现RAID 1功能。软件阵列可以提供数据冗余功能，但是磁盘子系统的性能会有所降低，有的降代还比较大，达30%左右。</p>
<p>硬件阵列是使用专门的磁盘阵列卡来实现的，这就是本文要介绍的对象。现在的非入门级服务器几乎都提供磁盘阵列卡，不管是集成在主板上或非集成的都能轻松实现阵列功能。硬件阵列能够提供在线扩容、动态修改阵列级别、自动数据恢复、驱动器漫游、超高速缓冲等功能。它能提供性能、数据保护、可靠性、可用性和可管理性的解决方案。磁盘阵列卡拥有一个专门的处理器，如Intel的I960芯片，HPT370A/372 、Silicon Image SIL3112A等，还拥有专门的存贮器，用于高速缓冲数据。这样一来，服务器对磁盘的操作就直接通过磁盘阵列卡来进行处理，因此不需要大量的CPU及系统内存资源，不会降低磁盘子系统的性能。阵列卡专用的处理单元来进行操作，它的性能要远远高于常规非阵列硬盘，并且更安全更稳定。</p>
<p><strong>二、几种磁盘阵列技术</strong></p>
<p><a href="http://stor.51cto.com/art/200602/20219.htm"><font color=#000080>RAID</font></a>技术是一种工业标准，各厂商对RAID级别的定义也不尽相同。目前对RAID级别的定义可以获得业界广泛认同的有4种，<a href="http://www.51cto.com/art/200512/15770.htm"><font color=#000080>RAID 0</font></a>、<a href="http://www.51cto.com/art/200512/15771.htm"><font color=#000080>RAID 1</font></a>、<a href="http://www.51cto.com/art/200512/15772.htm"><font color=#000080>RAID 0＋1</font></a>和<a href="http://www.51cto.com/art/200512/15775.htm"><font color=#000080>RAID 5</font></a>。 </p>
<p>RAID 0是无数据冗余的存储空间条带化，具有成本低、读写性能极高、存储空间利用率高等特点，适用于音、视频信号存储、临时文件的转储等对速度要求极其严格的特殊应用。但由于没有数据冗余，其安全性大大降低，构成阵列的任何一块硬盘的损坏都将带来灾难性的数据损失。这种方式其实没有冗余功能，没有安全保护，只是提高了磁盘读写性能和整个服务器的磁盘容量。一般只适用磁盘数较少、磁盘容易比较紧缺的应用环境中，如果在RAID 0中配置4块以上的硬盘，对于一般应用来说是不明智的。 </p>
<p>RAID 1是两块硬盘数据完全镜像，安全性好，技术简单，管理方便，读写性能均好。因为它是一一对应的，所以它无法单块硬盘扩展，要扩展，必须同时对镜像的双方进行同容量的扩展。因为这种冗余方式为了安全起见，实际上只利用了一半的磁盘容量，数据空间浪费大。 </p>
<p>RAID 0＋1综合了RAID 0和RAID 1的特点，独立磁盘配置成RAID 0，两套完整的RAID 0互相镜像。它的读写性能出色，安全性高，但构建阵列的成本投入大，数据空间利用率低。</p>
<p>RAID 5是目前应用最广泛的RAID技术。各块独立硬盘进行条带化分割，相同的条带区进行奇偶校验（异或运算），校验数据平均分布在每块硬盘上。以n块硬盘构建的RAID 5阵列可以有n－1块硬盘的容量，存储空间利用率非常高。任何一块硬盘上的数据丢失，均可以通过校验数据推算出来。它和RAID 3最大的区别在于校验数据是否平均分布到各块硬盘上。RAID 5具有数据安全、读写速度快，空间利用率高等优点，应用非常广泛，但不足之处是如果1块硬盘出现故障以后，整个系统的性能将大大降低。</p>
<p>RAID 1、RAID 0＋1、RAID 5阵列配合热插拔（也称热可替换）技术，可以实现数据的在线恢复，即当RAID阵列中的任何一块硬盘损坏时，不需要用户关机或停止应用服务，就可以更换故障硬盘，修复系统，恢复数据，对实现高可用系统具有重要的意义。 </p>
<p><strong>三、磁盘阵列配置实例</strong></p>
<p>当硬盘连接到阵列卡（RAID）上时，操作系统将不能直接看到物理的硬盘，因此需要创建成一个一个的被设置为RAID0、1或者5等的逻辑磁盘（也叫容器），这样系统才能够正确识别它。当然，逻辑磁盘（Logic Drive）、容器（Container）或虚拟磁盘（Virtual Drive）均表示一个意思，只是不同阵列卡产商的不同叫法。可参见以下配置的服务器有Dell Power Edge 7x0系列和Dell PowerEdge 1650服务器。</p>
<p>磁盘阵列的配置通常是利用磁盘阵列卡的BIOS工具进行的，也有使用第三方提供的配置工具软件去实现对阵列卡的管理，如Dell Array Manager。本文要介绍的是在DELL服务器中如何利用阵列卡的BIOS工具进行磁盘阵列配置的方法。</p>
<p>如果在您的DELL服务器中采用的是Adaptec磁盘阵列控制器（PERC2、PERC2/SI、PERC3/SI和PERC3/DI），在系统开机自检时将看到以下信息:</p>
<p>Dell PowerEdge Expandable RAID Controller 3/Di, BIOS V2.7-x [Build xxxx]（c） 1998-2002 Adaptec, Inc. All Rights Reserved. &lt;&lt;&lt; Press CTRL+A for Configuration Utility! &gt;&gt;&gt;</p>
<p>如果您的DELL服务器配置的是一块AMI/LSI磁盘阵列控制器（PERC2/SC、PERC2/DC、PERC3/SC、PERC3/DC、PERC4/DI和PERC4/DC），则在系统开机自检的时候将看到以下信息:</p>
<p>Dell PowerEdge Expandable RAID Controller BIOS X.XX Jun 26.2001 Copyright （C） AMERICAN MEGATRENDS INC.<br><br>Press CTRL＋M to Run Configuration Utility or Press 　CTRL＋H　for WebBios或者<br><br>PowerEdge Expandable RAID Controller BIOS X.XX Feb 03,2003 Copyright （C） LSI Logic Corp.<br><br>Press CTRL＋M to Run Configuration Utility or Press CTRL＋H　for WebBios</p>
<p>下面对以上两种情况分别予以介绍。</p>
<p>&nbsp;</p>
<p><span class=top11></span></p>
<p>&nbsp;</p>
<p>1. 在Adaptec磁盘阵列控制器上创建Raid（容器）</p>
<p>在这种阵列卡上创建容器的步骤如下（注意：请预先备份您服务器上的数据，配置磁盘阵列的过程将会删除服务器硬盘上的所有数据!）：</p>
<p>第1步，首先当系统在自检的过程中出现如（图1）提示时，同时按下&#8220;Ctrl+A&#8221;组合键。进入如（图2）所示的磁盘阵列卡的配置程序界面。</p>
<p align=center><img style="WIDTH: 505px; HEIGHT: 203px" height=208 alt="" src="http://stor.51cto.com/files/uploadimg/20060414/1054020.JPG" width=596 border=0></p>
<p align=center>图一</p>
<p align=center><img style="WIDTH: 498px; HEIGHT: 161px" height=178 alt="" src="http://stor.51cto.com/files/uploadimg/20060414/1054021.JPG" width=570 border=0></p>
<p align=center>图二</p>
<p align=left>第2步，然后选择&#8220;Container configuration utility&#8221;，进入如（图3）所示配置界面。</p>
<p align=center><img height=111 alt="" src="http://stor.51cto.com/files/uploadimg/20060414/1054022.JPG" width=550 border=0></p>
<p align=center>图三</p>
<p align=left>第3步，选择&#8220;Initialize Drivers&#8220;选项去对新的或是需要重新创建容器的硬盘进行初始化（注意: 初始话硬盘将删去当前硬盘上的所有数据），按回车后进入如（图4）所示界面。在这个界面中出现了RAID卡的通道和连接到该通道上的硬盘，使用&#8220;Insert&#8221;键选中需要被初始化的硬盘（具体的使用方法参见界面底部的提示，下同）。</p>
<p align=center><img height=307 alt="" src="http://stor.51cto.com/files/uploadimg/20060414/1054023.JPG" width=505 border=0></p>
<p align=center>图四</p>
<p align=left>第4步，全部选择完成所需加入阵列的磁盘后，按加车键，系统键弹出如（图5）所示警告提示框。提示框中提示进行初始化操作将全部删除所选硬盘中的数据，并中断所有正在使用这些硬盘的用户。</p>
<p align=center><img style="WIDTH: 486px; HEIGHT: 92px" height=92 alt="" src="http://stor.51cto.com/files/uploadimg/20060414/1054024.JPG" width=592 border=0></p>
<p align=center>图五</p>
<p align=left>第5步，按&#8220;Y&#8221;键确认即可，进入如（图6）所示配置主菜单（Main Menu）界面。硬盘初始化后就可以根据您的需要，创建相应阵列级别（RAID1,RAID0等）的容器了。这里我们以RAID5为例进行说明。在主菜单界面中选择&#8220;Create container&#8221;选项。</p>
<p align=center><img style="WIDTH: 426px; HEIGHT: 132px" height=159 alt="" src="http://stor.51cto.com/files/uploadimg/20060414/1054025.JPG" width=426 border=0></p>
<p align=center>图六</p>
<p align=center>&nbsp;</p>
<p align=center>&nbsp;</p>
<p align=left><span class=top11></span></p>
<p>&nbsp;</p>
<p align=left>第6步，按回车键后进入如（图7）所示配置界面，用&#8220;insert&#8221;键选中需要用于创建Container（容器）的硬盘到右边的列表中去。然后按回车键。在弹出来的如（图8）所示配置界面中用回车选择RAID级别，输入Container的卷标和大小。其它均保持默认不变。然后在&#8220;Done&#8221;按钮上单击确认即可。</p>
<p align=center><img style="WIDTH: 434px; HEIGHT: 253px" height=306 alt="" src="http://stor.51cto.com/files/uploadimg/20060414/1054026.JPG" width=536 border=0></p>
<p align=center>图七</p>
<p align=center><img style="WIDTH: 430px; HEIGHT: 220px" height=277 alt="" src="http://stor.51cto.com/files/uploadimg/20060414/1054027.JPG" width=510 border=0></p>
<p align=center>图八</p>
<p align=left>第7步，这是系统会出现如（图9）所示提示，提示告诉用户当所创建的容器没有被成功完成&#8220;Scrub（清除）&#8221;之前，这个容器是没有冗余功能的。</p>
<p align=center><img style="WIDTH: 435px; HEIGHT: 79px" height=91 alt="" src="http://stor.51cto.com/files/uploadimg/20060414/1054028.JPG" width=495 border=0></p>
<p align=center>图九</p>
<p align=left>第8步，单击回车后返回到如（图6）所示主菜单配置界面，选中&#8220;Manage containers&#8221;选项，单击回车后即弹出当前的容器配置状态，如（图10）所示。选中相应的容器，检查这个容器的&#8220;Container Status&#8221;选项中的&#8220;Scrub&#8221;进程百分比。当它变为&#8220;Ok&#8221;后，这个新创建的Container便具有了冗余功能。</p>
<p align=center><img style="WIDTH: 441px; HEIGHT: 253px" height=281 alt="" src="http://stor.51cto.com/files/uploadimg/20060414/1054029.JPG" width=492 border=0></p>
<p align=center>图十</p>
<p align=left>第9步，容不得器创建好后，使用&#8220;ESC&#8221;键退出磁盘阵列配置界面，并重新启动计算机即可。</p>
<p align=left>2. 在AIM/LSI磁盘阵列控制器上创建Logical Drive（逻辑磁盘） </p>
<p align=left>注意：请预先备份您服务器上的数据，配置磁盘阵列的过程将会删除您的硬盘上的所有数据!整个磁盘阵列配置过程与上面介绍的在Adaptec磁盘阵列控制器上创建容器的方法类似。具体如下：</p>
<p align=left>第1步，在开机自检过程中，出现如（图11）所示提示时，按下&#8220;Control+M&#8221;组合键，进入如（图12）所示的RAID的配置界面。</p>
<p align=center><img height=102 alt="" src="http://stor.51cto.com/files/uploadimg/20060414/10540210.JPG" width=473 border=0></p>
<p align=center>图十一</p>
<p align=center><img style="WIDTH: 441px; HEIGHT: 229px" height=243 alt="" src="http://stor.51cto.com/files/uploadimg/20060414/10540211.JPG" width=431 border=0></p>
<p align=center>图十二</p>
<p align=left>&nbsp;</p>
<p align=left><span class=top11></span>
<p align=left>&nbsp;</p>
<p align=left><span class=top11></span>
<p align=left>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p align=left>第6步，按空格键选择阵列跨接信息，例如Span-1（跨接-1），出现在阵列框内。 可以创建多个阵列，然后选择将其跨接。</p>
<p align=left>第7步，按&#8220;F10&#8221;键配置逻辑磁盘。选择合适的RAID类型，其余接受默认值。选中&#8220;Accept&#8221;，并按回车键确认，即弹出如（图18）所示的最终配置信息提示框。</p>
<p align=center><img style="WIDTH: 457px; HEIGHT: 254px" height=254 alt="" src="http://stor.51cto.com/files/uploadimg/20060414/10540217.JPG" width=447 border=0></p>
<p align=center>图十八</p>
<p align=left>&nbsp;第8步，刚创建的逻辑磁盘需要经过初始化才能使用。按ESC 键返回到如（图13）所示的主菜单，选中&#8220;Initialize&#8221;选项，并按回车键，进入如（图19）所示初始化逻辑磁盘界面。</p>
<p align=center><img style="WIDTH: 456px; HEIGHT: 232px" height=225 alt="" src="http://stor.51cto.com/files/uploadimg/20060414/10540218.JPG" width=450 border=0></p>
<p align=center>图十九</p>
<p align=left>第9步，选中需要初始化的逻辑磁盘，按空格，弹出一个询问对话框，如（图20）所示。选中&#8220;YES&#8221;，并按回车键，弹出初始化进程<font color=#ff0000>（注意，初始化磁盘化损坏磁盘中的原有数据，需事先作好备份）。</font></p>
<p align=center><img height=245 alt="" src="http://stor.51cto.com/files/uploadimg/20060414/10540219.JPG" width=477 border=0></p>
<p align=center>图二十</p>
<p align=left>&nbsp;</p>
<p align=left>第10步，初始化完成后，按任意键继续，并重启系统，RAID配置完成。（责任编辑：feiry&nbsp; <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#102;&#101;&#105;&#114;&#121;&#48;&#48;&#49;&#64;&#49;&#50;&#54;&#46;&#99;&#111;&#109;"><font color=#000080>feiry001@126.com</font></a>）<br></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p align=left>第2步，按任意键继续，继续进入如（图13）所示管理主菜单（Management Menu）配置界面。选中&#8220;Configure&#8221;选项，然后按回车键，即弹出下级子菜单，如（图14）所示。</p>
<p align=center><img style="WIDTH: 474px; HEIGHT: 216px" height=261 alt="" src="http://stor.51cto.com/files/uploadimg/20060414/10540212.JPG" width=486 border=0></p>
<p align=center>图十三</p>
<p align=center><img style="WIDTH: 466px; HEIGHT: 259px" height=281 alt="" src="http://stor.51cto.com/files/uploadimg/20060414/10540213.JPG" width=408 border=0></p>
<p align=center>图十四</p>
<p align=left>第3步，如果需要重新配置一个RAID，请选中&#8220;New Configuration&#8221;；如果已经存在一个可以使用的逻辑磁盘，请选中&#8220;View/Add Configuration&#8221;，并按回车键。在此，我们以新建磁盘阵列为例进行介绍。选择&#8220;New Configuration&#8221;选项。按回车键后，弹出一个小对话框，如（图15）所示。</p>
<p align=center><img style="WIDTH: 459px; HEIGHT: 234px" height=241 alt="" src="http://stor.51cto.com/files/uploadimg/20060414/10540214.JPG" width=445 border=0></p>
<p align=center>图十五</p>
<p align=left>第4步，选择&#8220;YES&#8221;项 ，并按回车键，进入如（图16）所示配置界面。使用空格键选中准备要创建逻辑磁盘的硬盘，当该逻辑磁盘里最后的一个硬盘被选中后，按回车键。</p>
<p align=center><img style="WIDTH: 458px; HEIGHT: 247px" height=247 alt="" src="http://stor.51cto.com/files/uploadimg/20060414/10540215.JPG" width=454 border=0></p>
<p align=center>图十六</p>
<p align=left>第5步，如果您的服务器中的阵列卡类型是PERC4 DI/DC，此时在回车后，将显示如（图17）所示配置界面，否则请直接赶往第7步。</p>
<p align=center><img style="WIDTH: 458px; HEIGHT: 248px" height=248 alt="" src="http://stor.51cto.com/files/uploadimg/20060414/10540216.JPG" width=450 border=0></p>
<p align=center>图十七</p>
<img src ="http://www.cnitblog.com/lhm108/aggbug/34567.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lhm108/" target="_blank">留声机</a> 2007-10-09 11:04 <a href="http://www.cnitblog.com/lhm108/articles/34567.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL的约束</title><link>http://www.cnitblog.com/lhm108/articles/31278.html</link><dc:creator>留声机</dc:creator><author>留声机</author><pubDate>Sun, 05 Aug 2007 13:23:00 GMT</pubDate><guid>http://www.cnitblog.com/lhm108/articles/31278.html</guid><wfw:comment>http://www.cnitblog.com/lhm108/comments/31278.html</wfw:comment><comments>http://www.cnitblog.com/lhm108/articles/31278.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lhm108/comments/commentRss/31278.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lhm108/services/trackbacks/31278.html</trackback:ping><description><![CDATA[<p><a href="http://www.cnitblog.com/lhm108/"></a>&nbsp;</p>
<h2><span style="COLOR: #000000">创建约束、唯一约束</span></h2>
<div class="entry-body nerr">
<p><strong>创建约束：</strong></p>
<p><strong>主键：</strong>constraint<em> 约束名</em> primary key(列名1【，列名2...】)</p>
<p>也可以在创建表结构的时候在主键字段后直接加上 primary key。</p>
<p>创建联合主键的时候只可以用第一种方法，且需要输入多个列名</p>
<p><strong>外键：</strong>constriant 约束名 foreign key(列名) reference 表名（列名） 。在oracle中只能这样创建外键。</p>
<p><strong>唯一约束：</strong>constraint 约束名 unique（列名）</p>
<p><strong>check约束：</strong>constraint 约束名 check （条件。。。）</p>
<p>例如：constraint nl check (balance&gt;5000 and balance&lt;10000)</p>
<p>&nbsp;</p>
<p>
<p><strong>添加约束：</strong></p>
<p>alter table <em>tablename</em> add constraint ........</p>
<p>例如 alter table t_stu_profile add constraint id primary key(stu_id);</p>
<p>alter table student add constraint ck_sal check(sal between 500 and 1000));</p>
<p><strong>删除约束：</strong></p>
<p>alter table <em>tablename </em>drop constraint <em>约束名</em></p>
<p><strong>查看约束:</strong></p>
<p>--查看表't_stu_profile'的约束名和约束类型</p>
<p>select constraint_name,constraint_type<br>from user_constraints<br>where table_name = 't_stu_profile'</p>
<p>user_constraints数据字典表</p>
<p>--查看约束作用在什么字段上<br>select * from user_cons_columns<br>where CONSTRAINT_NAME=(约束名');</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>===========================================<br>SQL Server唯一约束</p>
<p>1、在数据库关系图中右击将包含约束的表，然后从快捷菜单中选择"属性"命令。 <br>-或-<br>打开表设计器，在表设计器中右击，然后从快捷菜单中选择"属性"命令。<br>2、选择"索引/键"选项卡。<br>3、选择"新建"命令。系统分配的名称出现在"索引名"框中。 <br>4、在"列名"下展开列的列表，选择要将约束附加到的列(在这里我们选择列EntryID、BlogID)。<br>5、选择"创建 UNIQUE"复选框。<br>6、选择"约束"选项。 <br>当保存表或关系图时，唯一约束即创建在数据库中。</p>
<br></div>
<img src ="http://www.cnitblog.com/lhm108/aggbug/31278.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lhm108/" target="_blank">留声机</a> 2007-08-05 21:23 <a href="http://www.cnitblog.com/lhm108/articles/31278.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>