实时入库不用愁,HStore帮分忧
本文分享自华为云社区《直播回顾 | 实时入库不用愁,HStore帮分忧》,作者:汀丶。
海量数据时代,如何实现数据实时入库与实时查询?GaussDB(DWS) HStore表为数据高效存储与查询提供了哪些助力?本期《数仓实时入库利器—HStore表原理与应用实践详解》的主题直播中,我们邀请到华为云EI DTSE技术布道师马俊松,针对GaussDB(DWS)HStore表与开发者和伙伴朋友们展开交流互动。通过4部分内容帮助开发者快速了解HStore表。
GaussDB(DWS)表存储类型演进
传统的数据存储类型有行存储和列存储,GaussDB(DWS) 基于列存储格式设计和实现了全新的HStore表,同时提供高效的并发插入、更新入库,以及高性能实时查询。
行存储:数据以行为单位存储在数据块中,适用于传统OLTP场景,数据需要进行频繁的增删改查,数据量不会很大。行存储的优点是:点查性能好,更新效率高。实时并发入库使用行存表,能获得较好的并发更新入库性能,但分析查询性能与空间压缩往往不及预期
列存储:为了解决行存表的分析查询性能问题以及空间压缩问题,GaussDB(DWS)自研了列存储,适用于传统OLAP场景,数据量大,更新删除少。列存储能带来很好的空间压缩与批量查询性能提升,对于一些涉及多表关联的分析类复杂查询、数据不经常更新的表,推荐使用列存表。实时并发入库使用列存表,能获得较好的分析查询性能与数据压缩,但无法支持小批量入库。
列存表带Delta:为了解决小批量入库问题,GaussDB(DWS)自研了列存表带Delta,
适用于OLAP场景的小批量数据入库,导入后主要做查询分析业务,更新删除少。实时并发入库使用带Delta的列存表,能避免小批量入库的小CU问题,但基本无法支持并发更新入库。
HStore表:虽然列存表带Delta解决了小批量入库产生的小CU问题,但是没有解决同一个CU上的并发更新产生的锁冲突问题。而实时入库的场景下,需要将insert+upsert+update操作实时并发入库,数据来源于上游的其他数据库或者应用,同时要求入库后的数据要能及时查询,且对于查询的效率要求很高。目前的列存表由于锁冲突的原因无法支持并发upsert/update入库,导致这些有需要的局点只能使用行存表,但是行存表因为格式的天然劣势,在AP查询场景下一方面性能较慢,另一方面由于压缩差导致占用了大量的磁盘空间,对用户产生额外成本。GaussDB(DWS)中的HStore表, 在使用列存储格式尽量降低磁盘占用的同时,支持高并发的更新操作入库以及高性能的查询效率。面向对于实时入库和实时查询有较强诉求的场景,同时拥有处理传统TP场景的事务能力。
GaussDB(DWS)几种表类型对比

HStore表的解决方案
对于实时入库场景,数据通过Kafka、Flink导入到DWS中,同时下游实时应用,对数据入库的操作进行实时查询。入库后的数据支持热转冷,可以存储到obs上,进一步为客户节约成本,也支持外表导入,导入通过ORC/Parquet/text等格式,导出进行AI挖掘等操作。HStore表相当于同时满足上游的并发入库,以及下游的实时查询。

HStore表的技术特点
- 完整的事务一致性
支持全面的事务能力,数据插入或者更新提交后即可见不存在时延,保证数据ACID一致性。
- 全面的功能支持
提供和当前列存一样全面的功能和语法支持。
- 查询性能好
多表关联等复杂AP查询场景下,更完善的分布式查询计划与分布式执行器带来的性能优势,支持复杂的子查询和存储过程。
支持主键等传统索引能力去重和加速点查,也支持分区、全局字典、局部排序等方式进一步加速AP查询。
- 入库快
彻底解决列存CU锁冲突问题,支持高并发的更新入库操作,典型场景下,并发更新性能是之前的百倍以上。
- 高压缩
数据在MERGE进入列存主表后,按列存储具有天然的压缩优势,能极大地节省磁盘空间与IO资源。
HStore的Delta表与列存老Delta表的对比

