oracle 大字段的使用(转)

数据库大字段(Clob, Blob)不适合存储超过1MB的数据

通常数据库都提供Clob,Blob,Text,Long等大字段类型来存放超过4K的数据,然而这绝不意味着应该使用大字段来保存超过1MB以上的数据文件。之所以有大字段,往往是因为varchar类型有一定的长度限制,例如4K。超过此长度的文本和二进制数据必须使用大字段保存。不过通常情况下,大字段不意味着保存很大的文件,通常只是几十到几百KB的数据,例如很长的文章,图标,小图片等等。超过1MB以上的数据保存在数据库有诸多的性能问题:

速度慢 
Web Server可以直接读取硬盘文件,然后返回文件给客户端,或者应用服务器读硬盘文件返回客户端,其效率要远远超过应用服务器访问数据库读取数据返回客户端。

操作不方便 
必须把数据库打开一个流,构造一个Buffer,然后再输出一个ServletOutputStream。占用数据库连接,加重数据库访问负载不说,如果用户突然中断下载,还需要处理数据库关闭动作,容易造成性能问题。如果把整个数据读入内存再输出,则内存占用非常客观。如果是硬盘文件,只要返回一个URL就可以了。即使你不希望用户直接访问到文件,你也可以构造一个IOStream来输出文件,既不会占用数据库资源,传输速度也快。

性能有问题 
特别的情况是,如果并发很多用户来下载大文件的时候,应用服务器要占用非常多的内存来缓存文件内容,假设并发10个用户,下载10MB的文件,JVM的峰值就至少需要100MB内存来支撑,很容易造成JVM崩溃。

Oracle其实还有一种File的Blob类型,虽然也是Blob,但是实际上File是保存在硬盘上的,这种方式的你可以试试看,只不过我觉得这种方式还不如直接操作文件方便,既然原理是一样的。

另外补充一点,常规的数据库备份都是无法备份Blob数据的,所以如果你把文件都保存到Blob里面去的话,数据库的备份是一个很头疼的大问题,你必须单独写程序把blob数据读出来,再写到硬盘文件去,再备份文件。而你如何把文件放在硬盘某个目录下面,而不是做为blob放在数据库里面,那备份简直易如反掌。

当然保存文件的方式的缺点就是文件不能重名,否则会覆盖,这个问题也不难解决,一般的fileupload API碰到重名都会有很多改名保存的策略;另外一点就是操作系统一个目录下面可以放的文件数量有限制,这个限制通常和文件系统的inode数量有关系,例如一个目录下面只能放1024个文件之类,然而这个问题同样可以通过file upload的一些保存策略解决掉,例如再增加一个子目录存放什么的。Oracle其实还有一种File的Blob类型,虽然也是Blob,但是实际上File是保存在硬盘上的,这种方式的你可以试试看,只不过我觉得这种方式还不如直接操作文件方便,既然原理是一样的。

时间: 2024-10-20 20:48:50

oracle 大字段的使用(转)的相关文章

oracle大字段类型clob和glob备忘

BLOB和CLOB都是大字段类型,BLOB是按二进制来存储的,而CLOB是可以直接存储文字的.其实两个是可以互换的的,或者可以直接用LOB字段代替这两个.但是为了更好的管理ORACLE数据库,通常像图片.文件.音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去.而像文章或者是较长的文字,就用CLOB存储,这样对以后的查询更新存储等操作都提供很大的方便.

asp数据库编程:Oracle大文本在ASP中存取问题的解决

在我开发BS结构程序中,由于经常需要在ORACLE中处理一些容量较大的文本数据,所以经过反复测试终于用ASP成功解决了大文本数据在ORACLE下存取问题. 一.运行环境: 1.Microsoft Windows 2000 Server + IIS 5.02.Oracle8i中文标准版 二.建立数据表: CREATE TABLE SYSTEM.TEST(BLOB LONG,ID NUMBER)/ 三.源程序:1.数据存入程序:test.asp <%'表单提交处理部分{上海治疗阳痿医院}'-----

oracle 增加大字段项

--不同类型增加大字段项 alter table 表名 add 新增一个字段B clob; --将需要改成大字段的项内容copy到大字段中 update 表名 set 新增一个字段B=字段A; --将大字段名改成原字段名 alter table 表名 rename column 字段A to 字段A变成字段C; alter table 表名 rename column 新增一个字段B to 新增一个字段B改成字段A --同一类型增加字段项alter table 表名 modify (字段 nva

JavaWeb学习总结(三十五)——使用JDBC处理Oracle大数据

一.Oracle中大数据处理 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种类型的字段,很灵活,适用于数据 量非常大的业务领域(如图象.档案等). LOB类型分为BLOB和CLOB两种:BLOB即二进制大型对象(Binary Large Object),适用于存贮非文本的字节流数据(如程序.图象.影音等).而CLOB,即字符型大型对象(Character Large Obj

JavaWeb(三十五)——使用JDBC处理Oracle大数据

一.Oracle中大数据处理 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种类型的字段,很灵活,适用于数据 量非常大的业务领域(如图象.档案等). LOB类型分为BLOB和CLOB两种:BLOB即二进制大型对象(Binary Large Object),适用于存贮非文本的字节流数据(如程序.图象.影音等).而CLOB,即字符型大型对象(Character Large Obj

使用JDBC处理Oracle大数据

一.Oracle中大数据处理 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种类型的字段,很灵活,适用于数据 量非常大的业务领域(如图象.档案等). LOB类型分为BLOB和CLOB两种:BLOB即二进制大型对象(Binary Large Object),适用于存贮非文本的字节流数据(如程序.图象.影音等).而CLOB,即字符型大型对象(Character Large Obj

Oracle大数据查询优化

1.对于像状态之类的列,不是很多的,就可以加位图索引,对于唯一的列,就加唯一索引,其余的创建普通索引. 2.尽量不要使用select * 这样的查询,指定需要查询的列. 3.使用hits  select /*+index(索引名称) index(索引名称)*/ supply_id from CSS_SUPPLY  where ... 4.将表table在线重定义为分区表,在name列上使用hash分区或者range分区 5.如果是exedata平台,不要用索引,尽量少用hint: 6.用并行:

Oracle大数据SQL语句优化

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描, 如: select id from t where num is null    可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0 3.应尽量避免在 where 子句中使用!=或<>操作符,否则

基于AEAI ESB的处理大字段

1.背景 数据迁移中大字段一直是个比较头疼的问题,一旦大字段中值大于32K的话就无法用sql语句来实现插入和更新.通用的解决办法一般有两种:存储过程和JDBC.下面主要总结下基于AEAI ESB用JDBC对大字段的解决方案. 2.实现思路 从本地读取图片/文件,插入oracle数据库 从oracle中读取数据插入SQLServer 从SQLServer中读取数据写入本地 JDBC中采用流机制对 BLOB/CLOB 进行读写操作 验证写入本地的图片/文件与源数据是否一致 3.功能设计 JDBC大字