POSTGRESQL TOAST 数据扩展存储技术原理与优势
POSTGRESQL 的TOAST 功能是POSTGRESQL 本身提供对于可变长大字段的管理的方式. 讲此方面的的文章也是比较多的. 这里想提及的是,从TOAST 功能中对数据库系统设计的一种新的认识和领会.
后面就通过提问和回答的方式来讲内容展开
1 为什么POSTGRESQL 要有TOAST 方式的存储数据
答: POSTGRESQL 默认数据存储的页的大小是8KB, 但我们不能保证存储数据的信息的大小,例如我们不能控制一行的大小,会让页不分割,但是POSTGRESQL的PAGE 是不支持页面分割的,跨页存储的. 所以TOAST 是一种防止一行的数据比较大,引起页的分割或跨页存储.
同时这样的设计也保证了,小的数据存储能在一个页面中,在提取到内存中的数量尽量的行数是多的,页面是少的,提高效率.
2 使用TOAST 到底有什么好处?
任何一项技术都有 BAD AND GOOD 的两面性, TOAST 功能本身是根据数据的特性来进行展现的例如我们都有一个概念, 就是大段的字符被查询的可能性比较小,并且这样的字段被更新的可能性也比较小. TOAST 功能也是本着这样的想法来实现,将经常查询的小字段存储在主页面内, 将超过2KB 以上的字段存储在其他的页面内,并且将信息分割,保存在外部的页面内. 这样的好处很自然,加速了常见的字段的查询,降低的不常用的字段加载到内存中. 这对整体的数据查询的速度和性能都是有保证的.
同时索引等建立,也都和一般的长字段无关,都是和我们的短字段有关的,从而提取数据的时候也不会和大字段有关,保证了系统的查询性能.
3 PostgreSQL的 TOAST 灵活性怎么样?
PostgreSQL 的灵活性, POSTGRESQL 的TOAST 功能本身并不是所有的字段都是要使用TOAST 来存储的,只有超过设定大小的字段才能进行数据的存储的TOAST 话. 实际上是可以调整两个值来控制本身 TOAST 的大小 TOAST_TUPLE_THRESHOLD 当超过这个默认值为2KB 的情况下,启动相关的数据压缩和字段迁移的过程, 当进行操作后,直到字段的值低于TOAST_TUPLE_TARGET默认2KB 后相关的TOAST的功能才停止. 并且这个值是可以进行调整的,例如
调整变大或者变小,对系统的性能都是有相关影响的.
如果这个表大部分都是大字段,那这个值可以稍微的调整的大一些,如果这些字段是要经常查询的情况下.
4
TOAST 的不利点:
和其他的数据库一样,POSTGRESQL 也不应该存储特别大的字段,尽量减少这些字段的存储,对数据库的性能是有提升和保护的.并且通过关联的方式进行访问本身的访问速度上也是有问题,并且如果访问,索引的问题也比较不容易解决.
下面是一个POSTGRESQL 关于TOAST 的插件,方便查看相关的信息
在插入相关TOAST插件后, 我们生成相关的测试数据,图中可以展示TOAST相关的详细信息
CREATE TABLE t (a text,b text
);INSERT INTO t VALUES ('null', NULL);
INSERT INTO t VALUES ('default', 'default');ALTER TABLE t ALTER COLUMN b SET STORAGE EXTERNAL;
INSERT INTO t VALUES ('external-10', 'external'); -- inline
INSERT INTO t VALUES ('external-10000', repeat('1',10000));
INSERT INTO t VALUES ('external-1000000', repeat('2',1000000)); ALTER TABLE t ALTER COLUMN b SET STORAGE EXTENDED;
INSERT INTO t VALUES ('extended-10', 'extended'); -- inline
INSERT INTO t VALUES ('extended-10000', repeat('3',10000));
INSERT INTO t VALUES ('extended-1000000', repeat('4',1000000)); SELECT a, length(b), pg_column_size(b), pg_toastinfo(b), pg_toastpointer(b) FROM t;
null for NULLs
ordinary for non-varlena datatypes
short inline varlena for varlena values up to 126 bytes (1 byte header)
long inline varlena, (un)compressed for varlena values up to 1GiB (4 bytes header)
toasted varlena, (un)compressed for varlena values up to 1GiB stored in TOAST tables
这个插件提供了两个函数 pg_toastinfo 和 pg_toastpointer
实际上TOAST TABLE 存储策略可以配合实际实体表中的字段性质和表的业务性质和实际存储的性质来决定。
1 plain 表不使用TOAST 技术
2 extended 允许使用TOAST 技术, 先尝试压缩,然后在使用数据外部存储
3 external 允许使用TOAST技术,数据存储在外部, 但不使用压缩技术
4 Main 使用压缩技术来进行数据的存储,但不在外部存储数据
实际上针对toast技术,默认的值是extended 但如果想使用更高性能来让系统运行的更快应该使用external技术。
要查看当前表使用哪种存储技术 \d+ 表名的方法来查看相关表到底使用哪种存储技术
说道TOAST的优势,从上面的内容中可以感受到TOAST 存储技术的额灵活性,可以根据字段的逻辑特性来,设置这个字段到底是不是需要压缩,是不是需要扩展,另外还可以调整某些阈值,让TOAST 技术不再默认的 2K 开始,或者延迟,提高存储的压缩率 或者 提高读取数据的性能。所以TOAST 在灵活性方面是其他数据库无法提供的一个重要的优势。
POSTGRESQL TOAST 数据扩展存储技术原理与优势相关推荐
- 数据安全与数据备份存储技术(转)
数据安全与数据备份存储技术(转)[@more@] 随着国内各行业信息系统的快速发展,特别是银行.证券.保险等行业大集中速度的加快,企业的技术风险也相对集中.一旦发生灾难,则将导致企业所有分支机构.营业 ...
- 大数据学习的第一课-大数据概论和技术原理
目录 大数据概论 大数据概念 为什么会有大数据 大数据的4v特征 大数据的来源 云计算与大数据 大数据发展历史 大数据技术原理 大数据的存储技术 大数据的计算技术 数据分析技术 Hadoop生态圈 大 ...
- 湖仓一体,Hologres加速云数据湖DLF技术原理解析
Hologres(中文名交互式分析)是阿里云自研的一站式实时数仓,这个云原生系统融合了实时服务和分析大数据的场景,全面兼容PostgreSQL协议并与大数据生态无缝打通,能用同一套数据架构同时支持实时 ...
- (13)达梦DMETL数据交换平台技术原理及应用介绍
在上一篇博客里,我们对达梦DMHS进行了动手部署实践.本篇文章主要是对达梦DMETL数据交换平台系统框架及核心功能组件等技术方面的学习分享. 一.数据实时同步软件(DMETL)简介 达梦数据交换平台( ...
- 从微盟删库事件谈数据修复的技术原理与时效挑战
作者 | 赵榛 封图 | CSDN付费下载于视觉中国 微盟删库事件至今发生已快1周时间,根据微盟公告介绍,官方正在紧锣密鼓的进行着数据恢复工作.本篇文章,联想数据恢复中心专家赵榛为这次的数据恢复工作做 ...
- 大数据用户画像技术原理和实践
在大数据时代,机器要学会从比特流中解读用户,构建用户画像就变得尤其重要.本文介绍了用户画像的理论和实践,以及在实际中的应用.如何根据用户画像进行精准营销?将用户画像应用于个性化推荐?一起来寻找答案吧~ ...
- 亿级数据湖统一存储技术实践
导读:OPPO是一家智能终端制造公司,有着数亿的终端用户,手机 .IoT设备产生的数据源源不断,设备的智能化服务需要我们对这些数据做更深层次的挖掘.海量的数据如何低成本存储.高效利用是大数据部门必须要 ...
- 《腾云-云计算和大数据时代网络技术揭秘》的收获与分享
这本书是很值得一看的,特别是对想了解云计算与数据中心网络的人.这本我是以最快的速度读完的第一遍,收益颇丰,紧接着又温习了一遍,目的是将技术要点重新梳理下,加强记忆.如 果你开始觉得云计算离我们很远,其 ...
- 《云计算和大数据时代网络技术揭秘》读后感
这本书是很值得一看的,特别是对想了解云计算与数据中心网络的人.这本我是以最快的速度读完的第一遍,收益颇丰,紧接着又温习了一遍,目的是将技术要点重新梳理下,加强记忆.如 果你开始觉得云计算离我们很远,其 ...
最新文章
- spring boot 打包jar,jar没有主目录清单
- mysql用创建的用户登陆并修改表格_MySQL 基础学习二:创建一个用户表,并增删改查...
- html中怎么写jq,用jQuery替换HTML页面中的文本
- oopc——8.经典案例1-rt thread
- 如何选指数基金?何时买入指数基金?长投温度如何计算?
- php怎么清空cookies,php cookie如何清除
- Hibernate - Query简易
- git小乌龟新建分支、合并分支
- react的生命周期函数(超详细)
- 从MOSSE到KCF,再从KCF到C-COT,再从C-COT到ECO梳理
- [0CTF 2016]piapiapia(反序列化逃逸)
- 微信会员卡 java请求_会员系统对接微信会员卡的好处
- mysql 触发器很慢_mysql之视图、触发器、事物、存储过程、函数、流程控制、索引与慢查优化...
- 计算机辅助设计中常用的输入工具,cad怎么输入坐标点?cad三种常用坐标系的输入方法...
- 这是个转贴,QB教程,很不错
- 如何用html5实现网页聊天,HTML5 WebSocket实现点对点聊天的示例代码
- java如何将mp4写入光盘_iOS - 读取/写入mp4视频的XMP元数据
- Jsp Servlet 学生公寓管理系统
- bzoj1202 狡猾的商人[并查集]
- Mockito单元测试-answer
热门文章
- 如何用迅雷下载python_我是如何使用python控制迅雷自动下载电影的?
- android studio超级玛丽源码,超级玛丽怀旧版
- 安卓系统手机软件_内存不够?别急,五款安卓手机内存最高达到了16GB
- 国内外情报学领域研究方法汇整
- python import as
- lua 实现四川麻将胡牌算法(附源代码讲解)
- python中if else语句用法_Python 条件语句(If ... Else)
- 终于有人把线性回归讲明白了!
- python语法助手_GitHub - xingxiaohui/onmyoji_helper: 基于python开发的阴阳师护肝助手
- Spring Cloud Alibaba —— 分布式事务组件