读数据工程之道:设计和构建健壮的数据系统32序列化和云网络
https://img2024.cnblogs.com/blog/3076680/202411/3076680-20241108221601162-1950279363.png1. 序列化
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. 内容分成服务可以为向公众或客户传送数据资产提供巨大的性能提升和折扣
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]