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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Tair(兼容Redis),内存型 2GB
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
AI 代码解读

使⽤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.
AI 代码解读

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
>
AI 代码解读

简单大对象和智能大对象在程序中的对比
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>
AI 代码解读

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

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

推荐方法:

如果数据真的超过2GB:

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

数据没有超过2GB

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

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

目录
打赏
0
3
3
0
44
分享
相关文章
南大通用GBaseDataStudio 切换中文界面到英文界面
南大通用GBaseDataStudio 切换中文界面到英文界面
RocketMQ(一):消息中间件缘起,一览整体架构及核心组件
【10月更文挑战第15天】本文介绍了消息中间件的基本概念和特点,重点解析了RocketMQ的整体架构和核心组件。消息中间件如RocketMQ、RabbitMQ、Kafka等,具备异步通信、持久化、削峰填谷、系统解耦等特点,适用于分布式系统。RocketMQ的架构包括NameServer、Broker、Producer、Consumer等组件,通过这些组件实现消息的生产、存储和消费。文章还提供了Spring Boot快速上手RocketMQ的示例代码,帮助读者快速入门。
云端问道-Web应用上云经典架构方案教学
本文介绍了企业业务上云的经典架构设计,涵盖用户业务现状及挑战、阿里云业务托管架构设计、方案选型配置及业务初期低门槛使用等内容。通过详细分析现有架构的问题,提出了高可用、安全、可扩展的解决方案,并提供了按量付费的低成本选项,帮助企业在业务初期顺利上云。
180 0
TensorFlow,一款由谷歌开发的开源深度学习框架,详细讲解了使用 TensorFlow 构建深度学习模型的步骤
本文介绍了 TensorFlow,一款由谷歌开发的开源深度学习框架,详细讲解了使用 TensorFlow 构建深度学习模型的步骤,包括数据准备、模型定义、损失函数与优化器选择、模型训练与评估、模型保存与部署,并展示了构建全连接神经网络的具体示例。此外,还探讨了 TensorFlow 的高级特性,如自动微分、模型可视化和分布式训练,以及其在未来的发展前景。
756 5
Chronos: 将时间序列作为一种语言进行学习
Chronos框架预训练时间序列模型,将序列值转为Transformer模型的tokens。通过缩放、量化处理,模型在合成及公共数据集上训练,参数量20M至710M不等。优于传统和深度学习模型,展示出色零样本预测性能。使用分类交叉熵损失,支持多模态输出分布学习。数据增强策略包括TSMix和KernelSynth。实验显示大型Chronos模型在概率和点预测上超越多种基线,且微调小型模型表现优异。虽然推理速度较慢,但其通用性简化了预测流程。论文探讨了优化潜力和未来研究方向。
663 3
js多条件筛选(可单条件搜索还可以模糊查询)
js多条件筛选(可单条件搜索还可以模糊查询)
385 0
通过EMQX使用ID²,实现数据安全上云
本文介绍如何通过EMQX使用IoT设备认证(ID²),进行设备身份认证、数据加密等功能,实现物联网数据安全上云。
基于Springboot+Vue实现前后端分离商城管理系统
基于Springboot+Vue实现前后端分离商城管理系统
674 1

数据库

+关注
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问