深入解读 Flink SQL 1.13

简介: Apache Flink 社区 5 月 22 日北京站 Meetup 分享内容整理,深入解读 Flink SQL 1.13 中 5 个 FLIP 的实用更新和重要改进。

本文由社区志愿者陈政羽整理,Apache Flink 社区在 5 月份发布了 1.13 版本,带来了很多新的变化。文章整理自徐榜江(雪尽) 5 月 22 日在北京的 Flink Meetup 分享的《深入解读 Flink SQL 1.13》,内容包括:

  1. Flink SQL 1.13 概览
  2. 核心 feature 解读
  3. 重要改进解读
  4. Flink SQL 1.14 未来规划
  5. 总结

GitHub 地址
https://github.com/apache/flink
欢迎大家给 Flink 点赞送 star~

一、Flink SQL 1.13 概览

img

Flink 1.13 是一个社区大版本,解决的 issue 在 1000 个以上,通过上图我们可以看到,解决的问题大部分是关于 Table/SQL 模块,一共 400 多个 issue 占了总体的 37% 左右。这些 issue 主要围绕了 5 个 FLIP 展开,在本文中我们也会根据这 5 个方面进行介绍,它们分别是:

img

下面我们对这些 FLIP 进行详细解读。

二、 核心 feature 解读

1. FLIP-145:支持 Window TVF

社区的小伙伴应该了解,在腾讯、阿里巴巴、字节跳动等公司的内部分支已经开发了这个功能的基础版本。这次 Flink 社区也在 Flink 1.13 推出了 TVF 的相关支持和优化。下面将从 Window TVF 语法、近实时累计计算场景、 Window 性能优化、多维数据分析,来分析这个新功能。

img

1.1 Window TVF 语法

在 1.13 版本前,window 的实现是通过一个特殊的 SqlGroupedWindowFunction:

SELECT TUMBLE_START(bidtime,INTERVAL '10' MINUTE),TUMBLE_END(bidtime,INTERVAL '10' MINUTE),TUMBLE_ROWTIME(bidtime,INTERVAL '10' MINUTE),SUM(price)
FROM MyTable
GROUP BY TUMBLE(bidtime,INTERVAL '10' MINUTE)

在 1.13 版本中,我们对它进行了 Table-Valued Function 的语法标准化:

SELECT WINDOW_start,WINDOW_end,WINDOW_time,SUM(price) 
FROM Table(TUMBLE(Table myTable,DESCRIPTOR(biztime),INTERVAL '10' MINUTE))
GROUP BY WINDOW_start,WINDOW_end

通过对比两种语法,我们可以发现:TVF 语法更加灵活,不需要必须跟在 GROUP BY 关键字后面,同时 Window TVF 基于关系代数,使得其更加标准。在只需要划分窗口场景时,可以只用 TVF,无需用 GROUP BY 做聚合,这使得 TVF 扩展性和表达能力更强,支持自定义 TVF(例如实现 TOP-N 的 TVF)。

image-20210619135838869

上图中的示例就是利用 TVF 做的滚动窗口的划分,只需要把数据划分到窗口,无需聚合;如果后续需要聚合,再进行 GROP BY 即可。同时,对于熟悉批 SQL 的用户来说,这种操作是非常自然的,我们不再需要像 1.13 版本之前那样必须要用特殊的 SqlGroupedWindowFunction 将窗口划分和聚合绑定在一起。

目前 Window TVF 支持 tumble window,hop window,新增了 cumulate window;session window 预计在 1.14 版本也会支持。

1.2 Cumulate Window

image-20210619141938374

Cumulate window 就是累计窗口,简单来说,以上图里面时间轴上的一个区间为窗口步长。

  • 第一个 window 统计的是一个区间的数据;
  • 第二个 window 统计的是第一区间和第二个区间的数据;
  • 第三个 window 统计的是第一区间,第二个区间和第三个区间的数据。

累积计算在业务场景中非常常见,如累积 UV 场景。在 UV 大盘曲线中:我们每隔 10 分钟统计一次当天累积用户 UV。

img

在 1.13 版本之前,当需要做这种计算时,我们一般的 SQL 写法如下:

INSERT INTO cumulative_UV
SELECT date_str,MAX(time_str),COUNT(DISTINCT user_id) as UV
FROM (SELECTDATE_FORMAT(ts,'yyyy-MM-dd') as date_str,SUBSTR(DATE_FORMAT(ts,'HH:mm'),1,4) || '0' as time_str,user_idFROM user_behavior
)
GROUP BY date_str

