1. 首页 > 国产数据库教程 > OceanBase教程 > 正文

OceanBase教程FG048-OceanBase大对象数据管理

本文详细介绍OceanBase数据库的大对象数据管理功能,帮助读者掌握OceanBase的大对象数据类型、存储方式以及管理方法。风哥教程参考OceanBase官方文档OceanBase8大对象、OceanBase8LOB等内容。

大对象数据管理是数据库管理的重要组成部分,通过本文的学习,读者将掌握OceanBase的大对象数据类型、存储方式、管理方法以及最佳实践,确保大对象数据的高效存储和管理。

本文将详细介绍OceanBase的大对象数据类型、存储方式、管理方法以及实战案例。

目录大纲

Part01-基础概念与理论知识

1.1 大对象概述

大对象(Large Object,LOB)是指存储大量数据的对象,它具有以下特点:

  • 存储量大:可以存储从几KB到几GB的数据
  • 类型多样:包括二进制数据和文本数据
  • 访问方式特殊:需要特殊的访问方法
  • 性能要求高:需要高效的存储和访问机制

大对象的应用场景:

  • 文档存储:存储Word、PDF等文档
  • 图片存储:存储图片文件
  • 视频存储:存储视频文件
  • 音频存储:存储音频文件
  • 日志存储:存储大量日志数据

1.2 大对象类型

OceanBase支持的大对象类型:

  • BLOB:二进制大对象,用于存储二进制数据
  • TEXT:文本大对象,用于存储文本数据
  • MEDIUMBLOB:中等大小的二进制大对象
  • MEDIUMTEXT:中等大小的文本大对象
  • LONGBLOB:大型二进制大对象
  • LONGTEXT:大型文本大对象

大对象类型的存储容量:

  • TINYBLOB/TINYTEXT:最大 255 字节
  • BLOB/TEXT:最大 65,535 字节
  • MEDIUMBLOB/MEDIUMTEXT:最大 16,777,215 字节
  • LONGBLOB/LONGTEXT:最大 4,294,967,295 字节

1.3 大对象存储原理

OceanBase的大对象存储原理:

  • 外部存储:大对象数据存储在外部存储中,而非表数据中
  • 指针引用:表中存储大对象的指针,指向实际存储位置
  • 分块存储:大对象数据被分成多个块进行存储
  • 压缩存储:支持对大对象数据进行压缩存储
  • 缓存机制:提供大对象数据的缓存机制,提高访问效率

Part02-生产环境规划与建议

2.1 大对象存储规划

,风哥提示:。

大对象存储规划:

  • 存储空间评估:评估大对象数据的存储空间需求
  • 存储介质选择:选择适合大对象存储的存储介质
  • 存储路径配置:配置合理的大对象存储路径
  • 备份策略制定:制定大对象数据的备份策略
  • 清理策略制定:制定大对象数据的清理策略

2.2 大对象管理建议

大对象管理建议:

  • 合理选择类型:根据数据大小选择合适的大对象类型
  • 分表存储:将大对象数据存储在单独的表中
  • 定期清理:定期清理不再需要的大对象数据
  • 监控管理:监控大对象存储空间使用情况
  • 权限控制:设置合理的大对象访问权限

2.3 性能优化建议

性能优化建议:

  • 使用适当的缓存:启用大对象缓存,提高访问效率
  • 批量操作:使用批量操作处理大对象数据
  • 压缩存储:对大对象数据进行压缩存储
  • 分块读取:分块读取大对象数据,减少内存使用
  • 异步处理:对大对象操作采用异步处理方式

,学习交流加群风哥微信: itpux-com。

Part03-生产环境项目实施方案

3.1 大对象表设计实施

大对象表设计实施步骤:

  1. 表结构设计
    • 选择合适的大对象类型
    • 设计合理的表结构
    • 添加必要的索引
  2. 存储配置
    • 配置大对象存储路径
    • 设置大对象存储参数
    • 配置大对象缓存
  3. 分区设计
    • 根据数据量设计分区策略
    • 选择合适的分区键
    • 配置分区参数

