利用Hibernate储存大对象到达梦数据库中

使用达梦数据库的大字段前不得不说一下数据库大字段的性能问题 在数据库中,经常需要用到大字段类型,如 O racle 中longblobclob SQLS erver text、i mage M y S ql 中的textlongtextclobblob 以及 达梦 数据库 中的clobblob 类型 。存储的信息大概主要是两类,一类是长文本,如大段的文字,普通的varchar最长只能存储4K的数据,已经不能满足要求;另一类是存储二进制信息,如上传的文件等 不过通常情况下,大字段不意味着保存很大的文件,例如很长的文章,图标,小图片等等。数据 过大 保存在数据库有诸多的问题:
    1. 速度慢:影响一张表的查询速度的,除了行数,还包括表所占的物理空间的大小。此表在数据量较小时,在查询方面感觉不到明显的差异。但是如果 某个 字段所存储的数据都是大段文本或较大的文件时,会导致表的物理空间迅速变大,该字段所占用的空间有可能达到整表所占空间的90%以上。在此基础上,如果行数再增加到数十万、上百万级时,整个表所占的空间将达到一个惊人的数字,查询的速度亦会受到非常大的影响。
    2. 操作不方便:必须把数据库打开一个流,构造一个Buffer,然后再输出一个ServletOutputStream。占用数据库连接,加重数据库访问负载不说,如果用户突然中断下 ,还需要处理数据库关闭动作,容易造成性能问题。如果把整个数据读入内存再输出,则内存占用非常 观。如果是硬盘文件,只要返回一个URL 就可以了。即使你不希望用户直接访问到文件,你也可以构造一个IOStream来输出文件,既不会占用数据库资源,传输速度也快。
    3.性能有问题:特别的情况是,如果并发很多用户来下载大文件的时候,应用服务器要占用非常多的内存来缓存文件内容,假设并发10个用户,下载10MB的文件,JVM的峰值就至少需要100MB内存来支撑,很容易造成JVM崩溃。
    所以说数据库大字段并不适合存储过大的数据,数据过大可能会影响到数据库存储的性能。
    下面言归正传,使用Hibernate操作达梦数据库中的大字段应该有如下几步:
    1 首先需要一张表存储大字段数据:包括内容,类型;
    2 必须得到一个代表上传文件的数据流;
    3 进行保存操作
好了我们先建一张表,里面包括达梦数据库的2个大字段类型(CLOB、BLOB)字段
-- 创建表
create table TESTLOB(
   ID int primary key ,
   TITLE varchar (50),
   CLOBNAME varchar (50),
   CLOBCONTENT clob ,
   BLOBNAME varchar (50),
   BLOBCONTENT blob
);
在建立一个序列用于处理表的流水ID:
-- 创建序列
CREATE SEQUENCE "TESTLOB" . "SEQ_TESTLOB_ID"
INCREMENT BY 1 START WITH 1 MAXVALUE 100000 MINVALUE 1
NOCYCLE
然后编写关于这2个大字段的Java对象文件TestLob .java ,分别定义类型为CLOB和BLOB属性字段为String和byte[]类型,其中由于CLOB是处理大文本类型所以它对应了Java中的String类型,BLOB是处理一些以二进制流形势存储 没有严格定义的大文件所以让它使用byte[]类型 然后分别定义这2个属性的 G et ter S et ter 方法 ,相关代码如下:
package com.dm.lobtest.vo;
 
public class TestLob {
    private int id ;
    private String title ;        // 记录标题
    private String clobName ;     //clob 文件名称
    private String clobContent //clob 文件
    private byte [] blobContent //blob 文件
    private String blobName ;     //blob 文件名称
       
    public byte [] getBlobContent() {
        return blobContent ;
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值