先将每条记录所属的时间窗口字段拼接好,然后再对所有记录按照拼接好的时间窗口字段,通过 GROUP BY 做聚合,从而达到近似累积计算的效果。

  • 1.13 版本前的写法有很多缺点,首先这个聚合操作是每条记录都会计算一次。其次,在追逆数据的时候,消费堆积的数据时,UV 大盘的曲线就会跳变。
  • 在 1.13 版本支持了 TVF 写法,基于 cumulate window,我们可以修改为下面的写法,将每条数据按照 Event Time 精确地分到每个 Window 里面, 每个窗口的计算通过 watermark 触发,即使在追数据场景中也不会跳变。
INSERT INTO cumulative_UV
SELECT WINDOW_end,COUNT(DISTINCT user_id) as UV
FROM Table(CUMULATE(Table user_behavior,DESCRIPTOR(ts),INTERVAL '10' MINUTES,INTERVAL '1' DAY))
)
GROUP BY WINDOW_start,WINDOW_end

UV 大盘曲线效果如下图所示:

img

1.3 Window 性能优化

Flink 1.13 社区开发者们对 Window TVF 进行了一系列的性能优化,包括:

  • 内存优化:通过内存预分配,缓存 window 的数据,通过 window watermark 触发计算,通过申请一些内存 buffer 避免高频的访问 state;
  • 切片优化:将 window 切片,尽可能复用已计算结果,如 hop window,cumulate window。计算过的分片数据无需再次计算,只需对切片的计算结果进行复用;
  • 算子优化:window 算子支持 local-global 优化;同时支持 count(distinct) 自动解热点优化;
  • 迟到数据:支持将迟到数据计算到后续分片,保证数据准确性。

img

基于这些优化,我们通过开源 Benchmark (Nexmark) 进行性能测试。结果显示 window 的普适性能有 2x 提升,且在 count(distinct) 场景会有更好的性能提升。

image-20210620115925303

1.4 多维数据分析

语法的标准化带来了更多的灵活性和扩展性,用户可以直接在 window 窗口函数上进行多维分析。如下图所示,可以直接进行 GROUPING SETS、ROLLUP、CUBE 的分析计算。如果是在 1.13 之前的版本,我们可能需要对这些分组进行单独的 SQL 聚合,再对聚合结果做 union 操作才能达到类似的效果。而现在,类似这种多维分析的场景,可以直接在 window TVF 上支持。

image-20210620181805583

支持 Window Top-N

除了多维分析,Window TVF 也支持 Top-N 语法,使得在 Window 上取 Top-N 的写法更加简单。

image-20210620182022617

2. FLIP-162:时区和时间函数

2.1 时区问题分析

大家在使用 Flink SQL 时反馈了很多时区相关的问题,造成时区问题的原因可以归纳为 3 个:

  • PROCTIME() 函数应该考虑时区,但未考虑时区;
  • CURRENT_TIMESTAMP/CURRENT_TIME/CURRENT_DATE/NOW() 函数未考虑时区;
  • Flink 的时间属性,只支持定义在 TIMESTAMP 这种数据类型上面,这个类型是无时区的,TIMESTAMP 类型不考虑时区,但用户希望是本地时区的时间。

    img

针对 TIMESTAMP 类型没有考虑时区的问题,我们提议通过TIMESTAMP_LTZ类型支持 (TIMESTAMP_LTZ 是 timestamp with local time zone 的缩写)。可以通过下面的表格来进行和 TIMESTAMP 的对比:

img

TIMESTAMP_LTZ 区别于之前我们使用的 TIMESTAMP,它表示绝对时间的含义。通过对比我们可以发现:

  • 如果我们配置使用 TIMESTAMP,它可以是字符串类型的。用户不管是从英国还是中国时区来观察,这个值都是一样的;
  • 但是对于 TIMSTAMP_TLZ 来说,它的来源就是一个 Long 值,表示从时间原点流逝过的时间。同一时刻,从时间原点流逝的时间在所有时区都是相同的,所以这个 Long 值是绝对时间的概念。当我们在不同的时区去观察这个值,我们会用本地的时区去解释成 “年-月-日-时-分-秒” 的可读格式,这就是 TIMSTAMP_TLZ 类型,TIMESTAMP_LTZ 类型也更加符合用户在不同时区下的使用习惯。

