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

实时,入库,不用,hstore,分忧 · 浏览次数 : 30

小编点评

**HStore表如何实现实时入库与实时查询?** **1. 列存储格式** - 支持高效的并发插入、更新入库。 - 避免分析查询性能与空间压缩。 - 适合传统OLAP场景。 **2. HStore表的原理** - 表数据存储在列中,以行为单位组织。 - 提供全新的HStore表,支持高效的并发更新入库。 **3. HStore表的优缺点** **优点:** - 高性能的并发插入/更新操作。 - 高压缩性能。 **缺点:** - 由于Delta表的使用,不支持并发upsert/update入库。 **4. 实时入库的应用场景** - 高并发场景下的实时查询。 - 数据量大,更新删除少。 - 需要支持高性能的查询。

正文

本文分享自华为云社区《直播回顾 | 实时入库不用愁,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)几种表类型对比

cke_114.png

HStore表的解决方案

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

cke_115.png

HStore表的技术特点

  • 完整的事务一致性

支持全面的事务能力,数据插入或者更新提交后即可见不存在时延,保证数据ACID一致性。

  • 全面的功能支持

提供和当前列存一样全面的功能和语法支持。

  • 查询性能好

多表关联等复杂AP查询场景下,更完善的分布式查询计划与分布式执行器带来的性能优势,支持复杂的子查询和存储过程。

支持主键等传统索引能力去重和加速点查,也支持分区、全局字典、局部排序等方式进一步加速AP查询。

  • 入库快

彻底解决列存CU锁冲突问题,支持高并发的更新入库操作,典型场景下,并发更新性能是之前的百倍以上。

  • 高压缩

数据在MERGE进入列存主表后,按列存储具有天然的压缩优势,能极大地节省磁盘空间与IO资源。

HStore的Delta表与列存老Delta表的对比

cke_116.png

HStore表的使用实践

当前HStore表提供了视图,可以用来观察Delta表的给类型元组数量以及Delta的膨胀情况。同时也提供了函数可以对Delta表做轻量清理以及全量清理。

关于压缩效率验证、并发更新入库验证、查询性能验证操作,感兴趣的开发者可以观看直播视频,学习后操作一下。

cke_117.png

HStore表的使用注意事项

  • 参数设置

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

cke_118.png

  • 并发同一行

当前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帮分忧相似的内容:

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

通过4部分内容帮助开发者快速了解HStore表。

[转帖]一文看懂家庭宽带光纤是如何入户

目前,家庭宽带普遍实现了光纤入户,入户光纤一般在弱电箱的位置,家庭装修需要预埋网线,才能在后期流畅的使用网络。下文对网线预埋、网线选择、组网方式三个方面说一说。 一、光纤如何入户 1、光纤如何入户 入户光纤是不用家庭用户操心的,运营商在小区附件,一般部署了分光箱等。装机员会从分光箱拉一条皮纤到房子的

Taurus.MVC 微服务框架 入门开发教程:项目集成:7、微服务间的调用方式(调整):引用程序集及代码下载(新增)

新改进提供的Taurus Rpc 功能,可以简化微服务间的调用,同时可以不用再手动输出模块名称,或调用路径,包括负载均衡,这一切,由框架实现并提供了。新的Taurus Rpc 功能,将使得服务间的调用,更加轻松、简约、高效。

HStore表全了解:实时入库与高效查询利器

摘要:本文章将从使用者角度介绍HStore概念以及使用。 本文分享自华为云社区《GaussDB(DWS)HStore表讲解》,作者:大威天龙:- 。 HStore表简介 面对实时入库和实时查询要求越来越高的趋势,已有的列存储无法支持并发更新入库,行存查询性能无法做到实时返回且空间压缩表现不佳。Gau

[转帖]HTTP 框架 Hertz 实践入门:性能测试指南

https://maimai.cn/article/detail?fid=1767401397&efid=R2_kM5y-yEUDCK88FZWrGA 干货不迷路2021 年 9 月 8 日,字节跳动宣布正式开源 CloudWeGo。CloudWeGo 是一套字节跳动内部微服务中间件集合,具备高性能

如何实现 Java SpringBoot 自动验证入参数据的有效性

Java SpringBoot 通过javax.validation.constraints下的注解,实现入参数据自动验证 如果碰到 `@NotEmpty` 否则不生效,注意看下 `@RequestBody` 前面是否加上了`@Valid`

docker入门加实战——docker安装并配置阿里云加速

docker入门加实战——docker安装并配置阿里云加速 为什么要学习docker 在开发和部署项目的过程中,经常会遇到如下问题: 软件安装包名字复杂,不知道去哪里找 安装软件和部署项目步骤复杂,容易出错 这就是我们今天要学习Docker技术要解决的问题。有了Docker以后,项目的部署会如丝般顺

五分钟k8s入门到实战-应用配置

背景 在前面三节中已经讲到如何将我们的应用部署到 k8s 集群并提供对外访问的能力,x现在可以满足基本的应用开发需求了。 现在我们需要更进一步,使用 k8s 提供的一些其他对象来标准化我的应用开发。 首先就是 ConfigMap,从它的名字也可以看出这是用于管理配置的对象。 ConfigMap 不管

基于AQS实现自定义同步类

Mutex(互斥锁) Mutex是一个不可重入的互斥锁实现。锁资源(AQS里的state)只有两种状态:0表示未锁定,1表示锁定。下边是Mutex的核心源码: class Mutex implements Lock, java.io.Serializable { // 自定义同步器 private

next.js app目录 i18n国际化简单实现

最近在用next写一个多语言的项目,找了好久没找到简单实现的教程,实践起来感觉都比较复杂,最后终于是在官方文档找到了,结合网上找到的代码demo,终于实现了,在这里简单总结一下。 此教程适用于比较简单的项目实现,如果你是刚入门next,并且不想用太复杂的方式去实现一个多语言项目,那么这个教程就挺适合