加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql 中的 large object

发布时间:2020-12-13 17:46:08 所属栏目:百科 来源:网络整理
导读://主要有下面两个系统表,pg_largeobject_metadata主要记录权限的,有用的只有pg_largeobjectCATALOG(pg_largeobject_metadata,2995){Oidlomowner;/* OID of the largeobject owner */#ifdef CATALOG_VARLEN/* variable-length fields start here */aclitemlom

//主要有下面两个系统表,pg_largeobject_metadata主要记录权限的,有用的只有pg_largeobject



CATALOG(pg_largeobject_metadata,2995)
{
	Oid			lomowner;		/* OID of the largeobject owner */
#ifdef CATALOG_VARLEN			/* variable-length fields start here */
	aclitem		lomacl[1];		/* access permissions */
#endif
} FormData_pg_largeobject_metadata;

/*
* Each "page" (tuple) of a large object can hold this much data
*
* We could set this as high as BLCKSZ less some overhead,but it seems
* better to make it a smaller value,so that not as much space is used
* up when a page-tuple is updated. Note that the value is deliberately
* chosen large enough to trigger the tuple toaster,so that we will
* attempt to compress page tuples in-line. (But they won't be moved off
* unless the user creates a toast-table for pg_largeobject...)
*
* Also,it seems to be a smart move to make the page size be a power of 2,* since clients will often be written to send data in power-of-2 blocks.
* This avoids unnecessary tuple updates caused by partial-page writes.
*/
#define LOBLKSIZE(BLCKSZ / 4)

CATALOG(pg_largeobject,2613) BKI_WITHOUT_OIDS
{
	Oid			loid;			/* Identifier of large object */
	int4		pageno;			/* Page number (starting from 0) */
	/* data has variable length,but we allow direct access; see inv_api.c */
	bytea		data;			/* Data for page (may be zero-length) */
} FormData_pg_largeobject;



所有的大对象全部拆成 LOBLKSIZE大小,放入 pg_largeobject 之中,通过 loid进行区分,每个大对象拆分成的各个部分通过 pageno(叫元组序号更合理),进行顺序的关联起来,

pageno是通过 要写入的数据offset / LOBLKSIZE计算的

pg的大对象实现的比较简单,并不适合大数据量的使用,会成为系统的瓶颈.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读