快速业务通道

利用Hibernate储存大对象到达梦数据库 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18

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

时间:2011-03-07 IT专家网 徐欣

使用达梦数据库的大字段前不得不说一下数据库大字段的性能问题:在数据库中,经常需要用到大字段类型,如Oracle中long、blob、clob,SQLServer中的text、image,MySql中的text、longtext、clob、blob以及达梦数据库中的clob、blob类型。存储的信息大概主要是两类,一类是长文本,如大段的文字,普通的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

利用Hibernate储存大对象到达梦数据库(2)

时间:2011-03-07 IT专家网 徐欣

然后编写关于这2个大字段的Java对象文件TestLob.java,分别定义类型为CLOB和BLOB属性字段为String和byte[]类型,其中由于CLOB是处理大文本类型所以它对应了Java中的String类型,BLOB是处理一些以二进制流形势存储的没有严格定义的大文件所以让它使用byte[]类型,然后分别定义这2个属性的Getter和Setter方法,相关代码如下:

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; } public void setBlobContent(byte[] blobContent) {   this.blobContent = blobContent; } public String getClobContent() {

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号