下面的例子展示了 TIMESTAMP 和 TIMESTAMP_LTZ 两个类型的区别。

img

2.2 时间函数纠正

订正 PROCTIME() 函数

image-20210619172919191

当我们有了 TIMESTAMP_LTZ 这个类型的时候,我们对 PROCTIME() 类型做了纠正:在 1.13 版本之前,它总是返回 UTC 的 TIMESTAMP;而现在,我们把返回类型变为了 TIMESTAMP_LTZ。PROCTIME 除了表示函数之外,也可以表示时间属性的标记。

订正 CURRENT_TIMESTAMP/CURRENT_TIME/CURRENT_DATE/NOW() 函数

这些函数在不同时区下出来的值是会发生变化的。例如在英国 UTC 时区时候是凌晨 2 点;但是如果你设置了时区是 UTC+8,时间就是在早上的 10 点。不同时区的实际时间会发生变化,效果如下图:

image-20210619173221897

解决 processing time Window 时区问题

大家都知道 proctime 可以表示一个时间属性,对 proctime 的 window 操作:

  • 在 1.13 版本之前,如果我们需要做按天的 window 操作,你需要手动解决时区问题,去做一些 8 小时的偏移然后再减回去;
  • 在 FLIP-162 中我们解决了这个问题,现在用户使用的时候十分简单,只需要声明 proctime 属性,因为 PROCTIME() 函数的返回值是TIMESTAMP_LTZ,所以结果是会考虑本地的时区。下图的例子显示了在不同的时区下,proctime 属性的 window 的聚合是按照本地时区进行的。

img

订正 Streaming 和 Batch 模式下函数取值方式

时间函数其实在流和批上面的表现形式会有所区别,这次修正主要是让其更加符合用户实际的使用习惯。例如以下函数:

  • 在流模式中是 per-record 计算,即每条数据都计算一次;
  • 在 Batch 模式是 query-start 计算,即在作业开始前计算一次。例如我们常用的一些 Batch 计算引擎,如 Hive 也是在每一个批开始前计算一次。

img

2.3 时间类型使用

在 1.13 版本也支持了在 TIMESTAMP 列上定义 Event time,也就是说Event time 现在既支持定义在 TIMESTAMP 列上,也支持定义在 TIMESTAMP_ LTZ 列上。那么作为用户,具体什么场景用什么类型呢?

  • 当作业的上游源数据包含了字符串的时间(如:2021-4-15 14:00:00)这样的场景,直接声明为 TIMESTAMP 然后把 Event time 定义在上面即可,窗口在计算的时候会基于时间字符串进行切分,最终会计算出符合你实际想要的预想结果;

    img

  • 当上游数据源的打点时间属于 long 值,表示的是一个绝对时间的含义。在 1.13 版本你可以把 Event time 定义在 TIMESTAMP_LTZ 上面。此时定义在 TIMESTAMP_LTZ 类型上的各种 WINDOW 聚合,都能够自动的解决 8 小时的时区偏移问题,无需按照之前的 SQL 写法额外做时区的修改和订正。

    img

小提示:Flink SQL 中关于时间函数,时区支持的这些提升,是版本不兼容的。用户在进行版本更新的时候需要留意作业逻辑中是否包含此类函数,避免升级后业务受到影响。

2.4 夏令时支持

img

在 Flink 1.13 以前,对于国外夏令时时区的用户,做窗口相关的计算操作是十分困难的一件事,因为存在夏令时和冬令时切换的跳变。

Flink 1.13 通过支持在 TIMESTAMP_LTZ 列上定义时间属性,同时 Flink SQL 在 WINDOW 处理时巧妙地结合 TIMESTAMP 和 TIMESTAMP_LTZ 类型,优雅地支持了夏令时。这对国外夏令时时区用户,以及有海外业务场景的公司比较有用。

三、重要改进解读

1. FLIP-152:提升 Hive 语法兼容性

FLIP-152 主要是做了 Hive 语法的兼容性增强,支持了 Hive 的一些常用 DML 和 DQL 语法,包括:

img

通过 Hive dialect 支持 Hive 常用语法。Hive 有很多的内置函数,Hive dialect 需要配合 HiveCatalog 和 Hive Module 一起使用,Hive Module 提供了 Hive 所有内置函数,加载后可以直接访问。

img