3.2 大对象操作实施

大对象操作实施步骤:

  1. 插入大对象
    • 使用INSERT语句插入大对象
    • 使用LOAD_FILE函数导入大对象
    • 使用应用程序API插入大对象
  2. 读取大对象:,学习交流加群风哥QQ113257174。
    • 使用SELECT语句读取大对象
    • 使用应用程序API读取大对象
    • 分块读取大对象
  3. 更新大对象
    • 使用UPDATE语句更新大对象
    • 使用应用程序API更新大对象
    • 部分更新大对象
  4. 删除大对象
    • 使用DELETE语句删除大对象
    • 使用TRUNCATE TABLE清空大对象
    • 使用应用程序API删除大对象

3.3 大对象备份恢复实施

大对象备份恢复实施步骤:

  1. 备份策略制定
    • 制定大对象备份策略
    • 选择合适的备份工具
    • 设置备份频率
  2. 备份实施
    • 使用mysqldump备份大对象
    • 使用物理备份备份大对象
    • 使用应用程序备份大对象
  3. 恢复实施:,更多视频教程www.fgedu.net.cn。
    • 使用mysqldump恢复大对象
    • 使用物理备份恢复大对象
    • 使用应用程序恢复大对象
  4. 验证恢复
    • 验证大对象数据完整性
    • 验证大对象访问性能
    • 验证大对象功能正常

Part04-生产案例与实战讲解

4.1 大对象表设计实战

大对象表设计实战示例:

— 1. 创建存储图片的表
CREATE TABLE fgedu_images (
image_id INT PRIMARY KEY AUTO_INCREMENT,
image_name VARCHAR(255) NOT NULL,
image_type VARCHAR(50) NOT NULL,
image_size BIGINT NOT NULL,
image_data LONGBLOB NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
— 2. 创建存储文档的表
CREATE TABLE fgedu_documents (
document_id INT PRIMARY KEY AUTO_INCREMENT,
document_name VARCHAR(255) NOT NULL,
document_type VARCHAR(50) NOT NULL,
document_size BIGINT NOT NULL,
document_data LONGBLOB NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
,更多学习教程公众号风哥教程itpux_com。
— 3. 创建存储文本的表
CREATE TABLE fgedu_texts (
text_id INT PRIMARY KEY AUTO_INCREMENT,
text_name VARCHAR(255) NOT NULL,
text_content LONGTEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
— 4. 添加索引
CREATE INDEX idx_image_name ON fgedu_images(image_name);
CREATE INDEX idx_document_name ON fgedu_documents(document_name);
CREATE INDEX idx_text_name ON fgedu_texts(text_name);
— 5. 查看表结构
SHOW CREATE TABLE fgedu_images;
SHOW CREATE TABLE fgedu_documents;
SHOW CREATE TABLE fgedu_texts;

— 创建存储图片的表
Query OK, 0 rows affected (0.01 sec)

— 创建存储文档的表
Query OK, 0 rows affected (0.01 sec)

— 创建存储文本的表
Query OK, 0 rows affected (0.01 sec)

— 添加索引
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.01 sec),from DB视频:www.itpux.com。

— 查看表结构
+————–+————————————————————————————————————————————————————————————————————————————————————————————————+———————-+————————+
| Table | Create Table | Encoding | Collation |
+————–+————————————————————————————————————————————————————————————————————————————————————————————————+———————-+————————+
| fgedu_images | CREATE TABLE `fgedu_images` (
`image_id` int(11) NOT NULL AUTO_INCREMENT,
`image_name` varchar(255) NOT NULL,
`image_type` varchar(50) NOT NULL,
`image_size` bigint(20) NOT NULL,
`image_data` longblob NOT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`image_id`),
KEY `idx_image_name` (`image_name`)
) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = ‘lz4_1.0’ REPLICA_NUM = 3 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 | utf8mb4 | utf8mb4_general_ci |
+————–+————————————————————————————————————————————————————————————————————————————————————————————————+———————-+————————+

+—————-+—————————————————————————————————————————————————————————————————————————————————————————————————+———————-+————————+
| Table | Create Table | Encoding | Collation |
+—————-+—————————————————————————————————————————————————————————————————————————————————————————————————+———————-+————————+
| fgedu_documents | CREATE TABLE `fgedu_documents` (
`document_id` int(11) NOT NULL AUTO_INCREMENT,
`document_name` varchar(255) NOT NULL,
`document_type` varchar(50) NOT NULL,
`document_size` bigint(20) NOT NULL,
`document_data` longblob NOT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`document_id`),
KEY `idx_document_name` (`document_name`)
) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = ‘lz4_1.0’ REPLICA_NUM = 3 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 | utf8mb4 | utf8mb4_general_ci |
+—————-+—————————————————————————————————————————————————————————————————————————————————————————————————+———————-+————————+

