读数据工程之道:设计和构建健壮的数据系统32序列化和云网络

news/2024/11/14 10:54:50/文章来源:https://www.cnblogs.com/lying7/p/18536032

1. 序列化

1.1. 仅仅通过从CSV转换到Parquet序列化,任务性能就提高了上百倍

1.2. 基于行的序列化

  • 1.2.1. 基于行的序列化是按行来组织数据

  • 1.2.2. 对于那些半结构化的数据(支持嵌套和模式变化的数据对象)​,基于行的序列化需要将每个对象作为一个单元来存储

  • 1.2.3. CSV格式是一种典型的基于行的格式

  • 1.2.3.1. CSV:不是标准的标准

  • 1.2.3.2. CSV本质上是分隔符文本的总称,但不同的CSV文件在转义、引号字符、分隔符等的使用上会有所变化

  • 1.2.3.3. 应该避免在管道中使用CSV文件,因为它们非常容易出错,而且性能很差

  • 1.2.3.4. 使用CSV进行归档,要附带上文件的序列化配置的完整技术描述,以便未来的数据消费者获取数据

  • 1.2.4. XML

  • 1.2.4.1. XML是数据工程师在与传统系统和软件交换数据时经常必须处理的另一种标准

  • 1.2.5. JSON和JSONL

  • 1.2.5.1. JSON已经在纯文本对象序列化上很大程度地取代了XML

  • 1.2.5.2. JavaScript对象表示法(JSON)已经成为通过API数据交换的新标准,以及一种非常流行的数据存储格式

  • 1.2.5.3. JSON Lines(JSONL)是JSON的一个专门版本,用于将批量半结构化数据存储在文件中

  • 1.2.5.4. JSONL是一种非常有用的格式,可以在从API或应用程序获取数据后立即存储数据

  • 1.2.6. Avro

  • 1.2.6.1. Avro是一种面向行的数据格式,用于远程过程调用和数据序列化

  • 1.2.6.2. Avro将数据编码为二进制格式,其模式的元数据为JSON形式

1.3. 列序列化

  • 1.3.1. 通过列序列化,每列数据都会分为多个文件

  • 1.3.2. 列存储的一个明显优势是,它从字段的子集中读取数据,而不是一次性读取整行数据

  • 1.3.2.1. 分析应用程序常用列序列化,它可以大大减少执行查询时必须扫描的数据量

  • 1.3.3. 将数据存储为列还可以将相似的值聚集,让每列数据的排列更有效率

  • 1.3.4. 一种常见的压缩技术是寻找重复的值并对其进行标记,对于有大量重复数据的列来说简单又高效

  • 1.3.5. 列式数据库对于事务性工作负载来说是非常不合适的,所以事务数据库通常会利用一些面向行或记录的存储方式

  • 1.3.6. Parquet

  • 1.3.6.1. Parquet以列格式存储数据,旨在实现数据湖环境中的出色读写性能

  • 1.3.6.2. 与CSV不同,Parquet方式储存的数据建立在模式信息中,并原生支持嵌套数据

  • 1.3.6.3. 与Parquet相比,虽然BigQuery和Snowflake等数据库以专有的列格式序列化数据,并为其内部存储的数据提供很好的查询性能,但在与外部工具互操作时会产生巨大的性能下降

  • 1.3.6.4. 存储的数据需要被反序列化,并重新序列化为可交换的格式,才能使用如Spark和Presto等数据湖工具操作

  • 1.3.7. ORC

  • 1.3.7.1. 行优化列存储(Optimized Row Columnar,ORC)是一种类似于Parquet的列存储格式

  • 1.3.8. Apache Arrow

  • 1.3.8.1. 利用二进制数据格式来重新设计序列化,这种格式既适合在内存中处理,也适合在系统间传输

  • 1.3.8.2. Arrow使用列存储,其中每一列基本上都有自己的内存块

  • 1.3.8.3. 对于嵌套的数据,我们会使用一种叫作粉碎的技术,将JSON文档模式中的每个位置都映射成单独的列

  • 1.3.8.4. 意味着数据文件可以存储在磁盘上,通过使用虚拟内存将其直接交换到程序地址空间并运行数据查询,没有反序列化的开销

  • 1.3.8.5. 为各种编程语言(包括C、Go、Java、JavaScript、MATLAB、Python、R和Rust)创建了库,允许这些语言与在内存中的Arrow数据互通

  • 1.3.8.6. Dremio,它是一个基于Arrow序列化,支持高速查询的查询引擎和数据仓库

