Java存取Oracle的二进制类型和大对象类型

YuanyuanL 发布于 2013/08/23 15:18
阅读 963
收藏 0

      在基于Oracle的Java开发中,有时候我们需要存储文件(文本、图片、视频、影音等)或者较长的字符串,这时候我们就需要使用Oracle的BFile、BLOB、Raw、Long Raw以及CLOB、NCLOB,来存储或者取出这些大数据。由于这些文件都比较大,这时就面临程序的效率以及内存的问题,哪些方法能够高效的处理大对象的存储并避免内存溢出呢?

       希望大家一起讨论下~~

加载中
0
古月楼
古月楼

个人建议不要把这些大的文件存在oracle里面,可以存在mongodb里面。

还有oracle建议不要用Long NCLOB 字段。oracle官网都不建议使用

YuanyuanL
YuanyuanL
我想说前提是只能存到Oracle,那得怎么样处理才能尽可能避免内存溢出和提高效率?
0
南湖船老大
南湖船老大

oracle 只是有这么个东西,但不建议用。还是放硬盘或者mongodb里吧。

就好比人身上也有很多废物,比如阑尾、男人的乳头,扁桃体。。。本来没啥大用,但是用不好就是隐患。

YuanyuanL
YuanyuanL
跟给楼上的回复一样啊,我也知道不好用,但是只能用Oracle啊~
0
panmingguang
panmingguang

引用来自“南湖船老大”的答案

oracle 只是有这么个东西,但不建议用。还是放硬盘或者mongodb里吧。

就好比人身上也有很多废物,比如阑尾、男人的乳头,扁桃体。。。本来没啥大用,但是用不好就是隐患。

佩服你了, 这比如
0
中山野鬼
中山野鬼

你是要做数据的删改,还只是数据的存读?后者,这种非结构化的数据,基本按照文件来处理。而不是依次读取。由于是非结构化的,所以数据组织关联无法使用sql来处理。典型的如视频流,sql数据库里面你增加个数据块的索引,维护就可以了。余下的具体事情,让其它程序代办。比如一个视频流,我们需要分场景,这对识别是基础要求,用其它系统,处理后,结论存在sql里是可以的。但不要让 sql干,它也干不来。

至少我现在设计的后台系统,除了主题数据库外,都需要有专家系统的接口。否则系统能做的事情太少了。

YuanyuanL
YuanyuanL
回复 @中山野鬼 : 我明白你的意思了,这个我也考虑过,谢谢你~~
中山野鬼
中山野鬼
回复 @媛媛小译 : 你最多把文件路径,或者文件内部某段的位置偏移量存到库里,而不是具体大文件的数据放到库里。
YuanyuanL
YuanyuanL
回复 @中山野鬼 : 奥,你的意思是,比我用的JAVA开发,那我就从那个字段得到一个流,然后把流写到文件里,就相当于把这个大数据从这个字段读出来。是不是这样?
中山野鬼
中山野鬼
回复 @媛媛小译 : 你对数据库的开发,肯定有一个面向业务的开发语言。用这个语言调度其它模块去折腾这个文件,而不是用sql,让数据库折腾。这个文件本身就不在库里。
YuanyuanL
YuanyuanL
首先很感谢回帖,鬼哥的话很专业! 不让sql去取大数据的话,那么可以举一个简单的例子说一下,可以怎么取么?比如说从blob里面取一个2G的文件。
0
IdleMan
IdleMan

既然考虑了文件存入数据库,就应该知道会带来这些问题。单纯的 对“ 从blob里面取一个2G的文件”进行优化是徒劳的,即使在硬盘上拷贝这么大的文件都会很耗时。这么大的文件可以考虑迅雷一样  多线程下载、p2p、断点续传....

APP和DB的网络宽带 有瓶颈没;

DB的内存、磁盘有瓶颈没;

YuanyuanL
YuanyuanL
是的啊,存到库里确实有很多限制,我也不想,但是作为新手就想了解更多,其实我写这个贴子,也是想看看开发者们对这些情况的态度。
0
梁某某
梁某某
大对象  别存库里面把〉?服务器也很难承受吧?比如一个好几百M的文件,你敢放库里面?估计不靠谱! 
YuanyuanL
YuanyuanL
是啊,如果是我肯定不会,但是我是做后期的数据的处理的,所以对前期应用中存储的情况要做各方面的一个处理,尽量对各种情况都考虑进去。
0
金贞花
金贞花
可爱 这么做不好
YuanyuanL
YuanyuanL
我会弹劾他的 哈哈
金贞花
金贞花
回复 @媛媛小译 : 唉,谁定的啊,你去和那个人说,"你就是在瞎扯淡"
YuanyuanL
YuanyuanL
回复 @Gelopa : 只能用oracle
金贞花
金贞花
回复 @媛媛小译 : 不让只存路径,用MongoDB存文件吧
YuanyuanL
YuanyuanL
囧啊 我也知道不好啊,但是木有办法,不让只存路径,所以我找了很多方法,但是都是有一定限制的。。
0
中山野鬼
中山野鬼

引用来自“IdleMan”的答案

既然考虑了文件存入数据库,就应该知道会带来这些问题。单纯的 对“ 从blob里面取一个2G的文件”进行优化是徒劳的,即使在硬盘上拷贝这么大的文件都会很耗时。这么大的文件可以考虑迅雷一样  多线程下载、p2p、断点续传....

APP和DB的网络宽带 有瓶颈没;

DB的内存、磁盘有瓶颈没;

主要还是考虑结构化的问题。。。。。结构化,是分析问题的一种好方法,不过很多事情确实无法结构化。哈。
YuanyuanL
YuanyuanL
多谢各路高手给我启迪。。
0
古月楼
古月楼

引用来自“南湖船老大”的答案

oracle 只是有这么个东西,但不建议用。还是放硬盘或者mongodb里吧。

就好比人身上也有很多废物,比如阑尾、男人的乳头,扁桃体。。。本来没啥大用,但是用不好就是隐患。

你比喻真的好。
0
一条大河波浪宽
一条大河波浪宽
俺是过来学习的,期待楼主好的思路~希望能得到分享  ~
返回顶部
顶部