与此同时,我们还可以通过 Hive dialect 创建/删除 Catalog 函数以及一些自定义的函数,这样使得 Flink SQL 与 Hive 的兼容性得到了极大的提升,让熟悉 Hive 的用户使用起来会更加方便。

img

2. FLIP-163:改进 SQL Client

在 1.13 版本之前,大家觉得 Flink SQL Client 就是周边的一个小工具。但是,FLIP-163 在 1.13 版本进行了重要改进:

img

  1. 通过 -i 的参数,提前把 DDL 一次性加载初始化,方便初始化表的多个 DDL 语句,不需要多次执行命令创建表,替代了之前用 yaml 文件方式创建表;
  2. 支持 -f 参数,其中 SQL 文件支持 DML(insert into)语句;
  3. 支持更多实用的配置:

    img

    • 通过 SET SQL-client.verbose = true , 开启 verbose,通过开启 verbose 打印整个信息,相对以前只输出一句话更加容易追踪错误信息;
    • 通过 SET execution.runtime-mode=streaming / batch 支持设置批/流作业模式;
    • 通过 SET pipline.name=my_Flink_job 设置作业名称;
    • 通过 SET execution.savepoint.path=/tmp/Flink-savepoints/savepoint-bb0dab 设置作业 savepoint 路径;
    • 对于有依赖的多个作业,通过 SET Table.dml-sync=true 去选择是否异步执行,例如离线作业,作业 a 跑完才能跑作业 b ,通过设置为 true 实现执行有依赖关系的 pipeline 调度。
  4. 同时支持 STATEMENT SET语法:

    img

    有可能我们的一个查询不止写到一个 sink 里面,而是需要输出到多个 sink,比如一个 sink 写到 jdbc,一个 sink 写到 HBase。

    • 在 1.13 版本之前需要启动 2 个 query 去完成这个作业;
    • 在 1.13 版本,我们可以把这些放到一个 statement 里面,以一个作业的方式去执行,能够实现节点的复用,节约资源。

3. FLIP-136:增强 DataStream 和 Table 的转换

虽然 Flink SQL 大大降低了我们使用实时计算的一些使用门槛,但 Table/SQL 这种高级封装也屏蔽了一些底层实现,如 timer,state 等。不少高级用户希望能够直接操作 DataStream 获得更多的灵活性,这就需要在 Table 和 DataStream 之间进行转换。FLIP-136 增强了 Table 和 DataStream 间的转换,使得用户在两者之间的转换更加容易。

  • 支持 DataStream 和 Table 转换时传递 EVENT TIME 和 WATERMARK;
Table Table = TableEnv.fromDataStream(dataStream,Schema.newBuilder().columnByMetadata("rowtime","TIMESTMP(3)").watermark("rowtime","SOURCE_WATERMARK()").build());
)
  • 支持 Changelog 数据流在 Table 和 DataStream 间相互转换。
//DATASTREAM 转 Table
StreamTableEnvironment.fromChangelogStream(DataStream<ROW>): Table
StreamTableEnvironment.fromChangelogStream(DataStream<ROW>,Schema): Table
//Table 转 DATASTREAM
StreamTableEnvironment.toChangelogStream(Table): DataStream<ROW>
StreamTableEnvironment.toChangelogStream(Table,Schema): DataStream<ROW>  

四、Flink SQL 1.14 未来规划

1.14 版本主要有以下几点规划:

  • 删除 Legacy Planner:从 Flink 1.9 开始,在阿里贡献了 Blink-Planner 之后,很多一些新的 Feature 已经基于此 Blink Planner 进行开发,以前旧的 Legacy Planner 会彻底删除;
  • 完善 Window TVF:支持 session window,支持 window TVF 的 allow -lateness 等;
  • 提升 Schema Handling:全链路的 Schema 处理能力以及关键校验的提升;
  • 增强 Flink CDC 支持:增强对上游 CDC 系统的集成能力,Flink SQL 内更多的算子支持 CDC 数据流。

五、总结

本文详细解读了 Flink SQL 1.13 的核心功能和重要改进。

  • 支持 Window TVF;
  • 系统地解决时区和时间函数问题;
  • 提升 Hive 和 Flink 的兼容性;
  • 改进 SQL Client;
  • 增强 DataStream 和 Table 的转换。

同时还分享了社区关于 Flink SQL 1.14 的未来规划,相信看完文章的同学可以对 Flink SQL 在这个版本中的变化有更多的了解,在实践过程中大家可以多多关注这些新的改动和变化,感受它们所带来的业务层面上的便捷。

