南大通用GBase 8s大对象类型clob和text的比较说明

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 本文探讨了GBase数据库中用于存储大对象数据的字段类型,包括TEXT、CLOB、BYTE和BLOB,分析了它们的特点、适用场景及在实际应用中的最佳实践。重点介绍了不同数据大小对应的字段类型选择,以及在数据库工具和程序中操作这些类型的方法,强调了合理选择字段类型对提升数据库性能的重要性。

在数据库的世界里,数据存储和管理是一项复杂而精细的工作。尤其是当我们涉及到大对象数据时,选择合适的字段类型对于性能和效率至关重要。本文我们将探讨数据库中的大对象字段类型——TEXT、CLOB、BYTE和BLOB,了解它们的特点、使用场景以及如何在实际应用中发挥它们的最大效用。

大对象字段类型的分类
⼤对象字段类型是为了存储超过32KB以上的数据⽽使⽤的字段类型。
数据在32KB到2GB之间,推荐使⽤简单大对象字段类型。
数据在2GB到4TB之间,推荐使⽤智能大字段类型 。
数据⼩于32KB的可以使⽤varchar类型,这个类型可以存储32KB以下的数据 。

由于三种字段类型的存储⽅式、检索⽅式都不⼀样,所以希望尽可能按照数据应⽤的⼤⼩选择应使⽤的类型,从⽽保证性能。

简单大对象text和byte
⼤字段数据分为两种:⽂本类型数据和二进制数据

文本类型数据:TEXT,适⽤于32KB到2GB的⽂本类型数据。TEXT 数据类型存储任何⽂本数据。TEXT 列通常存储备忘录、⼿册章节、商业⽂档、程序源⽂件和其他⽂本类信息。
二进制数据:BYTE,适⽤于32KB到2GB的⼆进制类型数据,存储⾳视频类型数据。
智能大对象clob和blob
智能⼤对象类型是在简单⼤对象类型之上做的延伸,是针对超过简单⼤对象类型存储上限的数据⽽延伸出来的字段类型,即超过2GB⼤⼩数据的数据⽽使⽤的字段类型。

文本类型数据:text可存储2GB以下的数据,超过这个⼤⼩则使⽤clob字段类型。
二进制类型数据:byte可存储2GB以下的⼆进制数据,超过这个⼤⼩则使⽤blob类型数据。
简单大对象和智能大对象在数据库端使用的比较
1、text和byte字段类型在数据库⼯具使⽤的缺点
text和byte字段类型⽆法使⽤insert语句在数据库⼯具中插⼊,需要使⽤load的⽅式。
text和byte在数据库端无法使⽤insert。

> create table test(id text,name byte);
Table created.
Elapsed time: 0.001 sec
> insert into test values('a','1');
617: A blob data type must be supplied within this context.
Error in line 1
Near character position 28

使⽤load语法插⼊简单⼤字段类型数据。

[gbasedbt@iZ2ze5s78e4tanwe5q2znxZ ~]$ cat test
a|a1
b|b1
[gbasedbt@iZ2ze5s78e4tanwe5q2znxZ ~]$ dbaccess test 
Your evaluation license will expire on 2025-09-18 00:00:00
Database selected.
> load from 'test' delimiter '|' insert into test;
2 row(s) loaded.
Elapsed time: 0.002 sec
> select * from test;
id
a
name  <BYTE value>
id
b
name  <BYTE value>
2 row(s) retrieved.

load是从⽂件中加载数据,上述是从test⽂件中加载两⾏text和byte类型数据。

语法说明
load from '⽂件路径和⽂件' delimiter '分隔符,默认是|' insert into 表名;

2、智能大对象在数据库端的使用
blob和clob字段类型可以更换模式的情况下可以使⽤insert语句插⼊。

gbase8s在3.3.0之后数据库分为了两种模式,⼀种是默认的gbase模式,还有⼀种是oracle模式,⽽blob和clob在oracle模式的情况下可以在数据库端使⽤insert插⼊。

调整数据库模式可以使⽤insert插⼊。

> create table test1(id clob,name blob);
Table created.
Elapsed time: 0.002 sec
> set environment sqlmode 'oracle';
Environment set.
Elapsed time: 0.002 sec
> insert into test1 values('c','c1');
1 row(s) inserted.
Elapsed time: 0.008 sec
>

简单大对象和智能大对象在程序中的对比
1、简单大对象在程序中的使用
简单⼤对象在数据库端⽆法使⽤insert插⼊,但是可以在程序中使⽤insert的⽅式进⾏插⼊:text字段类型批量推荐⽅法如下:使⽤mybatis提供的ExecutorType.BATCH去实现批量插⼊。
部分代码如下:

