-------------------
[日志] 2009.04.15
上午去图书馆查了几本关于MySQL的书。中午来到实验室,调试以前的Web对象抽取代码。
在网上调研相关资料时,发现了JDOM处理大XML报错的原因,跟我之前想的一样,是JAVA虚拟机空间不足的问题。JDOM是基于树型解析,它解析的时候会把整个文件读入内存,然后遍历所有标签,生成子节点列表。这种解析方式在处理小文件时有着很高的效率,可是遇到大文件就无能为力了。SAX(Simple API for XML)是一种古老的XML处理方案,它从上到下一行一行的读入文件,边读边解析。它是基于事件处理的(遇到每个标签都要有相应的处理),使用起来很麻烦,但似乎是目前处理超大XML文件的唯一办法。通过查找相关的示例源码,暂时实现了对超大XML的简单抽取。SAX不理会标签的名字空间(JDOM对名字空间的要求很高),因此只适合读取XML,不适合修改。
调试代码的过程中有个小问题,setContentHandler的输入参数不正确,困扰很长时间。后来才发现忘了继承DefaultHandler父类。
遇到的问题:
Web对象抽取的代码还需要继续重写,这次又走了点弯路。当初调研的时候不够认真,看到网上对JDOM评价很高,示例源码也多,而且有的使用心得介绍JDOM处理大文件也很方便,就没有再去查DOM、SAX这些古老的东西。现在想来,差点被害死。
下一步计划:
数据库最好导入到服务器上,明天与大三的周学弟商量一下看如何解决。
相关资料:
[1] SAX. http://www.saxproject.org/
-------------------
[日志] 2009.04.14
今天上午参加了一个笔试,下午才回来。读了实验室项目OlympicVis处理XML和数据库的相关代码,并把包含了层次关系的数据库传给同学。
晚上调试了一下曹同学连接数据库的代码,发现数据库配置文件database.properties里的变量名与程序不符。修改好配置文件后,数据库可以连接成功。然后与曹同学一起讨论树的层次关系的实现,维基百科的Category类别根节点是Portals(门户入口),其下的子类都是各个领域的名称,比如Culture portals、Science portals等,其中Culture portals又包含Culture、Food等,Culture中又包含Arts、Civilization等子类 ... 如此查下去,似乎可以得到一颗很漂亮的领域树。不过这里面仍然有可导致循环的层次关系,这是由于维基百科的编辑者都是很多普通网友,某些人对层次关系的定义并不严谨。
遇到的问题:
层次关系中存在的错误定义(树变成了图)随着数据库规模的增大,有可能导致严重的问题,目前没有想到更好的解决办法,只能说是维基百科的局限性。
下一步计划:
与曹同学讨论数据获取的过程中,对接口模块有了一些新的思路。明天去图书馆借点数据库开发的书,特别是批处理等功能,也许会提高接口模块的效率。
嘴馋吧?特供茅台欣赏
13 年前

没有评论:
发表评论