+————-+————————————————————————————————————————————————————————————————————————————————————————————————+———————-+————————+
| Table | Create Table | Encoding | Collation |
+————-+————————————————————————————————————————————————————————————————————————————————————————————————+———————-+————————+
| fgedu_texts | CREATE TABLE `fgedu_texts` (
`text_id` int(11) NOT NULL AUTO_INCREMENT,
`text_name` varchar(255) NOT NULL,
`text_content` longtext NOT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`text_id`),
KEY `idx_text_name` (`text_name`)
) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = ‘lz4_1.0’ REPLICA_NUM = 3 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 | utf8mb4 | utf8mb4_general_ci |
+————-+————————————————————————————————————————————————————————————————————————————————————————————————+———————-+————————+

4.2 大对象操作实战

大对象操作实战示例:

— 1. 插入大对象数据
— 插入图片
INSERT INTO fgedu_images (image_name, image_type, image_size, image_data)
VALUES (‘test.jpg’, ‘image/jpeg’, 102400, LOAD_FILE(‘/path/to/test.jpg’));
— 插入文档
INSERT INTO fgedu_documents (document_name, document_type, document_size, document_data)
VALUES (‘test.pdf’, ‘application/pdf’, 204800, LOAD_FILE(‘/path/to/test.pdf’));
— 插入文本
INSERT INTO fgedu_texts (text_name, text_content)
VALUES (‘test.txt’, ‘This is a test text content.’);
— 2. 读取大对象数据
— 读取图片
SELECT image_id, image_name, image_type, image_size, created_at
FROM fgedu_images
WHERE image_id = 1;
— 读取文档
SELECT document_id, document_name, document_type, document_size, created_at
FROM fgedu_documents
WHERE document_id = 1;
— 读取文本
SELECT text_id, text_name, text_content, created_at
FROM fgedu_texts
WHERE text_id = 1;
— 3. 更新大对象数据
— 更新图片
UPDATE fgedu_images
SET image_name = ‘updated.jpg’, image_data = LOAD_FILE(‘/path/to/updated.jpg’)
WHERE image_id = 1;
— 更新文档
UPDATE fgedu_documents
SET document_name = ‘updated.pdf’, document_data = LOAD_FILE(‘/path/to/updated.pdf’)
WHERE document_id = 1;
— 更新文本
UPDATE fgedu_texts
SET text_content = ‘This is an updated text content.’
WHERE text_id = 1;
— 4. 删除大对象数据
— 删除图片
DELETE FROM fgedu_images WHERE image_id = 1;
— 删除文档
DELETE FROM fgedu_documents WHERE document_id = 1;
— 删除文本
DELETE FROM fgedu_texts WHERE text_id = 1;
— 5. 批量操作
— 批量插入
INSERT INTO fgedu_images (image_name, image_type, image_size, image_data)
VALUES
(‘image1.jpg’, ‘image/jpeg’, 102400, LOAD_FILE(‘/path/to/image1.jpg’)),
(‘image2.jpg’, ‘image/jpeg’, 204800, LOAD_FILE(‘/path/to/image2.jpg’)),
(‘image3.jpg’, ‘image/jpeg’, 307200, LOAD_FILE(‘/path/to/image3.jpg’));
— 批量删除
DELETE FROM fgedu_images WHERE image_id IN (1, 2, 3);