原文链接
本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/513065.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos8共享文件夹挂载_CentOS 8 安装并配置NFS服务

NFS网络文件系统(Network File System)是一种分布式文件系统协议&#xff0c;通过网络共享远程目录。使用NFS&#xff0c;可以在系统上挂载远程目录&#xff0c;并像对待本地文件一样使用远程计算机上的文件。默认情况下&#xff0c;NFS协议未加密&#xff0c;并且与Samba不同&…

Flink 1.13,面向流批一体的运行时与 DataStream API 优化

简介&#xff1a; 在 1.13 中&#xff0c;针对流批一体的目标&#xff0c;Flink 优化了大规模作业调度以及批执行模式下网络 Shuffle 的性能&#xff0c;以及在 DataStream API 方面完善有限流作业的退出语义。 本文由社区志愿者苗文婷整理&#xff0c;内容来源自阿里巴巴技术专…

启动metabase_引入开源BI软件Metabase——数据分析平台建设(一)

引入BI系统是减少重复劳动、增加产出的必要手段和步骤什么是Metabase在选择使用Metabase之前&#xff0c;也调研过许多BI软件&#xff0c;满足免费开源&#xff0c;灵活多变&#xff0c;我们选择了Metabase。Metabase是一款开源免费的BI软件&#xff0c;适用于中小型企业、初创…

深入剖析数据多版本 MVCC 机制

作者 | 奇伢来源 | 奇伢云存储你以为删掉就没事了&#xff1f;有些童鞋以前还真是做过些傻事&#xff0c;以为删掉一些东西&#xff0c;覆盖一些东西就能掩盖某一些"不可告人"的秘密。来看看 etcd 的例子&#xff1a;./etcdctl put 张三 是个憨憨哎呀&#xff0c;这可…

同程旅行基于 RocketMQ 高可用架构实践

简介&#xff1a; 我们在几年前决定引入 MQ 时&#xff0c;市场上已经有不少成熟的解决方案&#xff0c;比如 RabbitMQ , ActiveMQ&#xff0c;NSQ&#xff0c;Kafka 等。考虑到稳定性、维护成本、公司技术栈等因素&#xff0c;我们选择了 RocketMQ。 背景介绍 ​ 为何选择 R…

重磅 | 数据库自治服务DAS论文入选全球顶会SIGMOD,领航“数据库自动驾驶”新时代

简介&#xff1a; 近日&#xff0c;智能数据库和DAS团队研发的智能调参ResTune系统论文被SIGMOD 2021录用&#xff0c;SIGMOD是数据库三大顶会之首&#xff0c;是三大顶会中唯一一个Double Blind Review的&#xff0c;其权威性毋庸置疑。 近日&#xff0c;智能数据库和DAS团队…

如何帮用户管好云账本?阿里云数据库助力收钱吧 | 甲子光年

简介&#xff1a; “收钱吧到账100万”成为普通商家最想听到的声音。 你有多久没摸过现金了&#xff1f; 中国互联网络信息中心发布的第47次《中国互联网络发展状况统计报告》数据显示&#xff0c;截至2020年12月&#xff0c;我国移动支付用户规模达到8.54亿&#xff1b;中国人…

Redis 会遇到的「坑」,你踩过几个?

作者 | Magic Kaito来源 | 水滴与银弹这篇文章&#xff0c;我想和你聊一聊在使用 Redis 时&#xff0c;可能会踩到的「坑」。如果你在使用 Redis 时&#xff0c;也遇到过以下这些「诡异」的场景&#xff0c;那很大概率是踩到「坑」了&#xff1a;明明一个 key 设置了过期时间&a…

bert 多义词_自然语言处理:Bert及其他

以下内容主要参考了文末列出的参考文献&#xff0c;在此表示感谢&#xff01;2018年被认为是NLP技术的new era的开始。在这一年&#xff0c;提出了多种有创新性的技术&#xff0c;而且最后的集大成者Bert在NLP的多项任务中屠榜&#xff0c;造成的震撼不比当初神经网络初次在Ima…

谈谈JVM内部锁升级过程

简介&#xff1a; 对象在内存中的内存布局是什么样的&#xff1f;如何描述synchronized和ReentrantLock的底层实现和重入的底层原理&#xff1f;为什么AQS底层是CASvolatile&#xff1f;锁的四种状态和锁升级过程应该如何描述&#xff1f;Object o new Object() 在内存中占用多…