InputStream inputStream = Resources.getResourceAsStream(resource);
sf = new SqlSessionFactoryBuilder().build(inputStream);
sqlsession = sf.openSession(ExecutorType.BATCH,false);
TableOneMapper tableOneMapper = sqlsession.getMapper(TableOneMapper.clas
s);
List<TableTwo> list =new ArrayList<>();
for (int i=1;i<= 20000;i++){
   
   list.add(new TableTwo(i, UUID.randomUUID().toString(),UUID.randomUUID
().toString()));
}
long timeStamp1 = System.currentTimeMillis();
System.out.println("begin_time: "+timeStamp1);
list.stream().forEach(tableTwo -> tableOneMapper.instTab3(tableTwo));
long timeStamp2 = System.currentTimeMillis();
System.out.println("end_time: "+timeStamp2);
System.out.println(timeStamp2-timeStamp1);
sqlsession.commit();
sqlsession.close();----Mapper
如下
<insert id="instTab3" >
       insert into tabletwo values(
#{
   tableTwo.c1},#{
   tableTwo.c2},#{
   tableTwo.c3}
       );
</insert>

处理逻辑就是不使⽤集合作为参数传递给foreach去拼接sql, ⽽是将单个对象传递给mapper接⼝,这样处理⼤⼤减少了客户端与数据库的通信次数,极⼤增加效率。

2、智能大对象在程序中的使用
⼀般⽅法使⽤智能⼤对象,先从缓冲中找到存储数据真实位置的⽂件描述符,再通过⽂件描述符去找到真实数据的位置,但是clob和blob字段类型的获取在⼤批量获取的时候,多并发获取⽂件描述符的时候会出现检索冲突或者返回结果为NULL的情况。

推荐方法:

如果数据真的超过2GB:

针对mybatis框架,由于默认情况下是通过获取描述符的⽅式去获取数据的,所以可以通过改变获取⽅式从⽽跳过⽂件描述符,如取消mybatis框架中的GET CLOB协议。
使⽤getstring的⽅式获取数据。

数据没有超过2GB

字符⽂本类型数据使⽤text类型。
⼆进制类型使⽤byte类型。

总之,大对象字段类型的选择和管理是数据库设计中的一个重要方面。通过了解TEXT、CLOB、BYTE和BLOB的特点和使用场景,我们可以更好地优化数据库性能,提高数据处理的效率。在实际应用中,我们应该根据数据的大小和特性,选择最合适的字段类型,以确保数据的高效存储和快速检索。

相关文章
|
3天前
|
SQL 数据挖掘 测试技术
南大通用GBase8s数据库:LISTAGG函数的解析
南大通用GBase8s数据库:LISTAGG函数的解析
|
2天前
|
SQL 存储 Oracle
南大通用GBase 8s 静态游标介绍
GBase 8s 数据 兼容Oracle的PL/SQL编程语言,支持多种数据类型、变量声明及控制结构。本文重点介绍静态游标的使用方法,包括隐式和显式游标。隐式游标自动管理,适用于DML操作;显式游标需手动定义与管理,提供更灵活的数据处理方式。通过合理运用游标,可提高数据库操作效率和代码可维护性。
|
3天前
|
SQL 测试技术 数据库
|
22小时前
|
SQL 存储 关系型数据库
达梦数据库字段类型 varchar 转 text
本文介绍了在达梦数据库中将字段类型从 `varchar` 转换为 `text` 的两种方法:一是通过 DM数据迁移工具导出表结构和数据,修改后重新导入;二是通过添加临时字段、转移数据、删除原字段并重命名临时字段的方式实现转换。针对不同数据量的表,提供了灵活的解决方案。
|
2天前
|
存储 SQL Oracle
南大通用GBase 8s数据库的WITH FUNCTION语句详解
南大通用GBase 8s数据库的WITH FUNCTION语句详解
|
1天前
|
存储 Java 数据库连接
南大通用 GBase 8s JDBC字符集参数详解
本文详细介绍了南大通用GBase 8s V8.8 数据中四个关键的JDBC字符集参数:CLIENT_LOCALE、DB_LOCALE、NEWCODESET和NEWLOCALE,涵盖它们的功能、配置方法及其在数据库操作中的作用,旨在帮助开发者和数据库管理员提升数据处理的效率与准确性。
|
4月前
|
SQL 监控 Oracle
关系型数据库Oracle GoldenGate
【7月更文挑战第11天】
42 1
|
5月前
|
SQL 存储 XML
SQL 通用数据类型
SQL 通用数据类型
32 1
|
6月前
|
分布式计算 大数据 MaxCompute
大数据计算MaxCompute表字段a为string类型,里面存的数据格式为小数, 通过alter table是不能将这个字段a转为decimal类型吗?
大数据计算MaxCompute表字段a为string类型,里面存的数据格式为小数, 通过alter table是不能将这个字段a转为decimal类型吗?
84 0
|
存储 关系型数据库 MySQL
schema与数据类型优化
schema与数据类型优化 选择正确的数据类型对于获得高性能至关重要。 几个简单的原则:
63 0