KingbaseES TOAST存储方式
KingbaseES为“大字段“的物理存储提供了TOAST功能,通过合适的配置策略能够减少IO次数和扫描块数,进而提升查询速度。
TOAST:The Oversized-Attribute Storage Technique
特点:
KingbaseES采用固定页面大小(通常是8Kb,不象oracle在运行期间有多种选择),元组不能跨越多个页面,无法实现“大字段值“的直接存储。TOAST提供了解决方法,允许大的字段值被压缩或分裂为多个物理行。
KingbaseES只为部分数据类型支提供TOAST支持,为支持TOAST,数据类型必须是变长(varlena)的类型。前32位存储着以字节记的数值总长度(包括长度本身)。
TOAST采用最高的两个二进制位用于标识压缩与行外存储,因此“大字段“的逻辑长度被限制在了1GB2^(32-2)-1)。
两个位都是零,表示数值未经过TOAST方式的数值。
第32位为1,表示该数值被压缩,使用前必须先解压缩。
第31位为1,表示该数值采用行外存储,此时只是存储着一个指针,该指针指向其他的地方。另外30个位表示数据的实际尺寸,而不是解压缩或者从线外数据抓过来之后的逻辑尺寸。

行外数据被分裂成(如果压缩过,以压缩后为参考)最多TOAST_MAX_CHUNK_SIZE(这个数值略小于BLCKSZ/4,或者缺省 2K字节)字节的块,每个块都作为独立的行在TOAST表里为所属表存储。每个TOAST表都有字段chunk_id,chunk_seq和chunk_data。在chunk_id和chunk_seq上有一个唯一索引,提供对数值的快速检索。
只有表中存储超过BLCKSZ/4字节(通常是2Kb)的行才会触发,对字段进行压缩和行外存储,直到小于BLCKSZ/4字节,或者无法得到更好的结果的时候才停止。UPDATE操作过程中,未改变的字段的数值通常原样保存;因此UPDATE行外存储的记录时,如果行外数据值没有变化,将不会带来TOAST开销存在。
TOAST代码识别四种不同的存储可TOAST字段的策略:
- PLAIN避免压缩或者行外存储。只对那些非TOAST数据类型才有效。
- EXTENDED允许压缩和行外存储。大多数TOAST数据类型的缺省值。首先进行压缩,如果行仍然太大,则进行行外存储。
- EXTERNAL允许行外存储,不许压缩。使用 EXTERNAL将令那些在 text 和 bytea 字段上的子字串操作更快(代价是增加了存储空间),因此这些操作是经过优化的:如果行外数据没有压缩,那么它们只抓取需要的部分。
- MAIN允许压缩,不允许行外存储。当数据值压缩过后仍然太大将会采用行外存储。每个可以 TOAST 的数据类型都为该数据类型的字段声明一个缺省策略,但是特定表的字段的存储策略可以用ALTER TABLE SET STORAGE修改。
优点:
相对直接的存储方式来说,数据经过TOAST方式后,单个或者连续数据块中能够存储更多的数据值,对于访问非“大字段”时,能够大量减少扫描块数或者物理IO次数;
对于极少访问的含“大字段”记录,经过手动修改存储属性,采用TOAST方式,即便值小于2K的情况下同样能够带来很好的效果。
针对系统数据访问特定,灵活的采用TOAST存储策略总能够为系统带来性能的提升。
KingbaseES TOAST存储方式的更多相关文章
- Android笔记——Android中数据的存储方式(一)
Android中数据的存储方式 对于开发平台来讲,如果对数据的存储有良好的支持,那么对应用程序的开发将会有很大的促进作用. 总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.其 ...
- android的数据存储方式
数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 ...
- Android的数据存储方式(转)
数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 ...
- Android编程中的5种数据存储方式
Android编程中的5种数据存储方式 作者:牛奶.不加糖 字体:[增加 减小] 类型:转载 时间:2015-12-03我要评论 这篇文章主要介绍了Android编程中的5种数据存储方式,结合实例形式 ...
- Android 开发笔记___存储方式__共享参数__sharedprefences
Android 的数据存储方式有四种,这次是[共享参数__sharedprefences] 听起来挺别扭的,平时看到的app里面,当用户删除了一些软件以后下次安装,发现原来的设置还在,这种情况就是把一 ...
- <Android基础> (六) 数据存储 Part 1 文件存储方式
第六章 数据存储 6.1 持久化技术 持久化技术指将内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失. 主要有三种方式用于简单地实现数据持久化功能:文件存储.S ...
- Android五种数据存储方式
android 五种数据存储 :SharePreferences.SQLite.Contert Provider.File.网络存储 Android系统提供了四种存储数据方式.分别为:SharePre ...
- Android 基础-3.0 数据存储方式
Android几种数据存储方式 文件存储 SharedPreference存储 Json解析 SQLite数据库存储 文件存储 文件存储是Android中最基本的一种存储方式,和Java中实现I/O的 ...
- 前端HTML5几种存储方式的总结
接下来要好好总结一些知识,秋招来啦...虽然有好多知识都不大会,但是还是要努力一下,运气这种东西,谁知道呢~ 总体情况 h5之前,存储主要是用cookies.cookies缺点有在请求头上带着数据,大 ...
随机推荐
- 快速保存Win10锁屏壁纸,收获美丽瞬间
对于写程序而言,每天接触得最多的就是电脑了 所以保持一种开放乐观,豁达美丽的心情是十分有必要的 使用"Everything"工具,输入"LocalState\Assets ...
- 深入理解 happens-before 原则
在前面的文章中,我们深入了解了 Java 内存模型,知道了 Java 内存模型诞生的意义,以及其要解决的问题.最终我们知道:Java 内存模型就是定义了 8 个基本操作以及 8 个规则,只要遵守这些规 ...
- RPA应用场景-对公账户开户资质审查
场景概述 对公账户开户资质审查 所涉系统名称 人民银行账户管理系统 人工操作(时间/次) 0.5小时 所涉人工数量 132 操作频率 不定时 场景流程 1.机器人自动登录人民银行账户管理系统 2.查询 ...
- RPA应用场景-账套建立
所涉人工数量5操作频率 不定时 场景流程 1.客户按照项目开设专项财务管理,每个项目需要在初期建立自己的账套: 2.运营专员通过邮件发送账套建立申请: 3.根据申请进入金蝶运维后台,依据规则完成账套建 ...
- Windows 通过本地计算机IP链接Mysql设置
前言 1.Mysql-1130错误:无法远程连接 错误:ERROR 1130: Host '192.168.1.3' is not allowed to connect to thisMySQL se ...
- go-zero微服务实战系列(九、极致优化秒杀性能)
上一篇文章中引入了消息队列对秒杀流量做削峰的处理,我们使用的是Kafka,看起来似乎工作的不错,但其实还是有很多隐患存在,如果这些隐患不优化处理掉,那么秒杀抢购活动开始后可能会出现消息堆积.消费延迟. ...
- 从 1.5 开始搭建一个微服务框架——日志追踪 traceId
你好,我是悟空. 前言 最近在搭一个基础版的项目框架,基于 SpringCloud 微服务框架. 如果把 SpringCloud 这个框架当做 1,那么现在已经有的基础组件比如 swagger/log ...
- RocketMQ之消费者启动与消费流程
vivo 互联网服务器团队 - Li Kui 一.简介 1.1 RocketMQ 简介 RocketMQ是由阿里巴巴开源的分布式消息中间件,支持顺序消息.定时消息.自定义过滤器.负载均衡.pull/p ...
- Re:用webpack从零开始的vue-cli搭建'生活'
有了vue-cli的帮助,我们创建vue的项目非常的方便,使用vue create然后选择些需要的配置项就能自动帮我们创建配置好的webpack项目脚手架了,实在是'居家旅行'必备良药.这次借着学习w ...
- 5-9 Leaf 分布式ID
Leaf 什么Leaf leaf是叶子的意思 我们使用的Leaf是美团公司开源的一个分布式序列号(id)生成系统 我们可以在Github网站上下载项目直接使用 为什么需要Leaf 上面的图片中 是一个 ...