计算机图像存储原理,分析大文本与图像数据在数据库内部的存储原理

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

程序的清单 1 是逐行读取 CLOB 字段,并且调用 decode 函数进行转码;程序的清单 2 是 decode 函数的关键性代码。完整的程序见源代码下载部分。

清单 1. 读入 CLOB,写入 BLOB 字段

EXEC SQL BEGIN DECLARE SECTION;

SQL TYPE IS CLOB(100 K) clobResume; //CLOB 结构体变量

SQL TYPE IS BLOB(100 K) blobResume; //BLOB 结构体变量

sqlint16 bobind;

sqlint16 lobind;

sqlint16 cobind;

sqlint32 idValue;

EXEC SQL END DECLARE SECTION;

int clob2bin(void)

{

// 声明 SQLCA 结构

struct sqlca sqlca;

int charNb;

int lineNb;

long n;

n=0;

// 定义数据库游标

EXEC SQL DECLARE c1 CURSOR WITH HOLD FOR

SELECT czrkxp_a

FROM CZRK_blob for update;

EXEC SQL OPEN c1;

// 活动 CLOB 字段的信息,已经 CLOB 字段的大小

EXEC SQL FETCH c1 INTO :clobResume:cobind;

// 循环读取 CLOB 字段,并且调用 DECODE 转码函数

while (sqlca.sqlcode != 100)

{

if (cobind < 0)

{

printf(“ NULL LOB indicated.\n”);

}

else

{

n++;

decode(); // 文本格式到二进制流的转码函数

printf(“\nCurrent Row =%ld”,n);

// 数据写入 BLOB 字段

EXEC SQL update czrk_blob set czrkxp_blob = :blobResume

where current of c1; ;

// 提交事务

EXEC SQL COMMIT;

}

EXEC SQL FETCH c1 INTO :clobResume:cobind ;

}

// 关闭游标

EXEC SQL CLOSE c1;

EXEC SQL COMMIT;

return 0;

}

清单 2. 文本文件到二进制文件的转换

void decode( void )

{

unsigned char in[4], out[3], v;

int I, len;

long j,k;

j = -1;

k=0;

// 将读入 CLOB 结构体变量的数据进行转换

while( j < clobResume.length){

for( len = 0, I = 0; I < 4 && ( j < clobResume.length ); i++ ) {

v = 0;

while((j < clobResume.length) && v == 0 ) {

j++;

v = (unsigned char) clobResume.data[j];

v = (unsigned char) ((v < 43 || v > 122) ? 0 : cd64[ v – 43 ]);

if( v ) {

v = (unsigned char) ((v == ‘$’) ? 0 : v – 61);

}

}

if( j < clobResume.length ) {

len++;

if( v ) {

in[ I ] = (unsigned char) (v – 1);

}

}

else {

in[i] = 0;

}

}

if( len ) {

decodeblock( in, out );

// 写入到 BLOB 结构体变量中

for( I = 0; I < len – 1; i++ ) {

blobResume.data[k] = out[i];

k++;

}

}

}

blobResume.length= k;

}

--------------------------------------------------------------------------------

回页首

数据的转换效率和优化建议

在 IBM P570 数据库服务器上运行,该程序的运行效率非常高,先后进行了几个数量级的测试,最终平均测试的转换效率为:每 1 万笔数据记录,转换的效率 55 秒,即 182 条 / 秒。值得注意的是,整个转换过程占用 CPU 的量并不特别大,主要的性能瓶颈在磁盘阵列中。

以后可以进一步在以下方面进行调优,确保程序转换的效率更高:

1)采用多进程调用的方式,以获得更高的并发数量;

2)采用每 10 次或者 100 次提交事务的方式,减少访问磁盘的次数;

3)将 CLOB 和 BLOB 分别放置在不同的表空间上,并且将表空间分布在在多个磁盘上,获得最佳的磁盘访问速度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值