设为首页 加入收藏

TOP

postgresql: 大对象(一:与bytea的区别)
2014-11-24 07:11:12 来源: 作者: 【 】 浏览:2
Tags:postgresql: 对象 bytea 区别
在postgresql中,存储二进制数据的类型除了标准的bytea(等同于SQL中的blob)类型外,还有一个pg独有的大对象(largeobject)类型.
大对象类型实际上是个整型地址类型,它指向一张 系统表pg_largeobejct的主键loid, 实际的内容都存在这张系统表里,而且这内容是按分块存储的.
查看pg_largeobject表结构
----------------------------------
loid oid 大对象地址(整型)
pageno integer 块号
data bytea 实际数据, 按8192字节分块存储
primary key (loid,pageno)
----------------------------------
应用实例:
假如一张人事照片档案, 字段为员工ID和照片
假如图象类型用bytea, 那建表语句为
create table em_photo1 (
emp_id integer not null primary key,
photo bytea
)
假如图象类型用大对象, 那建表语句为
create table em_photo2 (
emp_id integer not null primary key,
photo oid
)
两者的区别和利弊:
1, 用大对象类型时,二进制数据统一存储在一张系统表里, 与其他数据分开,提高其他数据读写性能. 并能和其他数据分开备份.
2, 由于二进制数据是分块(大概每8kb一块)存储在大对象系统表里, 并且这系统表建有索引. 所以尺寸大的数据, 随机读写的性能将提高(比如只要读取后面多少字节), 若存储在bytea, 就没有这方面的优势.
3, 大对象类型的读取需要有专门的操作函数, 必须要写程序才能读取,比较烦琐,而bytea相对简单.
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇postgresql: 大对象(二:文档中未.. 下一篇union all和group by的顺序问题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·数据库:推荐几款 Re (2025-12-25 12:17:11)
·如何最简单、通俗地 (2025-12-25 12:17:09)
·什么是Redis?为什么 (2025-12-25 12:17:06)
·对于一个想入坑Linux (2025-12-25 11:49:07)
·Linux 怎么读? (2025-12-25 11:49:04)