读书笔记:Oracle中的BFILE和JSON数据类型详解
我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!
由于博客中有大量代码,通过页面浏览效果更佳。
本文为个人学习《Expert Oracle Database Architecture Techniques and Solutions for High Performance and Productivity(第四版本》一书过程中的笔记与理解分享,仅用于学习与交流,部分内容参考原书观点并结合>实际经验进行整理。若涉及版权问题,请联系删除或沟通处理。也请大家支持购买原版书籍。
Oracle中的BFILE和JSON数据类型详解
一、BFILE类型:数据库外部的文件指针
什么是BFILE?
BFILE是Oracle数据库中一种特殊的数据类型,它本质上是一个指向操作系统文件的指针。通过BFILE,我们可以让数据库"知道"外部文件的存在,并提供对这些文件的只读访问权限。
如何使用BFILE?
创建BFILE表:
CREATE TABLE documents (
id INT PRIMARY KEY,
file_content BFILE
);
建立目录映射:
CREATE OR REPLACE DIRECTORY MY_FILES AS '/data/documents/';
插入文件引用:
INSERT INTO documents VALUES (1, BFILENAME('MY_FILES', 'report.pdf'));
重要注意事项:
-
大小写敏感:目录名必须使用大写,因为Oracle默认将标识符存储为大写
-- 正确写法 BFILENAME('MY_DIR', 'file.txt') -- 错误写法(会导致找不到文件) BFILENAME('my_dir', 'file.txt') -
非事务性:BFILE指向的是外部文件,这些文件的变化不会受到数据库事务控制
-
空间占用:每个BFILE占用约20字节+目录名长度+文件名长度
实际应用场景:
- 存储大型视频、音频文件
- 管理需要频繁读取但不修改的文档
- 与外部系统共享文件资源
二、JSON类型:高效处理JSON数据
什么是JSON类型?
从Oracle 21c开始,引入了原生的JSON数据类型。它使用OSON二进制格式存储数据,相比传统的文本存储方式,查询性能大幅提升。
创建JSON表:
CREATE TABLE products (
id NUMBER GENERATED ALWAYS AS IDENTITY,
product_info JSON,
CONSTRAINT products_pk PRIMARY KEY (id)
);
三种数据插入方式:
1. 从字符串插入:
INSERT INTO products (product_info)
VALUES ('{"name":"笔记本电脑","price":5999,"specs":{"cpu":"i7","ram":"16GB"}}');
2. 从CLOB插入:
INSERT INTO products (product_info)
VALUES (JSON('{"name":"手机","price":3999}'));
3. 从BLOB插入:
INSERT INTO products (product_info)
VALUES (JSON(UTL_RAW.CAST_TO_RAW('{"name":"平板","price":2999}')));
数据查询方法:
直接查询(显示二进制内容):
SELECT * FROM products;
转换为可读格式:
SELECT id, JSON_SERIALIZE(product_info) AS product_info
FROM products;
提取特定字段:
SELECT
id,
JSON_VALUE(product_info, '$.name') AS product_name,
JSON_VALUE(product_info, '$.price' RETURNING NUMBER) AS price
FROM products;
性能优势:
- 无需解析:二进制格式直接读取,比文本解析快得多
- 索引支持:可以对JSON字段创建索引加速查询
- 类型安全:支持数据类型验证和转换
三、实际应用建议
选择BFILE当:
- 需要管理数据库外部的大文件
- 文件需要被多个系统共享访问
- 只需要读取权限,不需要修改
选择JSON当:
- 需要存储和查询结构化数据
- 追求最佳查询性能
- 数据模式可能经常变化
- 需要与现代应用框架集成
开发技巧:
- 统一命名规范:目录名统一使用大写避免问题
- 数据验证:插入前验证JSON格式是否正确
- 权限管理:严格控制操作系统文件的访问权限
- 备份策略:BFILE指向的文件需要单独备份
总结
Oracle通过BFILE和JSON这两种数据类型,为我们提供了更加灵活的数据管理方案。BFILE让我们能够高效地管理外部文件资源,而JSON类型则为我们处理现代应用中的结构化数据提供了性能优化。根据具体的业务需求选择合适的数据类型,可以显著提升系统的效率和可维护性。
记住关键点:BFILE用于外部文件管理,JSON用于高效处理结构化数据,两者各有所长,在实际项目中可以结合使用。
------------------作者介绍-----------------------
姓名:黄廷忠
个人博客: (http://www.htz.pw)
CSDN地址: (https://blog.csdn.net/wwwhtzpw)
博客园地址: (https://www.cnblogs.com/www-htz-pw)
浙公网安备 33010602011771号