日期:2014-05-19  浏览次数:20890 次

有关oracle读取大文本问题 散分
第一先感谢csdn各位朋友的帮助,csdn对于我这个菜鸟成长是有很大的帮助的!!!
第二是辞职了,散一下分,希望以后工作中一帆风顺,祝各位朋友们工作顺利!!!
第三是有一个问题,请教一下大家.这问题可能有些简单,希望朋友们不要鄙视!!!谢谢!!!
问题分为两步,所以我在这里分开描述:
问题描述:
第一步:我的程序(以下简称A程序)与另一个程序交互(以下简称B程序).B程序将数据以xml的形式放在ftp中,A程序通过访问ftp将文件下载到本地并且解析,通过DOM将数据解析出来插入到我的Oracle数据库中,但是在xml中一个比较大的文本数据,如一篇文章,我是以LONG类型的形式存放到数据库里面的,每一篇文章差不多7000字左右.数据交互这一块可能是成功的,因为我很顺利的将数据存入到我的数据库里面了.
第二步:A程序的某个功能会查询这个数据,将数据罗列出来,就是一个特别简单的查询,这个查询也会将那个LONG类型字段查询出来,但是却出现了内存溢出的问题.

我将我的想法在这里说一下,希望大家指导一下:我的解析方式需要换一下,修改为SAX读取方式,由于dom是一次性加载整个文档树的,在解析的时候内存中生成与xml文档对应的对象模型,然后根据节点对对象树进行操作,应该是占用内存的所以改为了SAX.
但是A程序在进行查询的时候还是会有内存溢出的情况,所以我没有办法了.
请教了一位朋友,给出了几条思路:首先解析XML方式修改为SAX或者XStream.其次大文本用文件保存(二进制形式)或者使用compass再或者使用MongoDB分布式文件数据库.

我不明白的是修改为SAX之后为什么还有内存溢出的情况,难道字节流的序列化过程读取大文本的时候吃内存这么恐怖???
我迷惑的是:我解析XML使用SAX是否正确?为什么A程序查询的时候还是内存溢出,这个问题需要如何解决?
不要推荐使用blob,估计服务器可能受不了!!!希望大家给出详细一点的思路,3q!!!  
额 csdn只允许我发表分数不大于100的帖子,抱歉了!!!

------解决方案--------------------
小僧UPUPUPUP
------解决方案--------------------
必须的给你顶,因为我也想知道答案
------解决方案--------------------
这个问题其实很简单,将数据组织成二进制文件,并且分开存放(最好是分多台机器,pc也可以),至于如何分配可以通过一定的业务逻辑,比如地区、日期、ID号等等分割开来。如果想省事,直接上MongoDb吧。
------解决方案--------------------
正在学oracle
谢谢楼主
------解决方案--------------------
很想知道答案
------解决方案--------------------
楼主一路顺风
------解决方案--------------------
你把XML文件下载到本地后,关闭流了么
你既然是从oracle中查询的,那和XML就没有关系了啊