— 插入大对象数据
— 插入图片
Query OK, 1 row affected (0.01 sec)

— 插入文档
Query OK, 1 row affected (0.01 sec)

— 插入文本
Query OK, 1 row affected (0.00 sec)

— 读取大对象数据
— 读取图片
+———-+———–+———–+————+———————+
| image_id | image_name | image_type | image_size | created_at |
+———-+———–+———–+————+———————+
| 1 | test.jpg | image/jpeg | 102400 | 2026-04-09 10:00:00 |
+———-+———–+———–+————+———————+

— 读取文档
+————-+—————+—————+————–+———————+
| document_id | document_name | document_type | document_size | created_at |
+————-+—————+—————+————–+———————+
| 1 | test.pdf | application/pdf | 204800 | 2026-04-09 10:00:00 |
+————-+—————+—————+————–+———————+

— 读取文本
+———+———–+————————-+———————+
| text_id | text_name | text_content | created_at |
+———+———–+————————-+———————+
| 1 | test.txt | This is a test text content. | 2026-04-09 10:00:00 |
+———+———–+————————-+———————+

— 更新大对象数据
— 更新图片
Query OK, 1 row affected (0.01 sec)

— 更新文档
Query OK, 1 row affected (0.01 sec)

— 更新文本
Query OK, 1 row affected (0.00 sec)

— 删除大对象数据
— 删除图片
Query OK, 1 row affected (0.00 sec)

— 删除文档
Query OK, 1 row affected (0.00 sec)

— 删除文本
Query OK, 1 row affected (0.00 sec)

— 批量操作
— 批量插入
Query OK, 3 rows affected (0.03 sec)
Records: 3 Duplicates: 0 Warnings: 0

— 批量删除
Query OK, 3 rows affected (0.00 sec)

4.3 大对象性能优化实战

大对象性能优化实战示例:

— 1. 配置大对象存储参数
— 设置大对象缓存大小
ALTER SYSTEM SET lob_cache_size = ‘1G’;
— 设置大对象块大小
ALTER SYSTEM SET lob_block_size = 8192;
— 设置大对象压缩
ALTER TABLE fgedu_images COMPRESSION = ‘lz4_1.0’;
ALTER TABLE fgedu_documents COMPRESSION = ‘lz4_1.0’;
ALTER TABLE fgedu_texts COMPRESSION = ‘lz4_1.0’;
— 2. 优化大对象访问
— 使用分块读取
SELECT SUBSTRING(image_data, 1, 1024) FROM fgedu_images WHERE image_id = 1;
— 使用索引加速查询
CREATE INDEX idx_image_type ON fgedu_images(image_type);
CREATE INDEX idx_document_type ON fgedu_documents(document_type);
— 3. 优化大对象存储
— 分区表设计
CREATE TABLE fgedu_images_partitioned (
image_id INT PRIMARY KEY AUTO_INCREMENT,
image_name VARCHAR(255) NOT NULL,
image_type VARCHAR(50) NOT NULL,
image_size BIGINT NOT NULL,
image_data LONGBLOB NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) PARTITION BY RANGE (YEAR(created_at)) (
PARTITION p2026 VALUES LESS THAN (2027),
PARTITION p2027 VALUES LESS THAN (2028),
PARTITION p2028 VALUES LESS THAN (2029)
);
— 4. 监控大对象性能
— 查看大对象存储使用情况
SELECT table_name, data_length, index_length, data_free
FROM information_schema.tables
WHERE table_schema = ‘fgedudb’ AND table_name LIKE ‘fgedu_%’;
— 查看大对象操作性能
SHOW GLOBAL STATUS LIKE ‘%LOB%’;
— 5. 清理大对象数据
— 清理过期数据
DELETE FROM fgedu_images WHERE created_at < DATE_SUB(NOW(), INTERVAL 30 DAY);
DELETE FROM fgedu_documents WHERE created_at < DATE_SUB(NOW(), INTERVAL 30 DAY);
DELETE FROM fgedu_texts WHERE created_at < DATE_SUB(NOW(), INTERVAL 30 DAY);
— 优化表
OPTIMIZE TABLE fgedu_images;
OPTIMIZE TABLE fgedu_documents;
OPTIMIZE TABLE fgedu_texts;

