写点什么

实时入库不用愁,HStore 帮分忧

  • 2023-08-08
    广东
  • 本文字数:2306 字

    阅读完需:约 8 分钟

实时入库不用愁,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


点击关注,第一时间了解华为云新鲜技术~

发布于: 刚刚阅读数: 6
用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
实时入库不用愁,HStore帮分忧_数据库_华为云开发者联盟_InfoQ写作社区