JetBrains发布两项重要更新:基于IDE的远程开发解决方案、轻量级编辑器Fleet

近日&#xff0c;JetBrains 对外发布两项重要产品更新&#xff1a;专为云端和其他服务器打造的远程开发解决方案&#xff0c;以及轻量级编辑器Fleet。 为IntelliJ 平台引入远程开发支持 在近期陆续发布的2021.3 版本的各 IDE 中&#xff0c;JetBrains 向 IntelliJ 平台添加了远…

Hologres揭秘:优化COPY,批量导入性能提升5倍+

简介&#xff1a; 揭秘Hologres优化COPY的技术原理&#xff0c;实现批量导入性能提升5倍 Hologres&#xff08;中文名交互式分析&#xff09;是阿里云自研的一站式实时数仓&#xff0c;这个云原生系统融合了实时服务和分析大数据的场景&#xff0c;全面兼容PostgreSQL协议并与…

io密集型和cpu密集型_一次说明白Python爬虫中多线程,多进程,异步IO编程

图/文&#xff1a;迷神我们在Python爬虫中&#xff0c;重要的是讲究速度&#xff0c;如果有10万或者100万Url地址&#xff0c;写过爬虫的都会知道&#xff0c;那估计是非常慢的。我们的Python爬虫一般IO密集型业务&#xff0c;Python爬虫程序需要发起网络请求&#xff0c;必然就…

【详谈 Delta Lake 】系列技术专题 之 湖仓一体( Lakehouse )

简介&#xff1a; 本文翻译自大数据技术公司 Databricks 针对数据湖 Delta Lake 的系列技术文章。众所周知&#xff0c;Databricks 主导着开源大数据社区 Apache Spark、Delta Lake 以及 ML Flow 等众多热门技术&#xff0c;而 Delta Lake 作为数据湖核心存储引擎方案给企业带来…

移动网络安装测试软件,家宽众测中国移动手机版(在线宽带网速测试器)V2.0.3 去广告版...

家宽众测中国移动手机版(在线宽带网速测试器)是一款手机宽带网速测试工具&#xff0c;用户可以通过本软件加入中国移动的宽带评测活动各种&#xff0c;反映家中宽带的具体使用情况&#xff0c;支持在线报名参加&#xff0c;抢先体验则有奖励赠送哦&#xff0c;欢迎来下载。软件…

如何删除第一张单页_单页网站-网站建设中独有的风景线

在这个网页技术飞速发展的时代&#xff0c;单页网站由于其自身的特点已经形成了一种独有的风景线。从本质上来说&#xff0c;单页网站就是只有一个页面&#xff0c;滚动长页面来显示相关的网站内容&#xff0c;网站所有菜单都链接到主页相应的部位。一些前卫的客户已经开始关注…

service注入为null_如何解决quartz调度时候,job中的service为null的问题?

在需要用到调度任务的时候&#xff0c;发现job中的通过依赖注入的service对象为null.如下&#xff1a;Component public class ExpiredOrderJob implements Job {Autowiredprivate EmployeeService employeeService; //这里的service对象为nullOverridepublic void execute(Job…

工作7年,我的10条经验总结

简介&#xff1a; 作者是一名很普通的技术工程师&#xff0c;从14年毕业到现在工作了7年。本文将与大家分享一些在职场中的道理和经验&#xff0c;希望能对大家有所启发和帮助。 作者 | 抱真 来源 | 阿里技术公众号 前言 简单做个自我介绍&#xff0c;我是一名很普通的技术工…

从能用到好用,GIS信创如何做到行稳致远?

艾瑞咨询集团出品的《2021年中国信创产业研究报告》中提到&#xff0c;信创内涵体现在“从‘关键环节、部分市场’走向‘全产业链、全行业’的信息技术升级&#xff0c;构建中国自主的IT标准和生态”。本文将从GIS信创的3大关键技术战略出发&#xff0c;解析当下如何快速突破发…

CPU静默数据错误:存储系统数据不丢不错的设计思考

简介&#xff1a; 对于数据存储系统来说&#xff0c;保障数据不丢不错是底线&#xff0c;也是数据存储系统最难的部分。据统计&#xff0c;丢失数据中心10天的企业&#xff0c;93%会在1年内破产。那么如果想要做到数据不丢不错&#xff0c;我们可以采取怎样的措施呢&#xff1f…