??xml version="1.0" encoding="utf-8" standalone="yes"?> qo器Filter主要功能是:1、完成安全检查;2、重新格式化h首部或体Q?、徏立请求审计或记录日志---hqo器Filter 1、压~响应流Q?、追加或者修改响应流Q?、创Z个定制响?--响应qo器Filter 1、实C個FilterQ代码如下: 2、实C个HttpServletResponseWrapper 3、实C个Writer 在Writer中,你便可以随心所Ʋ的修改Response的內容了?/p>
4、在Web.xml中加入相应的配置元素Q对JSPq行拦截?/p> JDOM是两位著名的 Java 开发h员兼作者,Brett Mclaughlin ?Jason Hunter 的创作成果, 2000 q初?/font>c?/u>g Apache 协议的许可下QJDOM 作ؓ一个开放源代码目正式开始研发,JDOM 作ؓ一个开放源代码目正式开始了。它已成长ؓ包含来自q泛?Java 开发h员的投稿、集中反馈及错误修复的系l,q致力于建立一个完整的Z Java q_的解x案,通过 Java 代码来访问、操作ƈ输出 XML 数据? 虽然许多Java 开发h员每天都在?XMLQSun 却在?XML 整合q?Java q_斚w落后了。因为在 XML 成ؓ从商家对商家集成?Web 站点内容水化等斚w的关键技术之前,Java 2 q_已l非常流行了。Sun 已经使用 JSR q程使之成ؓ现存 XML API 的E,q一点已被广泛接受。目前最显著的是加入?JAXP Q用?XML 语法分析?Java APIQ,其中包含了三?a target=_new>软g?/font>Q? ·org.w3c.dom QW3C 推荐的用?XML 标准规划文档对象模型?Java 工具 JDOM 直接为JAVA~程服务。它利用更ؓ强有力的JAVA语言的诸多特性(Ҏ重蝲、集合概念以及映)Q把SAX和DOM的功能有效地l合h?/p>
Jdom是用Java语言诅R写、操作XML的新API函数。Jason Hunter ?Brett McLaughlin公开发布了它?.0版本。在直觉、简单和高效的前提下Q这些API函数被最大限度的优化。在接下来的幅里将介绍怎么用Jdom去读写一个已l存在的XML文档?/p>
JDOM ?000q的春天被Brett McLaughlin和Jason Hunter开发出来,以I补DOM及SAX在实际应用当中的不之处?/p>
q些不之处主要在于SAX没有文档修改、随问以及输出的功能Q而对于DOM来说QJAVAE序员在使用时来用v来总觉得不太方ѝ?/p>
DOM的缺点主要是来自于由于Dom是一个接口定义语aQIDLQ?它的d是在不同语言实现中的一个最低的通用标准Qƈ不是为JAVA特别设计的。JDOM的最新版本ؓJDOM Beta 9。最qJDOM被收录到JSR-102内,q标志着JDOM成ؓ了JAVAq_l成的一部分?/p>
?JDOM 中,XML 元素是 Element 的实例,XML 属性就?Attribute 的实例,XML 文档本n是 Document 的实例?/p>
因ؓ JDOM 对象是?Document、Element ?Attribute q些cȝ直接实例Q因此创Z个新 JDOM 对象如?Java 语言中?new 操作W一样容易。JDOM 的用是直截了当的?/p>
JDOM 使用标准?Java ~码模式。只要有可能Q它使用 Java new 操作W而不故弄玄虚使用复杂的工厂化模式Q对象操作即便对于初学用户也很方便?/p>
JDOM是由以下几个包组成的 org.jdom包含了所有的xml文档要素的javac?br>org.jdom.adapters包含了与dom适配的javac?br>org.jdom.filter包含了xml文档的过滤器c?br>org.jdom.input包含了读取xml文档的类 二、JDOMc说?/strong> 1、org.JDOMq个包里的类是你J解析xml文g后所要用到的所有数?a target=_new>cd?/p>
Attribute 2、org.JDOM.transform在涉及xslt格式转换时应使用下面?个类 JDOMSource 3、输入类Q一般用于文档的创徏工作 SAXBuilder 4、org.JDOM.output输出c,用于文档转换输出 XMLOutputter 使用前注意事: 1.JDOM对于JAXP以及TRax的支?/p>
JDOM支持JAXP1.1Q你可以在程序中使用M的parser工具c?默认情况下是JAXP的parser?br>制定特别的parser可用如下形式 2.注意在JDOM里文档(DocumentQ类由org.JDOM.Document来表C。这要与org.w3c.dom中的Document区别开Q这2U格式如何{换在后面会说明?br> 以下如无Ҏ均指JDOM里的Document?/p>
三、JDOM主要使用Ҏ 1.Ducumentc?/p>
(1)Document的操作方法: Elementroot=newElement("GREETING"); (2)从文件、流、系lID、URL得到Document对象Q?/p>
DOMBuilderbuilder=newDOMBuilder(); 2.XML文档输出 XMLOutPutterc: 3.Elementc: (1)览Element?br>Elementroot=doc.getRootElement();//获得根元素element (2)UdElements: (3)Element的text内容d Acooldemo //Thetextisdirectlyavailable 四、JDOM的应?/strong> Q一Q、XML文档创徏 我们由零开始利用JDOM生成一个XML文档。最后的l果(h文档)看v来象q样Q?/p>
87654321 1.?MyInfo 为根元素创徏文档 Element rootElement = new Element("MyInfo");//所有的XML元素都是 Element 的实例。根元素也不例外Q) 2.l根元素d属?/p>
Attribute rootAttri = new Attribute("comment","introduce myself");//创徏名ؓ commnet,gؓ introduce myself 的属性?br>rootElement.setAttribute(rootAttri);//刚创徏的属性添加到根元素?br>q两行代码你也可以合成一行来写,象这P 3.d元素和子元素 JDOM里子元素是作?contentQ内容)d到父元素里面ȝ,所谓content是cM上面h文档中之间的东东Q即kingwong。罗嗦了Ҏ吧:Q?br>Element nameElement = new Element("name");//创徏 name 元素 q三行你也可以合Z句,象这P 我们用同LҎd带属性的子元?br>rootElement.addContent(new Element("sex").setAttribute("value","male"));//注意q里不需要{型,因ؓaddAttribute(String name,String value)q回值就是一?Element?/p>
同样的,我们d元素到根元素下,用法上一P只是E微复杂了一些: 4.删除子元?/p>
q个操作比较单: 到目前ؓ止,我们学习了一下JDOM文档生成操作。上面徏立了一个样本文档,可是我们怎么知道对不对呢Q因此需要输出来看一下。我们将JDOM生成的文档输出到控制収ͼ使用 JDOM ?XMLOutputter cR?/p>
5. ?JDOM 转化?XML 文本 XMLOutputter xmlOut = new XMLOutputter(" ",true); 6.JDOM文档转化为其他Ş?/p>
XMLOutputter q可输出?Writer ?OutputStream。ؓ了输出JDOM文档C个文本文Ӟ我们可以q样做: XMLOutputter q可输出到字W串,以便E序后面q行再处? 当然Q在输出的时候你不一定要输出所有的整个文档Q你可以选择元素q行输出Q?br>xmlOut.output(rootElement.getChild("name"),System.out); 本节CZ源码Q?br>package com.cyberobject.study; import java.io.IOException; import org.jdom.Attribute; /** public static void main(String[] args) // Attribute rootAttri = new Attribute("comment","introduce myself"); rootElement.setAttribute("comment","introduce myself"); // Element nameElement = new Element("name"); rootElement.addContent((Content)(new Element("name").addContent("kingwong"))); rootElement.removeChild("sex"); XMLOutputter xmlOut = new XMLOutputter(Format.getPrettyFormat()); JDOM 不光可以很方便的建立XML文档Q它的另一个用处是它能够读取ƈ操作现有?XML 数据?br>JDOM的解析器在org.jdom.input.*q个包里Q其中的DOMBuilder的功能是DOM模型的Document解析成JDOM模型的DocumentQSAXBuilder的功能是从文件或中解析出符合JDOM模型的XML树。由于我们经常要从一个文仉d数据Q因此我们应该采用后者作析工兗?br>解析一个xml文档Q基本可以看成以下几个步骤: 1.实例化一个合适的解析器对?/p>
本例中我们用SAXBuilder: 2.以包含XML数据的文件ؓ参数Q构Z个文档对象myDocument Document myDocument = sb.build(/some/directory/myFile.xml); 3.获到根元?/p>
Element rootElement = myDocument.getRootElement(); 一旦你获取了根元素Q你可以很方便地对它下面的子元素进行操作了Q下面对Element对象的一些常用方法作一下简单说明: q有其他没有|列出来的方法,如果需要的话,可以随时查阅JDOM的在U文档:http://www.jdom.org/docs/apidocs/index.html。当然你可以在你需要的地方d、删除元素操作,q记得上面的创徏XML的方法吗Q呵呵~~~ 学习C东还是从实例学v最为快P下面单D个例子,׃上面的XMLh代码来学习JDOM的XML解析。本例中d了样本XML文g里一些属性和contentQ最后我们还在contact元素里插入了一个新元素wanghua@cyberobject.com" />。尽我们实C对于XML的基本操作,l心的朋友可能会 /* import org.jdom.Document; /** String str1 = root.getAttributeValue("comment"); XMLOutputter xmlOut = new XMLOutputter(Format.getPrettyFormat());
中国问者分布如下:
]]>
同servlet一Pqo器Filter也具有生命周期:init()->doFilter()->destroy().要实现模块化QFilterChain功不可末Q它可以采用不同的方式组合过滤器Q协调完成一些事情,它由部v文g中的filter元素驱动Q和Filter都在javax.servlet包中。在servlet2.4中,qo器同样可以用于请求分z֙Q但dweb.xml中声明,<dispatcher>INCLUDE或FORWARD或REQUEST或ERROR</dispatcher>该元素位于filter-mapping中?/p>
public class MyFilter implements Filter {
public void init(FilterConfig arg0) throws ServletException {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException{
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse)response;
CachedResponseWrapper wrapper = new CachedResponseWrapper(httpResponse);
// 写入wrapper:
chain.doFilter(request, wrapper);
// 首先判断status, 只对200状态处理:
if(wrapper.getStatus()==HttpServletResponse.SC_OK) {
// 对响应进行处理,q里是进行GZip压羃:
byte[] data = GZipUtil.gzip(wrapper.getResponseData());
httpResponse.setContentType(getContentType());
httpResponse.setContentLength(data.length);
httpResponse.setHeader("Content-Encoding", "gzip");
ServletOutputStream output = response.getOutputStream();
output.write(data);
output.flush();
}
}public void destroy() {
}
}
public class CheckFrameHttpServletResponseWrapper extends
HttpServletResponseWrapper {public CheckFrameHttpServletResponseWrapper(HttpServletResponse response) {
super(response);
}public PrintWriter getWriter() throws IOException{
return new CheckFrameWriter(super.getWriter());
}}
public class CheckFrameWriter extends PrintWriter {
String checkString = "<script>\n if(window.top.frames.length==0){\n"
+ "window.location.href=\"https://aix:9080/sso/mainlayout.faces?"
+ "contentURL=http://aix:9080/security/paramsMaintain/"
+ "addParams.faces?roleId=0001\"\n" + "}\n</script>\n";public CheckFrameWriter(Writer out) {
super(out);
}public void write(int c) {
super.write((char) c);
}public void write(char buf[], int off, int len) {
StringBuffer sb = new StringBuffer(len);
for (int i = 0; i < len; i++) {
sb.append(buf[off + i]);
}
String s = sb.toString();
int bodyIndex = s.indexOf("<body>");
if (bodyIndex > -1) {
String part1 = s.substring(0, bodyIndex);
String part2 = s.substring(bodyIndex );
s = part1 + checkString + part2;
}
for (int i = 0; i < s.length(); i++) {
write(s.charAt(i));
}
}public void write(String s, int off, int len) {
for (int i = 0; i < len; i++) {
write(s.charAt(off + i));
}
}
}
4、Tomcat调用Servlet的servic()ҎQ根据请求参数的不同调用doGet()或者doPost()ҎQ?br>5、假设是HTTP GEThQdoGet()Ҏ生成静态页面,q组合到响应对象里;
6、ServletU程l束QTomcat响应对象{换ؓHTTP响应发回l客P同时删除h和响应对象?br>从该q程中,我们可以理解Servlet的生命周期:Servletcd载(对应3步)QServlet实例化(对应3步)Q调用initҎQ对?步)Q调用service()ҎQ对??步)Q;调用destroy()ҎQ对?步)?img src ="http://www.aygfsteel.com/mlh123caoer/aggbug/128789.html" width = "1" height = "1" />
]]>
·org.xml.sax Q用于对 XML q行语法分析的事仉动的?API
·javax.xml.parsers Q工厂化工具Q允许应用程序开发h员获得ƈ配置Ҏ的语法分析器工具 JDOM 能够替换 org.w3c.dom 软g包来有计划地操作 XML 文档
JDOM是一?a target=_new>开?/font>目Q它Z树型l构Q利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作?/p>
在用设计上可能地隐藏原来使用XMLq程中的复杂性。利用JDOM处理XML文档是一件轻松、简单的事?/p>
一、JDOM包概?/strong>
org.jdom.output包含了写入xml文档的类
org.jdom.transform包含了将jdomxml文档接口转换为其他xml文档接口
org.jdom.xpath包含了对xml文档xpath操作的类
CDATA
Coment
DocType
Document
Element
EntityRef
Namespace
ProscessingInstruction
Text
JDOMResult
org.JDOM.input
DOMBuilder
ResultSetBuilder
SAXOutputter
DomOutputter
JTreeOutputter
SAXBuilderparser
=newSAXBuilder("org.apache.crimson.parser.XMLReaderImpl");
Documentdoc=parser.build("http://www.cafeconleche.org/");
//workwiththedocument...
JDOM也支持TRaXQXSLT可通过JDOMSource以及JDOMResultcL转换Q参见以后章节)
Documentdoc=newDocument(root);
root.setText("HelloJDOM!");
或者简单的使用Documentdoc=newDocument(newElement("GREETING").setText("HelloJDOM!t"));
q点和DOM不同。Dom则需要更为复杂的代码Q如下:
DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();
DocumentBuilderbuilder=factory.newDocumentBuilder();
Documentdoc=builder.newDocument();
Elementroot=doc.createElement("root");
Texttext=doc.createText("Thisistheroot");
root.appendChild(text);
doc.appendChild(root);
注意事项QJDOM不允许同一个节点同时被2个或多个文档相关联,要在W?个文档中使用原来老文档中的节点的话。首先需要用detach()把这个节点分开来?/p>
Documentdoc=builder.build(newFile("jdom_test.xml"));
SAXBuilderbuilder=newSAXBuilder();
Documentdoc=builder.build(url);
在新版本中DOMBuilder已经Deprecated掉DOMBuilder.builder(url)Q用SAX效率会比较快?br>q里举一个小例子Qؓ了简单v见,使用String对象直接作ؓxml数据源:
PublicjdomTest(){
StringtextXml=null;
textXml="";
textXml=textXml+
"aaabbbcccddd";
textXml=textXml+"";
SAXBuilderbuilder=newSAXBuilder();
Documentdoc=null;
Readerin=newStringReader(textXml);
try{
doc=builder.build(in);
Elementroot=doc.getRootElement();
Listls=root.getChildren();//注意此处取出的是root节点下面的一层的Element集合
for(Iteratoriter=ls.iterator();iter.hasNext();){
Elementel=(Element)iter.next();
if(el.getName().equals("to")){
System.out.println(el.getText());
}
}
}
catch(IOExceptionex){
ex.printStackTrace();
}
catch(JDOMExceptionex){
ex.printStackTrace();
}
}
(3)DOM的document和JDOM的Document之间的相互{换用方法,单!
DOMBuilderbuilder=newDOMBuilder();
org.jdom.DocumentjdomDocument=builder.build(domDocument);
DOMOutputterconverter=newDOMOutputter();//workwiththeJDOMdocument…
org.w3c.dom.DocumentdomDocument=converter.output(jdomDocument);
//workwiththeDOMdocument…
JDOM的输出非常灵z?支持很多Uio格式以及风格的输?br>Documentdoc=newDocument(...);
XMLOutputteroutp=newXMLOutputter();
outp.output(doc,fileOutputStream);//Rawoutput
outp.setTextTrim(true);//Compressedoutput
outp.output(doc,socket.getOutputStream());
outp.setIndent("");//Prettyoutput
outp.setNewlines(true);
outp.output(doc,System.out);
详细请参阅最新的JDOMAPI手册
ListallChildren=root.getChildren();//获得所有子元素的一个list
ListnamedChildren=root.getChildren("name");//获得指定名称子元素的list
Elementchild=root.getChild("name");//获得指定名称的第一个子元素
JDOMl了我们很多很灵zȝ使用Ҏ来管理子元素Q这里的List是java.util.ListQ?br>ListallChildren=root.getChildren();
allChildren.remove(3);//删除W四个子元素
allChildren.removeAll(root.getChildren("jack"));//删除?#8220;jack”的子元素
root.removeChildren("jack");//便捷写法
allChildren.add(newElement("jane"));//加入
root.addContent(newElement("jane"));//便捷写法
allChildren.add(0,newElement("first"));
在JDOM里很?br>Elementmovable=newElement("movable");
parent1.addContent(movable);//place
parent1.removeContent(movable);//remove
parent2.addContent(movable);//add
在Dom?br>Elementmovable=doc1.createElement("movable");
parent1.appendChild(movable);//place
parent1.removeChild(movable);//remove
parent2.appendChild(movable);//出错!
补充Q纠错?br>JDOM的Element构造函敎ͼ以及它的其他函数Q会查element是否合法?br>而它的add/removeҎ会检查树l构Q检查内容如下:
1.在Q何树中是否有回环节点
2.是否只有一个根节点
3.是否有一致的命名I间QNamespacesQ?/p>
//Returns"\nAcooldemo\n"
Stringdesc=element.getText();
//There'saconvenientshortcut
//Returns"Acooldemo"
Stringdesc=element.getTextTrim();
(4)Elment内容修改
element.setText("Anewdescription");
3.可正解释特D字W?br>element.setText("
kingwong
Document myDocument = new Document(rootElement);//以根元素作ؓ参数创徏Document对象。一个Document只有一个根Q即root元素?/p>
rootElement.setAttribute(new Attribute("comment","introduce myself"));
或?br>rootElement.setAttribute("comment","introduce myself");
nameElement.addContent("kingwong");//kingwong作ؓcontentd到name元素
rootElement.addContent(nameElement);//name元素作ؓcontentd到根元素
rootElement.addContent((Content)(new Element("name").addContent("kingwong")));//因ؓaddContent(Content child)Ҏq回的是一个Parent接口Q而Elementcd时承了Contentcd实现了Parent接口Q所以我们把它造型成Content?/p>
rootElement.addContent((Content)(new Element("contact").addContent((Content)(new Element("telephone").addContent("87654321")))));
如果你对q种写Ş式还不太习惯Q你完全可以分步来做Q就象本节刚开始的时候一栗事实上如果层次比较多,写成分步的Ş式更清晰些,也不Ҏ出错?/p>
rootElement.removeChild("sex");//该方法返回一个布?/p>
try {
xmlOut.output(myDocument,System.out);
} catch (IOException e) {
e.printStackTrace();
}
XMLOutputter 有几个格式选项。这里我们已指定希望子元素从父元素羃q两个空|q且希望元素间有I?br>new XMLOutputter(java.lang.String indent, boolean newlines)q个Ҏ在最新版本中已经不徏议用。JDOM有一个专门的用来定义格式化输出的c:org.jdom.output.FormatQ如果你没有Ҏ的要求,有时候用里面的几个静态方法(应该可以说是预定义格式)?getPrettyFormat()可以了。我们把上面的输出格式稍微改一下,pq样Q?br>XMLOutputter xmlOut = new XMLOutputter(Format.getPrettyFormat());
FileWriter writer = new FileWriter("/some/directory/myFile.xml");
outputter.output(myDocument, writer);
writer.close();
Strng outString = xmlOut.outputString(myDocument);
一句话QJDOM非常灉|方便Q如果你惌一步研IJDOMQ请到官方网站去看一看:http://www.jdom.org
import org.jdom.Content;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
* @author kingwong
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class TestJDOM {
{
Element rootElement = new Element("MyInfo");
Document myDocument = new Document(rootElement);
// rootElement.setAttribute(rootAttri);
//rootElement.setAttribute(new Attribute("comment","introduce myself"));
// Element sexElement = new Element("sex");
// rootElement.addContent(sexElement);
// nameElement.addContent("kingwong");
// rootElement.addContent(nameElement);
rootElement.addContent(new Element("sex").setAttribute("value","male"));
rootElement.addContent((Content)(new Element("contract").addContent((Content)(new Element("telephone").addContent("87654321")))));
try {
xmlOut.output(myDocument,System.out);
//xmlOut.output(rootElement.getChild("name"),System.out);
//String outString = xmlOut.outputString(myDocument);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Q二Q、XML文档解析
SAXBuilder sb = new SAXBuilder();
getChild("childname") q回指定名字的子节点,如果同一U有多个同名子节点,则只q回W一个;如果没有q回null倹{?br>getChildren("childname") q回指定名字的子节点List集合。这样你可以遍历所有的同一U同名子节点?
getAttributeValue("name") q回指定属性名字的倹{如果没有该属性则q回null,有该属性但是gؓI,则返回空字符丌Ӏ?br>getChildText("childname") q回指定子节点的内容文本倹{?br>getText() q回该元素的内容文本倹{?/p>
有疑问:如果XML文档的层ơ稍微复杂一些,如果嵌套多达几十上百层的话(开个玩W)Q如果靠q样从根元素一U一U地通过getChild("childname")来访问子元素的话Q将会非常痛苦!是的Q的是q样Q但是我们有另一个有力的工具XPathQؓ什么不用呢Q这是后话!先卖个关子(手敲累啦Q下回吧Q呵呵)?/p>
* Created on 2004-8-21
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package com.cyberobject.study;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
* @author kingwong
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class TestJDOM2 {
public static void main(String[] args){
SAXBuilder sb = new SAXBuilder();
try
{
Document doc = sb.build("myFile.xml");
Element root = doc.getRootElement();
System.out.println("Root Element's comment attribute is : " + str1);
String str2 = root.getChild("sex").getAttributeValue("value");
System.out.println("sex Element's value attribute is : " + str2);
String str3 = root.getChildText("name");
System.out.println("name Element's content is :" + str3);
String str4 = root.getChild("contact").getChildText("telephone");
System.out.println("contact Element's telephone subelement content is : " + str4 + "\n");
Element inputElement = root.getChild("contact");
inputElement.addContent(new Element("email").setAttribute("value","wanghua@cyberobject.com"));
String outStr = xmlOut.outputString(root);
System.out.println(outStr);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
一、数据库?br>MySQL 是一个快速、多U程、多用户和强壮的SQL数据库服务器?/p>
对Unix?nbsp;OS/2 q_QMySQL基本上是免费的;但对微Yq_Q你?0 天的试用期后必须获得一个MySQL 许可证。详?a >W三?MySQL许可证和技术支?/a>?
MySQL是一个真正的多用戗多U程SQL数据库服务器。SQLQ结构化查询语言Q是世界上最行的和标准化的数据库语a。MySQL是以一个客h/服务器结构的实现Q它׃个服务器守护E序mysqld
和很多不同的客户E序和库l成?/p>
SQL是一U标准化的语aQ它使得存储、更新和存取信息更容易。例如,你能用SQL语言Z个网站检索品信息及存储֮信息Q同时MySQL也够快和灵zM允许你存储记录文件和囑փ?/p>
MySQL 主要目标是快速、健壮和易用。最初是因ؓ我们需要这样一个SQL服务器,它能处理与Q何可不昂늡件^C提供数据库的厂家在一个数量上的大型数据库,但速度更快QMySQL开发出来。自1996q以来,我们一直都在用MySQLQ其环境有超q?nbsp;40 个数据库Q包?nbsp;10,000个表Q其?00多个表超q?百万行,q大U有100 个吉字节(GB)的关键应用数据?/p>
MySQL建立的基是业已用在高要求的生产环境多q的一套实用例E。尽MySQL仍在开发中Q但它已l提供一个丰富和极其有用的功能集?/p>
二、MySQL 的主要特?br>
下表描述MySQL一些重要的特征Q?
TIMESTAMP
?code>YEAR?code>SET?code>ENUMcd??a >7.3 列类?/a>?
SELECT
?code>WHERE部分支持全部q算W和函数Q例如:
mysql> SELECT CONCAT(first_name, " ", last_name) FROM tbl_name WHERE income/dependents > 10000 AND age > 30;
COUNT()
?code>COUNT(DISTINCT)?code>AVG()?code>STD()?code>SUM()?MAX()
?code>MIN() )?
?/code>
- 你可以在同一查询中用来自不同数据库的表?与版?nbsp;3.22一?nbsp;)?
- 一个非常灵zM安全的权限和口opȝQƈ且它允许ZL的认证。口令是安全的,因ؓ当与一个服务器q接Ӟ所有的口o传送被加密?
- ODBC for Windiws 95。所有的 ODBC 2 . 5 函数和其他许多函数。例如,你可以用Accessq接你的 MySQL服务器。见16 MySQL ODBC 支持?
- 具备索引压羃的快速B树磁盘表?
- 每个表允许有16个烦引。每个烦引可以由1?6个列或列的一部分l成。最大烦引长度是 256 个字?在编译MySQLӞ它可以改?。一个烦引可以用一?code>CHAR
?code>VARCHAR字段的前~?
INSERT
插入一个表列的子集Q那些没用明给定值的列设|ؓ他们的缺省倹{?
purify
)?
myisamchk
Q一个检查、优化和修复数据库表的快速实用程序,详见13 l护 MySQL安装?
DELETE
?code>INSERT?code>REPLACE?code>UPDATE q回有多行被改?受媄??
--help
?code>-?获得联机帮助?
三、SQL语法
dMySQL服务器语法:mysql -h host_name -u user_name -p [password];
1、创建、删除数据库
CREATE DATABASE [IF NOT EXISTS] db_name
例如Qcreate DATABASE Samp_db;
DROP DATABASE [IF EXISTS] db_name
例如Qdrop DATABASE Samp_db;
2、创?br> CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)][table_options] [select_statement]Q?br> 例如Qmysql> CREATE TABLE test (a INT NOT NULL AUTO_INCREMENT,
-> PRIMARY KEY (a), KEY(b))
-> TYPE=MyISAM SELECT b,c FROM test2;
3、插入数?br> INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tbl_name [(col_name,...)]
VALUES ((expression | DEFAULT),...),(...),...
[ ON DUPLICATE KEY UPDATE col_name=expression, ... ]
or INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tbl_name [(col_name,...)]
SELECT ...
or INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tbl_name
SET col_name=(expression | DEFAULT), ...
[ ON DUPLICATE KEY UPDATE col_name=expression, ... ]
例如Qmysql> INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2);
Service Data Object (SDO) 2.0 是一个开放标准数据模型编E?APIQ允许开发h员在较高的别方便地操作数据。尽?SDO 1.0 以相同的数据抽象为目标,但有几个大的~点Q其中主要的一Ҏ~少 Helper c,?XSDHelper
, XMLHelper
{。而最l结果是Q开发h员被q?SDO 1.0 实现 APIQ来?Eclipse Modeling Framework (EMF) SDKQ?
当前的实?(SDO 2.0) 使用 EMF 2.2 SDKQ但q个 SDO 2.0 实现l节q不会媄响开发h员根据新 API ~写E序。将来,开放源代码CQ通过 Apache Software FoundationQ可能会军_提供不同?SDO 2.0 实现Q但q不应媄响基?SDO 2.0 API 构徏的应用程序?/p>
了解q个?API 的优势的最基本Ҏ是?SDO 2.0 来创建符?XML 模式 (XSD) ?XML 文档q对其进行读取操作。要在不使用 SDO 2.0 的情况下完成相同的工作,开发h员需要理?XML 解析器如何工作,q将数据解析逻辑与应用程序紧密集成。如果以?XSD 需要更改,需要对应用E序的各处进行调_从而可能对代码的质量带来灾难性的影响?
SDO 2.0 API 的新用户很难直接通过学习规范来理解相xcؓ了提供一定的帮助Q我们从 XML Schema PrimerQ请参阅参考资?/font>Q创Z一个示例,以说明如何?SDO 2.0 API q行以下dQ?/p>
以下是我们将试通过我们的示例实现的使用场景。首先,公司定购买订单Qpurchase orderQPOQ信息的要求。完成此d后,我们开始创建静态表单,以设计信息的l构。在数据库中Q此静态表单即表模式。在 XMLQ此静态表单即 XML 模式 (XSD)。如果以后需要收集更多的客户信息Q我们将需要重新设计表?表模?XSD?/p>
下订单时Q客户需要填?PO 表单Q或向操作员提供相同的信息,以便填写此表单。表单中的信息将随后由公司用于对订单q行配送?
公司接收?PO 信息后,很有可能会将其进行保存,q在以后对其q行d以用于各U目的(如提供客h持)。在此示例中Q我们可以将信息?XML 格式保存Q然后?SDO API q行d?/p>
?1
昄了从客户 Robert Smith 攉?PO 信息CZ。将创徏 XSD 文gQ以采用l构化的方式存储此示例购买订单。将用一个名?CreatePurchaseOrder.java
的示例程序来采用 XML 格式创徏CZ POQ名?po.xml
Q。最后,?ReadPurchaseOrder.java
来演C如何从 po.xml
d订单信息?/p>
?1. 来自 Rober Smith 的示例购买订单信?/b>
Order date: 1999-10-20
Shipping information: Billing information: Order Items: 2. Part number:926-AA Comment: Hurry, my lawn is going wild! |
![]() ![]() |
![]()
|
Z?1 所C的CZ购买订单Q可以用一?PO cd来表C单。我们将其命名ؓ PurchaseOrderType
?code>PurchaseOrderType 的实例可以包含四个主要数据,如下所C:
shipping information
billing information
order items information
comment
shipping information ?billing information 可包含更多的数据Q如 name
?code>street?code>city?code>state?code>zip ?country
。Order items information 可以包含客户所购买的物品的很多信息。每个物品可能包?part number
?code>product name?code>quantity, price
?code>ship date ?comment
。PO ?comment 区域包含一个字W串|q不要求采用更结构化的信息?/p>
清单 1 昄了结构化?XSD 格式的文件中包含的所有购买订单信息?/p>
清单 1. PO.xsd
|
q可以用统一建模语言QUnified Modeling LanguageQUMLQ类关系图来对购买订单信息进行结构化Q如?2 中所C?/p>
?2. 购买订单?UML cdpd
XSD po.xsd
文g和该 UML cdpdh以下区别Q?/p>
ItemType
Q而ƈ未在 po.xsd.diagram
中定义此V尽?po.xsd
q不具体定义 ItemType
QXSD 规范仍可?ItemType
作ؓ匿名cd处理?
xsd:<type>
在类关系图中都羃写ؓ?<type>
。在 XSD 中,xsd:<type>
模式中的 xsd 用于指示cd所属的命名I间。在cdpd中,Z单v见而将其省略了?
SKU type
未在cdpd中定义?code>SKU type 事实上是?po
命名I间中定义的规范化字W串cd。在cdpd中,它由 string type
加以表示?
![]() ![]() |
![]()
|
清单 2 中所C的CZ CreatePurchaseOrder.java
E序用于创徏一?POQ该 PO 采用名ؓ po.xml
?XML 格式Q如清单 3 所C)?/p>
清单 2. CreatePurchaseOrder.java
|
|
该示?Java E序首先通过调用 XSDHelper.INSTANCE.define()
Ҏ?SDO q行时注?po.xsd
中描q的所有类型。然后,它从 PurchaseOrderType
创徏一个根 DataObject
。该E序从该处使用 DataObject
API 来构?DataObject
树,以表C买订单信息,如图 3 中所C?/p>
?3. DataObject ?/b>
在图 3 中,每个矩Ş都划分ؓ两个隔间。顶部间隔(灰色Q指C?DataObject
实例名称及其实际cdQ底部间隔指C所包含的属性。例如,树的根元素ؓ purchaseOrder DataObject
实例Q其实际cd?PurchaseOrderType
Q在清单 1 中的 PO.xsd
中定义。在?DataObject
实例中,包含两个属性值—?code>orderDate ?comment
?/p>
创徏 DataObject
树后Q该E序调用 XMLHelper.INSTANCE.save()
Ҏ来将?purchaseOrder DataObject
实例开始的树内容保存到 XML 文档中(此例中ؓ po.xml
Q。事实上Q可以将树中M DataObject
实例指定?XMLHelper.INSTANCE.save()
Ҏ的第一个参敎ͼsave()
Ҏ保存从所指定的实例开始的所?DataObject
实例?/p>
![]() ![]() |
![]()
|
CreatePurchaseOrder.java
创徏?po.xml
后,我们可以~译q运行清?4 中所C的 ReadPurchaseOrder.java
Q以演示如何使用 SDO API 来遍?po.xml
的内宏V该应用E序执行以下操作:
po.xsd
中定义的cd
XMLHelper.load()
Ҏ来将 po.xml
加蝲到内存中Q?XMLDocument
实例 xmlDoc
加以表示Q?
xmlDoc.getRootObject()
Ҏ来检索名?purchaseOrder
?DataObject
树的根对象,该对象与?3 中所C的 DataObject
树关pd中的 purchaseOrder DataObject
对应
purchaseOrder DataObject
q回后,遍历 DataObject
树,以检索关于此 PO 的所有信?
|
清单 4 中以黑体昄?System.out.println()
昄各种数据对象的属性|包括Q?/p>
purchaseOrder DataObject
?orderDate
?comment
属?
shipTo DataObject
?name
属?
billTo DataObject
?name
属?
partNum
?productName
属?Order date: 1999-10-20
Comment:Hurry, my lawn is going wild! Part num:872-AA Part num:926-AA |
在图 4 中,我们可以看到q行 ReadPurchaseOrder
Java 代码的输出?/p>
![]() ![]() |
![]()
|
SDO 2.0 API 提供了创建和讉K数据的一致方式,使开发h员不必了解分析和l护数据完整性的底层实现l节。SDO 2.0 目前?Apache Software Foundation 下的一个试验性子目Q称?TuscanyQ,预期成?SOA 开发的数据模型~程 API 的事实标准。请参阅参考资?/font>部分Q以获得一个相关链接?/p>
可以从上面的CZ中看出,SDO 2.0 API 使您完全不必知道和?XML 解析?API 来读取、写入和操作数据。如果?Java 创徏?DataObject
来表C符合您所定义?XML 模式?XML 数据QSDO 2.0 提供够的方便性和灉|性,让您精力放在如何用数据上。因此,它可为您带来极大的好处,从而提高开发工作效率和产品质量?/p>
MQ通过使用 SDO 2.0 提供的数据抽象技术,您可以根据所定义的业务逻辑来处理数据,以满x的业务需求。这可以帮助您简化业务应用程序开发,也能提高团队的工作效率和工作质量?/p>
![]() ![]() |
![]()
|
![]() ![]() |
![]()
|
![]() |
||
|
![]() |
Fuhwei Lwo 目前?WebSphere Service Data Objects (SDO) 的团队负责h。他主要的工作重Ҏ推动在面向服务的体系l构QService Oriented ArchitectureQSOAQ中?SDO 作ؓ数据数据模型~程 API 成功采用?/p> |
实在太大,
所以虽然每届基本上能录100多篇Q现在已l到200多篇了)Q但分到每个
领域没几篇了,象machine learning、computer
visionq么大的领域每次大概?
?0左? 所以难度很?
不过从录用率上来看倒不太低,基本?0%左右, 因ؓ?
行h都会掂掂分量, 没希望的别费reviewer的时间了.
最q中国大陆投往国际?
议的文章象潮水一?
而且因ؓ国内很少有能自己把关的研I组,
所以很多会议都?
complain说中国的低质量文章严重妨了PC的工作效?
在这U情况下, 估计q几q?
国际会议的录用率都会降下? 另外,
以前的IJCAI是没有poster? 03q开? Z
减少被误杀的好? 增加?늺的poster.值得一提的?
IJCAI是由貌似一个公?
?IJCAI Inc."d?当然实际上ƈ不是公司,
实际上是个基金会), 每次会议上要
发几个奖, 其中最重要的两个是IJCAI Research Excellence
Award ?Computer
& Thoughts Award, 前者是ln成就? 每次一个h,
基本上是AI的最高奖(有趣?
? 以AIZ业拿囄奖的6位中,
?位还没得到这个奖), 后者是奖给35岁以下的
青年U学? 每次一个h.
q两个奖的获奖演说是每次IJCAI的一个重头戏.另外,
IJCAI ?PC member 相当于其他会议的area chair, 权力很大,
因ؓ是由PC member
L reviewer 来审, 而不象一般会议的PC member其实是
reviewer. Z制约
q种权力, IJCAI的审E程序是每篇文章分配2位PC member,
primary PC memberL
3位reviewer, second PC member 找一?
AAAI (1): 国人工学会AAAI的年?
是一个很好的会议, 但其档次不稳? ?
以给?+, 也可以给?-或?+, ȝ来说我给?1".
q是因ؓ它的开法完全受
IJCAI制约: 每年开, 但如果这一q的IJCAI在北D?
那么停开. 所? 偶数q?
里因为没有IJCAI, 它就是最好的AIl合性会?
但因为号召力毕竟比IJCAI要小一?
特别是欧zh捧AAAI场的比IJCAI得?其实亚洲Z?,
所以比IJCAIq是要稍?
一? 基本上在1?+之间; 在奇数年,
如果IJCAI不在北美, AAAI自然变成了?
IJCAI低一U的会议(1-?+), 例如2005q既有IJCAI又有AAAI,
两个会议p行了?
? 使得IJCAI的录用通知旉比AAAI的deadline早那么几?
q样IJCAI落选的文章
可以投往AAAI.在审E时IJCAI ?PC chair也在一直催,
说大家一定要? 因ؓAAAI
那边一直在担心IJCAI的录用通知出晚了AAAI麻烦了.
COLT (1): q是计算学习理论最好的会议, ACMd,
每年举行. 计算学习理论基本?
可以看成理论计算机科学和机器学习的交?
所以这个会被一些h看成是理?
机科学的会而不是AI的会.
我一个朋友用一句话对它q行了精彩的ȝ:
"一群?
学家在开?. 因ؓCOLT的领域比较小,
所以每q会议基本上都是那些? q里Z
提一件有的? 因ؓ最q国内搞的会议太多太?
而且很多会议都是LNCS/LNAI?
论文? LNCS/LNAI基本上已l被搞臭? 但很不幸的是,
LNCS/LNAI中有一些很好的
会议, 例如COLT.
CVPR (1): 计算觉和模式识别斚w最好的会议之一,
IEEEd, 每年举行. 虽然?
目上有计机视觉,
但个为它的模式识别味道更重一?
事实上它应该是模式识
别最好的会议, 而在计算觉方?
q有ICCV与之相当. IEEE一直有个們, 要把
会办?盛会",
历史上已l有些会被它从quality很好的会办成"盛会"?
CVPR搞不?
也要走这条\. q几q录的文章已l不了.
最q负责CVPR会议的TC的chair发信
? 对这个community来说,
让好误杀比被坏h漏网更糟p?
所以我们是不是要减
好误杀的机会啊?
所以我估计明年或者后q的CVPRp扩招?
ICCV (1): 介绍CVPR的时候说q了,
计算觉方面最好的会之一. IEEEd.
ICCV逢奇数年开Q开会地点以往是北,Ƨ洲和亚z轮,本来2003q定在北
京,后来因Sars和原?5q的法国换了一下。ICCV'07q将首次在南?巴西)举行.
CVPR原则上每q在北美开,
如果那年正好ICCV在北?则该q没有CVPR.
ICML (1): 机器学习斚w最好的会议之一. 现在是IMLSd,
每年举行. 参见关于NIPS?
介绍.
NIPS (1): 经计算斚w最好的会议之一, NIPSd,
每年举行. 值得注意的是, q个?
每年的D办地都是一L, 以前是美国丹?
现在是加拿大温哥? 而且它是q底开?
会开完后W?q才文集, 也就是说,
NIPS'05的论文集?6q出. 会议的名字是
"Advances in Neural Inxxxxation Processing Systems", 所?
与ICMLECMLq样
?标准?机器学习会议不同,
NIPS里有相当一部分经U学的内? 和机器学习有
一定的距离. 但由于会议的M内容是机器学?
或者说与机器学习关pȝ? 所?
不少人把NIPS看成是机器学习方面最好的会议之一.
q个会议基本上控制在Michael
Jordan的徒子徒孙手? 所以对Jordanpȝ人来?
发NIPSq不是难? 一些未必很
强的工作也能发上? 但对q个圈子之外的h来说,
惛_一实在很? 因ؓ留给"?
?的口子很? 所以对JordanpM外的人来?
发NIPS的难度比ICML更大. 换句话说,
ICML比较开? 圈子的影响不象NIPS那么?
所以北和Ƨ洲人都? 而NIPS则有
些h(特别是一些欧zh, 包括一些大?坚决不投E?
q对会议本n当然q不是好?
但因为Jordanpd强大, 所以它g也不太care.
最qIMLS(国际机器学习学会)攚w?
理事,
有资格提名的人包括近三年在ICMLECMLCOLT发过文章的h,
NIPS则被排除?
外了. 无论如何, q是一个非常好的会.
ACL (1-): 计算语言?自然语言处理斚w最好的会议, ACL
(Association of
Computational Linguistics) d, 每年开.
KR (1-): 知识表示和推理方面最好的会议之一,
实际上也是传lAI(卛_于逻辑的AI)
最好的会议之一. KR Inc.d, 现在是偶数年开.
SIGIR (1-): 信息索方面最好的会议, ACMd, 每年开. q个会现在小圈子气越?
重. 信息索应该不AI,
不过因ؓq里面用到机器学习越来越? 最q几q甚?有点机器学习应用会议的味道了, 所以把它也列进?
SIGKDD (1-): 数据挖掘斚w最好的会议, ACMd, 每年开. q个会议历史比较?
毕竟,
与其他领域相?数据挖掘q只是个弟弟甚臛_侄儿.
在几q前q很难把它列 在tier-1里面, 一斚w是名声远不及其他的top
conference响亮, 另一斚w是相对容?被录?
但现在它被列在tier-1应该是毫无疑问的事情?
q几q来KDD的质量都?? SIGKDD?000q来full paper的录取率都在10%-12%之间Q远q低于IJCAI和ICML.
l常听h_KDD要比IJICAI和ICML都要困难。IJICAI?,而KDD?0c没有扎实系l?
的工作,很难不留下漏z。有不少IJICAI的常客也每年都投KDDQ可隑־几个能经怸?
UAI (1-): 名字?人工中的不确定?,
涉及表示推理学习{很多方? AUAI
(Association of UAI) d, 每年开
对主企业数据库厂商包括甲骨文、IBM、微软、Sybase的采访表明,对XML的支持、网格技术、整合数据仓库和BI应用以及自我理已成Z一代数据库在功能上角逐的焦点?/p>
势之一Q对XML的支?/strong>
“如果谁能控制、支持和存储所有类型的数据Q那么这L厂商也就有能力扩展自己其他品和服务的市场空间。因此整合XML、对象数据、多媒体数据Q将所有数据类型放在一个^C是传统的关pL据库发展的一大趋ѝ”这也是数据库厂商大动干戈的主要原因?/p>
传统关系数据库中Q管理的是结构化数据Q数据是以行和列的二l表形式q行存储Qƈ通过标准的SQL查询语言q行查询。而随着Web时代的到来,?Web大背景下“泛数据”管理成Zh们关注的重点。所谓泛数据是指包含了文档、电子邮件等各种cd的数据,q些数据通常都不是以行和列的格式存在的,不像关系数据那样是严格的l构化数据,因此对这cL据的存储理以及快速高效的查询是对传统关系型数据库的挑战?/p>
目前XML标准日益成熟Qƈ很快成ؓ各种复杂的异构数据交换的核心技术和未来数据定义的标准格式,例如Q微软将在下一代Office软g中采?XML数据格式。因此,Native(原生)XML格式的数据存储在关系数据库中q支持对XMLQuery查询Q正是这些新推出的数据库产品的亮点之一?/p>
甲骨文公司大中华区销售顾问部高ȝ李颖聪表C,甲骨文在几年前就已经看到了这个趋势,q提供了W一轮的XML支持。早期是通过一个工P实现不同应用之间的沟通。例如在Oracle 8i产品中,甲骨文就已经推出了XDK(XML开发工?Q通过XDK开发应用把XML数据存储到关pL据库?在Oracle 9i产品中,则已l能够在数据库中定义XML数据cdQ通过SQL生成XML数据和对其进行查?而在Oracle 10g中,则已l提供了对XML Query语言(XQuery)的支持,而且在Oracle 10g中,XML数据是作Z个独立的方式存储在XMLDB数据库中Q提供的是Native XML的支持?/p>
而对于2006q推出的下一个版本的IBM DB2来说Q集成结构化和非l构化数据ƈ支持SQL及Xquery查询也将是其最大的卖点QIBM公司信息理部门ȝ理珍特·帕尔?Janet Perna)认ؓQ关pL据库寚wl构化数据的支持不亚于从层次数据库到关系数据库的革命性{变。“XML在信息管理领域无处不在,不管是管理结构化或非l构化信息,或者用于信息传输,或者是集成信息的映标准。它现在是不可或~的。?/p>
微Y中国数据库品经理表C,于今年下半q发布的Microsoft SQL Server 2005满_户希望把大量XML数据攑օ数据库中的需求,q提供Native(原生)XML和XQuery的支持。“微软是XQuery标准的制定者之一Q在SQL Server 2005中微软加入了很多核心技术,实现了快速查询,而且使得性能得到优化。?/p>
Sybase(中国)公司高产品市场专员韩谊则指出,Sybase是较早在数据库中支持XML的厂商之一。目前Sybase ASE可以XML文档存储在text或Image列中Q可以将XML映射到新的或已有的关p表中,可以从关pL询中创徏XML格式的结果集。未?Sybase除了不断d对XML新技术、新标准的支持,q要d更多函数Q增强对Web Service支持Q用户更方便的使用XML?/p>
InterSystems中国技术ȝ余衡也表C,InterSystems公司的后关系型数据库Caché已经完全支持XML了,而且q种支持来自?Caché独特的数据存储方式,使得XML的数据可以完地保存在Caché数据库中Q不论存取还是查询分析都非常单。关pL据库保存数据是采用二l表的方式,而Caché的存储方式是采用了多l数l的存储方式Q从而很Ҏ地实Cl构化数据的存取。同时在q个多维数据存储之上QCaché同时实现了对象的讉K方式和SQL的访问方式?/p>
Burton 集团的高U分析师Peter O'Kelly 则指出,如果用户的关pL据库支持原生XML数据Q那么就可以享受到XML数据格式带来的很多安全特性。例如,可以在整个文档中插入电子{Q也可以采购订单直接存储,无须q行M的{换,q些Ҏ都可以保文档不会被篡攏V但记者在对国内一些中企业用L采访中,很多客户都表CZ对XML查询的需求还不是很迫切。贝塔斯曼文化实业有限公司ITȝ江玮、佐丹奴 /Giordano集团CIO侯T、永恩集团CIO赉|雨都表示Q目前对XML支持的需求还不是很迫切。但他们表示Q对XML数据库是否真正能够达到的目标或对企业业务的帮助还不是非常了解Q需要l了解相x术和知识以及发展情况。针ҎQ甲骨文公司中国区销售顾问部高l理裴雪松表C,当CIOx信息整合ӞXML是必备的工P事实上,目前国内很多银行、电信等客户在进行应用整合时已经XML作ؓ其标准?/p>
势之二Q网格支?/strong>
“网格就是下一代Internet”,q句话强调了|格可能Ҏ来社会的巨大影响。在历史上,数据库系l曾l接受了Internet带来的挑战。毫无疑问,现在数据库系l也应对网格带来的挑战。甲骨文公司Oracle 10g|格数据库品的推出Q则网格技术的应用领域扩展C业计。但针对数据库对|格技术的支持Q目前一些厂商还持有不同的观点,例如微Y?InterSystems指出,|格q惟一的答案?/p>
“网D将是数据库技术发展的大趋势之一Q数据库不仅仅是存储数据Q而是要实现对信息整个生命周期的管理。而甲骨文提出的网格数据库则是其落到实处。”据悉,自Oracle 10gd发布后,很多被资源、管理困扰的客户都对甲骨文的|格技术非常感兴趣Q而且已经在很多领域得到应用。李颖聪同时表示Q在甲骨文刚刚发布的 Oracle 10g Release 2中又q一步改良了许多|格q算的功能,提升了性能、应用度以及化管理功能。该Ҏ可让客户多台标准服务器pȝ整合成一套可扩充的容错运^台。同Ӟ新版数据库可让客hҎ在网格环境中分n储存资源Qƈ且大q提升数据安全性。李颖聪表示Q甲骨文在未来的产品中将会l关注网格技术?Sybase公司则表C,管|格技术要成ؓ商业应用的主,q需要几q时间在应用和品上q一步完善,但Sybase非常xq种技术,已经作了一些技术探索和储备Qƈ希望能在不远的将来推出成熟的产品?/p>
而微软则表示Q目前微软还没有考虑到对|格技术的支持。他认ؓQ网格是一U扩展技术,扩展有两U方式:向上扩展(Scale up )和向外扩?Scale out)Q向上扩展是增加CPU的个数和内存{资源满用L需求,而向外扩展就是多节点q行技术,或者说是网格的技术。微软的一调查显C:目前99%的客户需求是?6颗CPU以下Q而目前,微Y的SQL Server 2005最多可以支?4颗CPUQ因此微软认为,通过向上扩展完全能够满客户的需求,而没有必要采用向外扩展技术?/p>
另外Q微软认为,|格应用在技术上q需解决一些问题。例如,|格中对资源的共享是通过׃n盘实现?Share Disk)Qƈ通过锁控制器(Lock manager)实现多个节点对资源的争夺Q管理节点对资源的访问,当节点增多,会带来性能的下降?/p>
InterSystems中国技术ȝ余衡也表C,|格计算在科学计领域非常受Ƣ迎Q例如对于处理电׃品中帧的应用E序Q或者处理复杂静态数据的数据仓库、处理复杂ƈ需要长旉q行的查询,|格计算也许是合适的。但|格计算不是l对的答案,对于大范围的事务处理cd的应用程序,q行高速数据库更新操作与计,|格计算可能׃适合了。在商业领域或者非U学斚w的应用中Q把d分解成逻辑或者功能组件比分解成过E更有意义?/p>
李颖聪介l,Tom|站的用L理系l已l采用了Oracle 10g的网格技术,在ƈ发处理能力的加强、自动扩展以及降低Y件成本方面都起到了很好的作用。在采访中,很多用户也表C对|格技术在数据库中的应用非常关注,但正如永恩集团CIO赉|雨所aQ对采用普通结点组成的pȝ的性能是否真正可以辑ֈ期望q有很多考虑。而佐丹奴集团CIO侯T则表C,作ؓ一个规模不很大的企业Q一C台服务器已经可以满现时及未来几q企业发展的需要了Q目前ƈ没有x|格技术?strong>势之三Q整合数据仓?BI
数据库应用的成熟Q得企业数据库里承载的数据来多。但数据的增多,随之而来的问题就是如何从量的数据中抽取出具有决{意义的信息(有用的数?Q更好地服务于企业当前的业务Q这需要商业智能。“从用户Ҏ据管理需求的角度看,可以划分两大c:一是对传统的、日常的事务处理Q也x们经常提的联Z务处?OLTP)应用;二是联机分析处理(OLAP)与辅助决{,既商业智?BI)。数据库不仅支持OLTPQ还应该Z务决{、分析提供支持。?目前Q主的数据库厂商都已经把支持OLAP、商业智能做为关pL据库发展的另一大趋ѝ?/p>
商业是指以帮助企业决{ؓ目的Q对数据q行攉、存储、分析、访问等处理的一大类技术及其应用,׃需要对大量的数据进行快速地查询和分析,传统的关pd数据库不能很好地满q种要求。或者说传统上,数据库应用是ZOLTP(在线交易处理)模型的,而不能很好支持OLAP(在线分析处理)Q商业智能是以数据仓库ؓ基础Q目前同时支持OLTP和OLAPq两U模式是关系数据库的着眼点所在?/p>
例如QIBM一直把商业应用当作 DB2的一个重要发展方向,q将商业功能构徏?DB2引擎中,例如DB2本n内置了数据库、在U分析的处理(OLAP)、各U分析等功能Q去q发布的DB2 8.3版本中又q一步加Z分析功能Qؓ商业应用q行了性能优化。目前可以通过两种方式?DB2 q行联机分析处理(OLAP)Q首先DB2 提供了用?CUBE ?ROLLUP(用于研究数据库中信息的流行的 OLAP 操作)的内|函数。其ơ,IBM ?Hyperion 合作创徏?DB2 OLAP ServerQDB2 OLAPServer 构徏在DB2 UDB 之上Q同时提供了多维数据存储和关pL据存储。IBM q与各类数据分析软g供应商合作,q些供应商他们的工兯使用 DB2 数据库?/p>
微Y也指出,微Y?997q开始在数据库品中增加了BI功能Q在SQL Server 2005中,微Y提供统一数据模型Q同时支持OLTP和OLAP两个模型Qƈ通过XML/A接口Q实现对数据库和数据仓库的访问,把关pL据库和BI功能整合在一赗?/p>
甲骨文公司商业智能和数据仓库副总裁Ray Roccaforte表示Q“几q前Q我们开始实施一简化复杂商业智能环境的计划。v初我们的重点是:让客户在实施商业目时不必面对多U专门的数据挖掘、OLAP和统计数据库Q我们直接把q些功能合ƈ到Oracle数据库中。现在这U做法已l扩展到商业软g工具上了Q我们把所有必需的Y件工L合到单一产品中,以此满客户的商业智能需求。?据悉Q新版本的甲骨文商业(Oracle Business Intelligence)工具目前正处于开发测试阶D,包括了Oracle Discoverer、Oracle Spreadsheet Add-In、Oracle Warehouse Builder、Oracle BI Beans{。通过Oracle Discoverer可在单一报告环境中存取关pL?即SQL)和联机分析处?OLAP)数据Q从而完成一般需要两UY件工h能完成的d?/p>
Sybase在即发布的数据库ASE15版本中也强化对OLAP分析表现功能的支持,q样对中企业客h_通过数据库就可以实现BI斚w的应?当然对一些大型用PSybase也提供了专业的数据仓库和商业应用解决Ҏ?/p>
势之四Q管理自动化
企业U数据库产品目前已经q入同质化竞争时代,在功能、性能、可靠性等斚w差别已经不是很大。但是随着商业环境竞争日益加剧Q目前企业面临着另外的挑战,卛_何以最低的成本同时又高质量地管理其IT架构。这也就带来了两斚w的挑战:一斚wpȝ功能日益强大而复杂,另一斚wQ对q些pȝ理和维护的成本来昂c正是意识到q些需求,自我理功能包括能自动地Ҏ据库自nq行监控、调整和修复{已成ؓ数据库追求的目标?“我们正看到来多的基于成本和可管理性的竞争Q因为市场正在寻扑ֺ用更单,拥有成本更低的数据库 ?Gartner研究集团一位追t数据库软g市场多年的分析员q样表示?/p>
Oracle的可理性战略侧重在两个斚wQ首先是使Oracle产品的每一部分(包括数据?可能地q行自我理Q以实现最的人力理;W二是整个数据库中心的理更便捗高效,例如Oracle企业理器就提供了一套解x案,用于理和监视基于Oraclepd技术的应用E序和系l?/p>
IBM已在其DB2数据库的应用中集成了自我理功能Q它可以让一个数据库自行发现问题q新设|。“IBM DB2是一个SMART的数据库Q即自我理及资源调度的数据库系l。DB2由数据库pȝ自己q行错误分析、可能的解决Ҏ及自我修复的功能Q提供部分核心配|参数进行自动配|,而不需数据库管理员q行指定和修攏V”Janet Perna表示Q在IBM的新版本数据库Viper中,会有更多自d能,如自我管理和自我修复功能?/p>
Sybase也表C,Sybase数据库一向以低成本而得到用户青睐,低成本主要体现在两个斚wQ一是购买成本,二是l护成本QSybase数据库的设计理念是让用hҎ上手、容易用。而在卛_推出的新版本中,q一步强化了易管理性,如图形化的操作界面、增加操作向g及自动执行功能,使数据库理人员不必要做很多重复性的工作?/p>
微Y也强调,易于理、易于用是SQL Server的设计理c在SQL Server2005中微软新的管理工具套件、自我调节能力和功能强大的编E模型将允许数据库管理员针对数据库的日常q{加以灉|掌控。针对SQL事g探查器及其它工具的改q还可帮助数据库理员将服务器调节至最x能状态。这些改q特性将允许数据库管理员从数据库日常q{工作中解脱出来,q中精力从事数据库体系l构设计{更具h值的d?/p>
1.异构数据库环?/strong>
从数据库研究的角度出发,Web|站上的信息也可以看作一个数据库Q一个更大、更复杂的数据库。Web上的每一个站点就是一个数据源Q每个数据源都是异构的,因而每一站点之间的信息和l织都不一Pq就构成了一个巨大的异构数据库环境。如果想要利用这些数据进行数据挖掘,首先Q必要研究站点之间异构数据的集成问题,只有这些站点的数据都集成v来,提供l用户一个统一的视图,才有可能从巨大的数据资源中获取所需的东ѝ其ơ,q要解决Web上的数据查询问题Q因为如果所需的数据不能很有效地得刎ͼ对这些数据进行分析、集成、处理就无从谈v?/p>
2.半结构化的数据结?/strong>
Web 上的数据与传l的数据库中的数据不同,传统的数据库都有一定的数据模型Q可以根据模型来具体描述特定的数据。而Web上的数据非常复杂Q没有特定的模型描述Q每一站点的数据都各自独立设计Qƈ且数据本w具有自q性和动态可变性。因而,Web上的数据h一定的l构性,但因自述层次的存在,从而是一U非完全l构化的数据Q这也被UC为半l构化数据。半l构化是Web上数据的最大特炏V?/p>
3.解决半结构化的数据源问题
Web 数据挖掘技术首要解军_l构化数据源模型和半l构化数据模型的查询与集成问题。解决Web上的异构数据的集成与查询问题Q就必须要有一个模型来清晰地描q?Web上的数据。针对Web上的数据半结构化的特点,L一个半l构化的数据模型是解决问题的关键所在。除了要定义一个半l构化数据模型外Q还需要一U半l构化模型抽取技术,卌动地从现有数据中抽取半结构化模型的技术。面向Web的数据挖掘必M半结构化模型和半l构化数据模型抽取技术ؓ前提?/p>
XML与Web数据挖掘技?/font>
以XML 为基的新一代WWW环境是直接面对Web数据的,不仅可以很好地兼容原有的Web应用Q而且可以更好地实现Web中的信息׃n与交换。XML可看作一U半l构化的数据模型Q可以很Ҏ地将XML的文档描qC关系数据库中的属性一对应hQ实施精地查询与模型抽取?/font>
1.XML的生与发展
XML (eXtensibleMarkupLanguage)是由万维|协?W3C)设计Q特别ؓWeb应用服务的SGML (StandardGeneralMarkupLanguage)的一个重要分支。ȝ来说QXML是一U中介标Ca(Meta- markupLanguage)Q可提供描述l构化资料的格式Q详l来_XML是一U类gHTMLQ被设计用来描述数据的语a。XML提供了一U独立的q行E序的方法来׃n数据Q它是用来自动描qC息的一U新的标准语aQ它能计算机通信把Internet的功能由信息传递扩大到人类其他多种多样的活动中厅RXMLpq规则组成,q些规则可用于创建标记语aQƈ能用一U被UC分析E序的简明程序处理所有新创徏的标记语aQ正如HTML为第一个计机用户阅读Internet文档提供一U显C方式一PXML也创Z一UQ何h都能d和写入的世界语。XML解决了HTML不能解决的两个Web问题Q即Internet发展速度快而接入速度慢的问题Q以及可利用的信息多Q但难以扑ֈ自己需要的那部分信息的问题。XML能增加结构和语义信息Q可使计机和服务器x处理多种形式的信息。因此,q用XML的扩展功能不仅能从Web服务器下载大量的信息Q还能大大减网l业务量?/font>
XML 中的标志(TAG)是没有预先定义的Q用者必要自定义需要的标志QXML是能够进行自解释(SelfDescribing)的语a。XML使用DTD (DocumentTypeDefinition文档cd定义)来显C些数据,XSL(eXtensibleStyleSheetLanguage)是一U来描述q些文档如何昄的机Ӟ它是XML的样式表描述语言。XSL的历史比HTML用的CSS(层叠式样式表 CascadingStyleSheets)q要悠久QXSL包括两部分:一个用来{换XML文档的方?一个用来格式化XML文档的方法。XLL (eXtensibleLinkLanguage)是XMLq接语言Q它提供XML中的q接Q与HTML中的cMQ但功能更强大。用XLLQ可以多方向q接Q且q接可以存在于对象层U,而不仅仅是页面层U。由于XML能够标记更多的信息,所以它p使用户很L地找C们需要的信息。利用XMLQWeb 设计人员不仅能创建文字和囑ŞQ而且q能构徏文档cd定义的多层次、相互依存的pȝ、数据树、元数据、超链接l构和样式表?/font>
2.XML的主要特?/font>
正是XML的特点决定了其卓的性能表现。XML作ؓ一U标记语aQ有许多特点Q?/font>
(1)单。XMLl过_ֿ设计Q整个规范简单明了,它由若干规则l成Q这些规则可用于创徏标记语言Qƈ能用一U常常称作分析程序的明程序处理所有新创徏的标记语a。XML能创ZUQ何h都能d和写入的世界语,q种创徏世界语的功能叫做l一性功能。如XML创徏的标记L成对出现Q以及依靠称作统一代码的新的编码标准?/font>
(2)开放。XML是SGML在市Z有许多成熟的软g可用来帮助编写、管理等,开攑ּ标准XML的基是经q验证的标准技术,q对网l做最佛_。众多业界顶公司,与W3C的工作群lƈ肩合作,协助保交互作业性,支持各式pȝ和浏览器上的开发h员、作者和使用者,以及改进XML标准。XML解释器可以用编E的Ҏ来蝲入一个XML的文档,当这个文档被载入以后,用户可以通过XML文g对象模型来获取和操纵整个文档的信息,加快了网l运行速度?/font>
(3)高效且可扩充。支持复用文档片断,使用者可以发明和使用自己的标{,也可与他人共享,可g伸性大Q在XML中,可以定义无限量的一l标注。XML提供了一个标C结构化资料的架构。一个XMLlg可以宣告与其相关的资料ؓ零售仗营业税、书名、数量或其它M数据元素。随着世界范围内的许多机构逐渐采用 XML标准Q将会有更多的相兛_能出玎ͼ一旦锁定资料,便可以用Q何方式透过늼U传递,q在览器中呈现Q或者{交到其他应用E序做进一步的处理?XML提供了一个独立的q用E序的方法来׃n数据Q用DTDQ不同的l中的hp够用共同的DTD来交换数据。你的应用程序可以用这个标准的DTD 来验证你接受到的数据是否有效Q你也可以用一个DTD来验证你自己的数据?/font>
(4)国际化。标准国际化Q且支持世界上大多数文字。这源于依靠它的l一代码的新的编码标准,q种~码标准支持世界上所有以主要语言~写的合文本。在HTML 中,大多数字处理而言Q一个文档一般是用一U特D语a写成的,不管是英语,q是日语或阿拉伯语,如果用户的Y件不能阅ȝD语a的字W,那么他就不能使用该文档。但是能阅读XML语言的Y件就能顺利处理这些不同语a字符的Q意组合。因此,XML不仅能在不同的计机pȝ之间交换信息Q而且能跨国界和超不同文化疆界交换信息?/font>
3.XML在Web数据挖掘中的应用XML 已经成ؓ正式的规范,开发h员能够用XML的格式标记和交换数据。XML在三层架构上为数据处理提供了很好的方法。用可升的三层模型,XML可以从存在的数据中生出来,使用XMLl构化的数据可以从商业规范和表现形式中分d来。数据的集成、发送、处理和昄是下面过E中的每一个步?
促进XML应用的是那些用标准的HTML无法完成的Web应用。这些应用从大的斚w讲可以被分成以下四类Q需要Web客户端在两个或更多异质数据库之间q行通信的应?试图大部分处理负蝲从Web服务器{到Web客户端的应用;需要Web客户端将同样的数据以不同的浏览Ş式提供给不同的用L应用;需要智能Web代理Ҏ个h用户的需要裁减信息内容的应用。显而易见,q些应用和Web的数据挖掘技术有着重要的联p,ZWeb的数据挖掘必M靠它们来实现?/font>
XML l基于Web的应用Y件赋予了强大的功能和灉|性,因此它给开发者和用户带来了许多好处。比如进行更有意义的搜烦Qƈ且Web数据可被XML唯一地标识。没有XMLQ搜索Y件必M解每个数据库是如何构建的Q但q实际上是不可能的,因ؓ每个数据库描q数据的格式几乎都是不同的。由于不同来源数据的集成问题的存在,现在搜烦多样的不兼容的数据库实际上是不可能的。XML能够使不同来源的l构化的数据很容易地l合在一赗Y件代理商可以在中间层的服务器上对从后端数据库和其它应用处来的数据q行集成。然后,数据p被发送到客户或其他服务器做进一步的集合、处理和分发。XML的扩展性和灉|性允许它描述不同U类应用软g中的数据Q从描述搜集的Web到数据记录Q从而通过多种应用得到数据。同Ӟ׃ZXML的数据是自我描述的,数据不需要有内部描述p被交换和处理。利用XMLQ用户可以方便地q行本地计算和处理,XML格式的数据发送给客户后,客户可以用应用Y件解析数据ƈҎ据进行编辑和处理。用者可以用不同的方法处理数据,而不仅仅是显C它。XML文档对象模式(DOM)允许用脚本或其他~程语言处理数据Q数据计不需要回到服务器pq行?XML可以被利用来分离使用者观看数据的界面Q用简单灵zd攄格式Q可以给Web创徏功能强大的应用YӞ而原来这些Y件只能徏立在高端数据库上。另外,数据发到桌面后,能够用多U方式显C?/font>
XML q可以通过以简单开放扩展的方式描述l构化的数据QXML补充了HTMLQ被q泛地用来描qC用者界面。HTML描述数据的外观,而XML描述数据本n。由于数据显CZ内容分开QXML定义的数据允许指定不同的昄方式Q数据更合理地表现出来。本地的数据能够以客户配|、用者选择或其他标准决定的方式动态地表现出来。CSS和XSL为数据的昄提供了公布的机制。通过XMLQ数据可以粒状地更新。每当一部分数据变化后,不需要重发整个结构化的数据。变化的元素必须从服务器发送给客户Q变化的数据不需要刷新整个用者的界面p够显C出来。但在目前,只要一条数据变化了Q整一都必须重徏。这严重限制了服务器的升U性能。XML也允许加q其他数据,比如预测的温度。加入的信息能够q入存在的页面,不需要浏览器重新发一个新的页面。XML应用于客户需要与不同的数据源q行交互Ӟ数据可能来自不同的数据库Q它们都有各自不同的复杂格式。但客户与这些数据库间只通过一U标准语aq行交互Q那是XML。由?XML的自定义性及可扩展性,它以表辑U类型的数据。客h到数据后可以q行处理Q也可以在不同数据库间进行传递。MQ在q类应用中,XML解决了数据的l一接口问题。但是,与其他的数据传递标准不同的是,XMLq没有定义数据文件中数据出现的具体规范,而是在数据中附加TAG来表达数据的逻辑l构和含义。这使XML成ؓ一U程序能自动理解的规范?/font>
XML 应用于将大量q算负荷分布在客LQ即客户可根据自q需求选择和制作不同的应用E序以处理数据,而服务器只须发出同一个XML文g。如按传l的 “Client/Server”工作方式,客户向服务器发出不同的请求,服务器分别予以响应,q不仅加重服务器本n的负P而且|络理者还M先调查各U不同的用户需求以做出相应不同的程序,但假如用L需求繁杂而多变,则仍然将所有业务逻辑集中在服务器端是不合适的Q因为服务器端的~程人员可能来不及满众多的应用需求,也来不及跟上需求的变化Q双斚w很被动。应用XML则将处理数据的主动权交给了客P服务器所作的只是可能完善、准地数据封装进XML文g中,正是各取所需、各司其职。XML的自解释性客户端在收到数据的同时也理解数据的逻辑l构与含义,从而q泛、通用的分布式计算成ؓ可能?/font>
XML q被应用于网l代理,以便Ҏ取得的信息进行编辑、增减以适应个h用户的需要。有些客户取得数据ƈ不是Z直接使用而是ZҎ需要组l自q数据库。比方说Q教育部门要建立一个庞大的题库Q考试时将题库中的题目取出若干l成试卷Q再试卷封装进XML文gQ接下来在各个学校让光过一个过滤器Qo掉所有的{案Q再发送到各个考生面前Q未l过滤的内容则可直接送到老师手中Q当然考试q后q可以再传送一份答案汇~。此外,XML文g中还可以包含q诸如难度系数、往q错误率{其他相关信息,q样只需几个程序,同一个XML文g便可变成多个文g传送到不同的用h中?/font>
l束?:
面向Web的数据挖掘是一复杂的技术,׃Web数据挖掘比单个数据仓库的挖掘要复杂的多,因而面向Web的数据挖掘成了一个难以解决的问题。而XML的出Cؓ解决Web数据挖掘的难题带来了Z。由于XML能够使不同来源的l构化的数据很容易地l合在一P因而搜烦多样的不兼容的数据库能够成ؓ可能Q从而ؓ解决Web数据挖掘N带来了希望。XML的扩展性和灉|性允许XML描述不同U类应用软g中的数据Q从而能描述搜集的Web中的数据记录。同Ӟ׃ZXML的数据是自我描述的,数据不需要有内部描述p被交换和处理。作C结构化数据的一个工业标准,XML为组l、Y件开发者、Web站点和终端用者提供了许多有利条g。相信在以后Q随着XML作ؓ在Web上交换数据的一U标准方式的出现Q面向Web的数据挖掘将会变得非常轻松?/font>