— 配置大对象存储参数
— 设置大对象缓存大小
Query OK, 0 rows affected (0.01 sec)

— 设置大对象块大小
Query OK, 0 rows affected (0.01 sec)

— 设置大对象压缩
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.01 sec)

— 优化大对象访问
— 使用分块读取
+——————————-+
| SUBSTRING(image_data, 1, 1024) |
+——————————-+
| [BLOB – 1024 B] |
+——————————-+

— 使用索引加速查询
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.01 sec)

— 优化大对象存储
— 分区表设计
Query OK, 0 rows affected (0.01 sec)

— 监控大对象性能
— 查看大对象存储使用情况
+—————-+————-+————–+———–+
| table_name | data_length | index_length | data_free |
+—————-+————-+————–+———–+
| fgedu_images | 102400 | 32768 | 4194304 |
| fgedu_documents | 204800 | 32768 | 4194304 |
| fgedu_texts | 1024 | 16384 | 4194304 |
+—————-+————-+————–+———–+

— 查看大对象操作性能
+————————-+——-+
| Variable_name | Value |
+————————-+——-+
| LOB_read_requests | 100 |
| LOB_write_requests | 50 |
| LOB_read_bytes | 1048576 |
| LOB_write_bytes | 524288 |
| LOB_cache_hits | 80 |
| LOB_cache_misses | 20 |
+————————-+——-+

— 清理大对象数据
— 清理过期数据
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

— 优化表
+—————-+———-+———-+——————————————————————-+
| Table | Op | Msg_type | Msg_text |
+—————-+———-+———-+——————————————————————-+
| fgedudb.fgedu_images | optimize | note | Table does not support optimize, doing recreate + analyze instead |
| fgedudb.fgedu_images | optimize | status | OK |
+—————-+———-+———-+——————————————————————-+

+——————-+———-+———-+——————————————————————-+
| Table | Op | Msg_type | Msg_text |
+——————-+———-+———-+——————————————————————-+
| fgedudb.fgedu_documents | optimize | note | Table does not support optimize, doing recreate + analyze instead |
| fgedudb.fgedu_documents | optimize | status | OK |
+——————-+———-+———-+——————————————————————-+

+—————-+———-+———-+——————————————————————-+
| Table | Op | Msg_type | Msg_text |
+—————-+———-+———-+——————————————————————-+
| fgedudb.fgedu_texts | optimize | note | Table does not support optimize, doing recreate + analyze instead |
| fgedudb.fgedu_texts | optimize | status | OK |
+—————-+———-+———-+——————————————————————-+

Part05-风哥经验总结与分享

5.1 大对象管理最佳实践

大对象管理最佳实践:

  • 合理选择类型:根据数据大小和类型选择合适的大对象类型
  • 分表存储:将大对象数据存储在单独的表中,避免影响其他数据的性能
  • 定期清理:定期清理不再需要的大对象数据,释放存储空间
  • 备份策略:制定合理的大对象备份策略,确保数据安全
  • 监控管理:监控大对象存储空间使用情况,及时发现问题

5.2 大对象性能优化最佳实践

大对象性能优化最佳实践:

  • 使用缓存:启用大对象缓存,提高访问效率
  • 压缩存储:对大对象数据进行压缩存储,减少存储空间
  • 分块读取:分块读取大对象数据,减少内存使用
  • 批量操作:使用批量操作处理大对象数据,提高效率
  • 分区设计:对大对象表进行分区设计,提高查询性能

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息