1.4. 混合序列化

  • 1.4.1. Hudi

  • 1.4.1.1. Hadoop Update Delete Incremental的缩写

  • 1.4.1.2. 一种表管理技术结合了多种序列化技术,让分析查询拥有列式数据库的性能,同时能进行原子式的、事务性的记录更新

  • 1.4.2. Iceberg

  • 1.4.2.1. 一种表管理技术

2. 数据库存储引擎

2.1. 存储引擎通常是独立于查询引擎的一个软件层

2.2. 存储引擎管理数据在磁盘上存储的所有相关信息,包括序列化方式、数据的最底层排布和索引

2.3. 另一个主要发展方向是服务于分析和数据仓库应用程序的列存储

  • 2.3.1. SQL Server、PostgreSQL和MySQL都有强大的列存储支持

3. 压缩算法

3.1. 无损压缩算法

  • 3.1.1. 用无损算法解压缩编码的数据会完整恢复到原始数据

  • 3.1.2. 在对数据保真度有要求的分析序列化过程中使用无损压缩算法

3.2. 音频、图像和视频的有损压缩算法旨在实现感官上的保真,解压缩恢复的东西听起来像或看起来像原件,但不精确

  • 3.2.1. 数据工程师可能会在媒体处理管道中使用有损压缩算法

3.3. 传统的压缩引擎如gzip和bzip2非常适合处理文本数据

  • 3.3.1. 经常被应用于JSON、JSONL、XML、CSV和其他基于文本的数据格式

3.4. 新一代的压缩算法,将速度和CPU效率置于压缩率之上

  • 3.4.1. 主要有Snappy、Zstandard、LZFSE和LZ4等

4. 云网络

4.1. 云网络拓扑结构描述了云中各种组件的排列和连接方式,如云服务、网络、位置(区域)等

4.2. 数据出口费用

  • 4.2.1. 在网络定价方面,云提供商会让入站流量免费但对出站流量收费

  • 4.2.2. 出站流量本身并不比入站便宜,但云提供商用这种方法在它们的服务周围创造了一条护城河,并且增加了所存储数据的黏性

  • 4.2.3. 数据出口费也适用于云的可用区或区域之间的数据传输

  • 4.2.4. 数据出口费是阻碍互操作性、数据共享和数据向云端移动的重要因素

  • 4.2.5. 数据出口费是云供应商的护城河,防止公有云客户离开或在多个云中部署

4.3. 可用区是公有云向客户暴露的最小的网络拓扑单元

  • 4.3.1. 一个区内的系统和服务之间一般会有最高的网络带宽和最低的延时

  • 4.3.2. 发送到区内虚拟机的网络流量是免费的,但有明显的限制:流量必须发送到私有IP地址

4.4. 区域是两个或多个可用区的集合

  • 4.4.1. 数据中心的运行需要依赖许多资源(电力、水等)

  • 4.4.2. 各个可用区的所用资源是独立的

  • 4.4.3. 多区域意味着资源可以放在靠近用户的地方

  • 4.4.4. 区域在可用区之间支持快速、低延迟的网络

  • 4.4.5. 可用区间的网络性能将比单个可用区内的差,并在虚拟机之间产生名义上的数据输出费用

4.5. 谷歌实际上拥有比其他云提供商多得多的全球规模网络资源,它可以给用户提供高级网络服务

  • 4.5.1. 高级网络的区域之间流量可以只走谷歌的网络,不走公网

4.6. 流的公有云都提供加强版连接的选项,客户可以将自己的网络与云的某个区域或VPC直接集成

