Xindice的FAQ - TKDD的专栏 - CSDNBlog

来源:百度文库 编辑:神马文学网 时间:2024/04/28 08:04:31
 Xindice的FAQ    
考查Native XML DBMS中......
本来的首选是Tamino,网上只能找到4.1.4.1版本的评估版,而据说现在的4.2.1版本较之前版做了较大的修改,但是又下载不到,加之这是一个商业软件:(卖钱的),即使Tamino在业界名头不小,还是决定先试用其它软件。接下来考虑的是Apache的Xindice,一个开源的Native XML DBMS(在成本上似乎很有吸引力:)
使用过程开始颇为顺利,但是当我试图把我的20m的xml文件存入Xindice时,数据库直接返回ERROR,没有任何其它提示,即使把分配给jvm的内存调整到512m,还是报错。不解......
翻阅Xindice的文档才发现,原来Xindice对于大型的XML文件并没有很好的支持,这在它的FAQ中提及了,下面特意将Xindice的FAQ草译如下:
1,  Xindice是什么?
Xindice是一个开源的原生(Native)XML数据库。它存储并索引压缩的XML文档,使可以用较小的服务器端代价来为客户端程序提供数据。Xindice同时也提供面向XML数据的独有功能,这些功能往往由关系型数据库较难实现。
2,  Xindice不是什么?
Xindice不是一个持久化的DOM实现。Xindice不是用来存储和管理单个的超大文档的,在这里,一个文档被看作是一组迷你文档的集合。Xindice是专门为管理大量的中小型文档而设计的。
3,  为什么不使用关系型数据库?
XML文档是以树型结构组织的。关系型数据库以一种扁平的,表格方式组织数据,它使用关系连接来揭示数据之间的层次约束。虽然从关系数据库将数据映射到XML中非常容易,但是很不幸,将XML中的数据映射到关系数据库中是意想不到的复杂,而且随意性很高,往往会带来语义的损耗。
4,  为什么不使用一个对象数据库?
对象数据库和它所服务的应用是紧密耦合的,一般不被考虑用来做c/s架构应用的数据库。特别是,它所管理的对象往往只能被创建这个对象的程序语言所反串行化。当对象数据库可以将一些类似于DOM Tree的对象图持久化时,一个庞大的XML文件所产生的众多的对象就会成为一个严重的性能和资源的瓶颈(While object graphs like DOM trees can be persisted in object databases, the number of objects that are produced for a large collection of XML documents can become a serious performance and resource bottleneck.)
5,  为什么不使用一个全文检索引擎?
全文检索引擎对于一组文档的大范围查询是非常快速而有效的。在XML应用中使用全文检索的缺点是创建一个逆序的索引会使你丧失文档的上下文,它需要大量的后续处理来将正在操作的文档节点独立出来。Xindice提供了有效的元素和属性值索引,此外还可以管理和返回聚合后的文档片断。
6,  支持什么查询语言?
Xindice支持XPath和XUpdate。XPath是W3C的标准XML路径语言,是一种非常强大的从文档集合中查询节点集的语言。XUpdate是XML:DB Initiative的更新语言,是一种符合XPath标准定义的,具有比较灵活的更新文档集合的能力的语言。
7,  你的XPath实现是否是完全兼容的?
我们所采用的XPath实现是Apache软件基金的Xalan库。Xindice提供了索引机制和查询优化功能以增加集合级别的XPath查询的表现,但是Xalan对查询具有最终解释权。(but Xalan ultimately has the final say in any query.)
8,  我应该使用哪一个版本的JDK?
我们推荐使用Sun的SDK for Java 1.4或者1.3。Xindice不支持SDK 1.2或更早的版本。当使用1.3的时候,注意1.3.1在一些Linux版本上存在一些已知的问题,但是1.3.0和1.4.2应该没有问题。
9,  XML:DB API少了一些接口,我应该怎么做?
XML:DB API是XML:DB Initiative设计的,所以它的接口和类由他们预先定义。如果你有任何问题或者希望可以帮助增加定义一些XML数据库的标准接口,请访问http://xmldb-org.sourceforge.net
10,              我的5兆大的文件把命令行窗口崩溃了,怎么办?
回顾一下问题2,Xindice不使为管理大型文档设计的,相反,它是为管理中小型文档的集合而设计的。最好的办法是重新审视一下你的5兆大的文档,然后决定将它分割为一系列的小文档的集合是否是一个可以考虑的方案。如果是这样的话,你可以将分割的文档抽取出来,一个一个地存入Xindice集合。下面是一个非常大型的文档:


Boyoda
Cordova
1989


Frod
Tortorus
1990

...

在这里把它分成一个一个的文档而不是一个巨大的文档看来更为合理
11,              XML解析器冲突
org/w3c/dom/DOMException
at org.Xindice.xml.dom.NodeImpl.(NodeImpl.java:86)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:120)
at org.apache.xerces.parsers.DOMParser.setDocumentClassNa
这是一个经常容易碰到的错误,常常是由于你的CLASSPATH里面有多个版本的Xerces XML解析器造成的。在运行Xindice和其它客户端程序之前,确保Xindice所提供的Xerces.jar被放在了CLASSPATH的最前面
12,              我的数据库在哪里?
从Xindice1.1开始,数据库开始运行在一个应用服务器下。数据库的配置是在[your webapps directory]/xindice/WEB-INF/system.xml(假设你的war包已经被容器解压缩)
Xindice的配置默认使用“./db”作为数据库的位置,这是相对于web应用的 /WEB-INF位置,这意味着通常数据库位于[your webapps directory]/xindice/WEB-INF/db。
这可以通过两种方式被改写:编辑/WEB-INF/system.xml并设置一个绝对路径作为”root-collection”标签的”dbroot”属性,或者设置”Xindice.db.home”的java属性中”./db”的父目录。举例来说,通过命令行设置属性值(-Dxindice.db.home=/var/xindice)意味着数据库将会保存在/var/xindice/db。
 
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=544390