HStore表的使用实践
当前HStore表提供了视图,可以用来观察Delta表的给类型元组数量以及Delta的膨胀情况。同时也提供了函数可以对Delta表做轻量清理以及全量清理。
关于压缩效率验证、并发更新入库验证、查询性能验证操作,感兴趣的开发者可以观看直播视频,学习后操作一下。

HStore表的使用注意事项
- 参数设置
HStore依赖后台常驻线程对HStore表进行MERGE清理操作,才能保证查询性能与压缩效率,所以使用HStore表务必设置相关GUC,推荐的配置如下:

- 并发同一行
当前HStore并发更新同一行仍然是不支持的,其中同一行上并发update/delete操作会先等锁然后报错,同一行上的并发upsert操作会先等锁然后继续执行。由于等待开销也是会影响业务的入库性能,甚至可能产生死锁,所以需要在入库时保证不会并发更新到同一行或者同一个key。
- 索引相关
索引会占用额外的空间,同时带来的点查性能提升有限,所以HStore表只建议在需要做Upsert或者有点查(这里指唯一性与接近唯一的点查) 的诉求下创建一个主键或者btree索引。
- MERGE相关
由于HStore表依赖后台autovacuum来将操作MERGE到主表,所以入库速度不能超过MERGE速度,否则会导致delta表的膨胀,可以通过控制入库的并发来控制入库速度。同时由于Delta表本身的空间复用受oldestXmin的影响,如果有老事务存在可能会导致Delta空间复用不及时而产生膨胀。
- UPSERT性能
HStore表虽然相比普通列存,并发upsert入库性能得到了很大提升,但相比行存还是有差距,大概只有行存的1/3。所以在不追求压缩率以及批量查询性能、只追求单点查询性能的场景下,还是推荐行存表入库。
欢迎感兴趣的开发者观看直播回放,了解详细信息。更多关于GaussDB(DWS)产品技术解析、数仓产品新特性的介绍,请关注GaussDB(DWS)论坛,技术博文分享、直播安排将第一时间发布在GaussDB(DWS)论坛。
论坛链接:https://bbs.huaweicloud.com/forum/forum-598-1.html
直播回放链接:https://bbs.huaweicloud.com/live/DTT_live/202308021630.html
实时入库不用愁,HStore帮分忧的更多相关文章
- Web实时通信,SignalR真香,不用愁了
前言 对于B/S模式的项目,基础的场景都是客户端发起请求,服务端返回响应结果就结束了一次连接:但在很多实际应用场景中,这种简单的请求和响应模式就显得很吃力,比如消息通知.监控看板信息自动刷新等实时通信 ...
- 一文带你看懂cookie,面试前端不用愁
本文由云+社区发表 在前端面试中,有一个必问的问题:请你谈谈cookie和localStorage有什么区别啊? localStorage是H5中的一种浏览器本地存储方式,而实际上,cookie本身并 ...
- 简单两行,实现无线WiFi共享上网,手机抓包再也不用愁了
你是否为WiFi共享而发愁,各个无线共享软件,某某共享精灵,某某免费WiFi,某某共享大师,某某随身WiFi,一个比一个难用,一个比一个私货多,一个比一个广告多,如果装上了它们,你的电脑就基本沦陷了, ...
- 曹工说Spring Boot源码(19)-- Spring 带给我们的工具利器,创建代理不用愁(ProxyFactory)
写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...
- 熟悉这几道 Redis 高频面试题,面试不用愁
1.说说 Redis 都有哪些应用场景? 缓存:这应该是 Redis 最主要的功能了,也是大型网站必备机制,合理地使用缓存不仅可以加 快数据的访问速度,而且能够有效地降低后端数据源的压力. 共享Ses ...
- 有了这个BI工具,财务分析再也不用愁
财务软件的发展已基本上将财会工作者从登记凭证.记账.编制会计报表等繁重和重复性的工作中解放出来.但是,当前大多数管理软件或财务软件的财务分析功能还停留在会计信息或财务指标的数据处理.图表展现层面,支持 ...
- python的环境,你再也不用愁-conda
Conda Guide Conda简介 conda是一个包,依赖和环境管理工具,适用于多种语言,如: Python, R, Scala, Java, Javascript, C/ C++, FORTR ...
- UI图标不用愁:矢量字体图标Font-Awesome
Font-Awesome,这个项目主要是css3的一个应用,准确的说是一段css,这里的把很多图标的东西做到了font文件里面,然后通过引用外部font文件的方式,来展现图标. Font Awesom ...
- 对象属性拷贝工具类大全==>Bean的属性拷贝从此不用愁
大家在做java开发时,肯定会遇到api层参数对象传递给服务层,或者把service层的对象传递给dao层,他们之间又不是同一个类型对象,但字段又是一样,如果还是用普通的get.set方式来处理话,比 ...
- anaconda虚拟环境管理,从此Python版本不用愁
1 引言 在前几篇博文中介绍过virtualenv.virtualenvwrapper等几个虚拟环境管理工具,本篇要介绍的anaconda也有很强大的虚拟环境管理功能,甚至相比virtualenv.v ...
随机推荐
- 什么???CSS也能原子化!
1.什么是原子化 CSS? Atomic CSS is the approach to CSS architecture that favors small, single-purpose class ...
- MUH and Cube Walls 题解
MUH and Cube Walls 前言 怎么题解区同质化这么严重,16 篇题解全是 差分 + KMP,就没有人写别的做法吗. (好吧其实是我一开始没想到差分才有了这么多奇怪做法) 题目大意 给定两 ...
- 关于 Python 字符串切片的小领悟
1. 什么是 Python 字符串切片? 例如存在字符串 str2 = "abcd1234" ,有以下简单的切片应用. str2[0] # a str2[0:3] # abc st ...
- Unity 在Preferences或Project Setting窗口创建自定义配置
官方文档链接 https://docs.unity3d.com/2020.3/Documentation/ScriptReference/SettingsProvider.html 一直不习惯使用Un ...
- [ABC321C] 321-like Searcher
Problem 题目简述 给你一个 \(K\),求出 \([1 \sim K]\) 区间内有多少个 321-like Number. 321-like Number 的定义: 每一位上的数字从左到右严 ...
- 解码注意力Attention机制:从技术解析到PyTorch实战
在本文中,我们深入探讨了注意力机制的理论基础和实际应用.从其历史发展和基础定义,到具体的数学模型,再到其在自然语言处理和计算机视觉等多个人工智能子领域的应用实例,本文为您提供了一个全面且深入的视角.通 ...
- [SWPUCTF 2021 新生赛]非常简单的逻辑题
一道简单的代码逆向,根据提供的py代码写出逆向代码,没怎么做过这种题开始没什么思路,原来直接暴力就好 直接写出暴力代码
- AntDesignBlazor示例——新建项目
本示例是AntDesign Blazor的入门示例,在学习的同时分享出来,以供新手参考. 1. 开发环境 VS2022 17.8.2 .NET8 AntDesign 0.16.2 2. 学习目标 创建 ...
- Postgres 和 MySQL 应该怎么选?
PostgreSQL和MySQL是两个流行的关系型数据库管理系统(DBMS).它们都具有一些相似的功能,但也有一些区别. 在选择使用哪个DBMS时,需要考虑多个因素,包括性能.可扩展性.安全性.功能丰 ...
- LeetCode-Java:122. 买卖股票的最佳时机Ⅱ
题目 给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格. 在每一天,你可以决定是否购买和/或出售股票.你在任何时候 最多 只能持有 一股 股票.你也可以先购买, ...