4.7. 内容分成服务可以为向公众或客户传送数据资产提供巨大的性能提升和折扣

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

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

相关文章

入门龙芯旧世界汇编指令

我是龙芯汇编指令新手,本文是我学习龙芯汇编的笔记我借到了一台宝贵的龙芯 3A6000 设备,我期望在这台设备上面学习龙芯汇编指令。这台设备上的是龙芯旧世界的麒麟系统,由于这台设备很宝贵,我不能随意玩。为了防止弄坏设备,我将在此设备上面搭建 docker 环境,进入到 docke…

促进通用跨域检索中广义知识的模拟

促进通用跨域检索中广义知识的模拟ProS:促进通用跨域检索中广义知识的模拟通用跨域检索(UCDR)的目标是在广义测试场景中实现稳健的性能,其中数据在训练过程中可能属于严格未知的域和类别。最近,具有快速调整的预训练模型显示出很强的泛化能力,并在各种下游任务中取得了显著…

ParamISP:使用相机参数学习正向和反向ISP

ParamISP:使用相机参数学习正向和反向ISPRAW图像很少被共享,主要是因为与相机ISP获得的sRGB图像相比,RAW图像的数据量过大。最近已经证明,学习相机ISP的正向和反向过程,可以对输入的sRGB图像进行具有物理意义的RAW级图像处理。然而,现有的基于学习的ISP方法,无法处理ISP…

thinkphp console 命令行打印错误调用堆栈

在think\Console源文件里找到 run() 方法,加上内容: $output->error($e->getTraceAsString()); 然后当执行命令报错的时候就会有详细的错误信息,方便排查具体是哪行引起的问题!本文来自博客园,作者:imzhi,转载请注明原文链接:https://www.cnblogs.com/imzhi/p/18…

信道的极限容量

我们可以简单地将带通信道理解为无线传输信道,低通信道理解为有线传输信道,记忆公式时应该记住乘2的那个调制速度就是波特率

JD 商品詳情頁解析

https://item.jd.com/100036218692.html 以这个商品链接为例,分析详情图接口抓包拿到接口入参出参构建代码headers = {cookie:"",accept: application/json, text/javascript, */*; q=0.01,accept-language: zh-CN,zh;q=0.9,origin: https://item.jd.com,priority: …

Vmware虚拟机下载安装使用教程(17.5.2最新版非常详细)

VMware,自1998年成立以来,便以其革命性的虚拟化技术引领行业。这家公司专注于提供软件和服务,支持云计算和虚拟化解决方案,使得一台物理服务器能够托管多个独立的虚拟机,每个虚拟机都能独立运行不同的操作系统和应用。VMware的技术不仅优化了硬件资源的使用效率,还简化了…

Vmware虚拟机下载安装使用教程(2024最新版非常详细)

VMware,自1998年成立以来,便以其革命性的虚拟化技术引领行业。这家公司专注于提供软件和服务,支持云计算和虚拟化解决方案,使得一台物理服务器能够托管多个独立的虚拟机,每个虚拟机都能独立运行不同的操作系统和应用。VMware的技术不仅优化了硬件资源的使用效率,还简化了…

RHEL9.4上创建RHEL8.1虚拟机

日期:2024.11.5 目的:在物理机RHEL9.4搭建的虚拟化环境中安装虚拟机,操作系统为RHEL8.1,虚拟出网卡3块,用来模拟路由,后续还打算在上面搭建一个DHCP的中继服务。 参照:鸟哥Linux私房菜服务器篇 第二章、第一個虛擬機器的安裝與調整 https://linux.vbird.org/linux_server/…

电子邮件

标准的ASCLL码使用的就是7个比特表示128种字符,而C语言中的char类型则使用了8个比特,比128大的几个状态用来表示扩展字符集

22. 使用MySQL之使用视图

1. 视图 视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。 举个例子来理解视图:第15章中用下面的SELECT语句从3个表中检索数据: select cust_name, cust_contact from customers where cust_id in (select cust_id from orderswhere order_num i…