读数据工程之道:设计和构建健壮的数据系统19数据存储系统 (下)

news/2024/10/25 6:46:08/文章来源:https://www.cnblogs.com/lying7/p/18498332

1. 对象存储

1.1. 对象存储包含各种形状和大小的对象

  • 1.1.1. Amazon S3、Azure Blob Storage和Google Cloud Storage(GCS)是广泛使用的对象存储

  • 1.1.2. 许多云数据仓库(以及越来越多的数据库)利用对象存储作为其存储层,而云数据湖通常位于对象存储上

  • 1.1.3. 对象存储是一个用于不可改变的数据对象的键值存储

    • 1.1.3.1. 对象不支持随机写入或追加操作

    • 1.1.3.2. 它们作为字节流被写入一次

      1.1.3.2.1. 在这个初始写入之后,对象就变得不可改变了

      1.1.3.2.2. 要改变一个对象中的数据或向其追加数据,我们必须重写整个对象

  • 1.1.4. 对象存储通常支持通过范围请求进行随机读取,但这些查找的性能可能比从存储在SSD上的数据中随机读取要差得多

  • 1.1.5. 对象存储不需要支持锁或更改同步,允许跨大规模磁盘集群存储数据

    • 1.1.5.1. 对象存储支持在许多磁盘上进行性能极高的并行流写入和读取,这种并行性对工程师来说是隐藏的,他们可以简单地处理流,而不是与单个磁盘进行通信

1.2. 云对象存储

  • 1.2.1. 云对象存储最吸引人的特点之一是它可以直接管理和使用

    • 1.2.1.1. 对象存储可以说是第一批“无服务器”服务之一,工程师不需要考虑底层服务器集群或磁盘的特性
  • 1.2.2. 典型的云对象存储将数据保存在几个可用区,极大地降低了存储完全离线或以不可恢复的方式丢失的概率

    • 1.2.2.1. 耐用性和可用性是内置于成本中的

    • 1.2.2.2. 云存储供应商以折扣价格提供其他存储类别,以换取降低的耐用性或可用性

  • 1.2.3. 云对象存储是分离计算和存储的一个关键因素,允许工程师用短暂的集群处理数据,并按需扩大和减少这些集群

    • 1.2.3.1. 大多数组织将把数据处理转移到云中,使用对象存储作为基本的存储和服务层,同时在短暂的集群上处理数据

1.3. 在对象存储中,可用的存储空间也是高度可扩展的,这是大数据系统的理想特征

  • 1.3.1. 存储空间受到存储提供商所拥有的磁盘数量的限制,但这些提供商处理的数据都是艾字节的

  • 1.3.2. 在云环境中,可用的存储空间几乎是无限的

  • 1.3.3. 公有云客户对存储空间的主要限制是预算

  • 1.3.4. 工程师可以迅速为项目存储大量的数据,而不需要提前几个月为必要的服务器和磁盘做计划

1.4. 数据工程应用程序的对象存储

  • 1.4.1. 从数据工程的角度来看,对象存储为大批量读取和批量写入提供了出色的性能

  • 1.4.2. 对象存储不适合每秒有许多小更新的事务工作负载,这些用例最好由事务数据库或块存储系统来完成

  • 1.4.3. 对象存储对于低更新率的操作来说效果很好,每个操作都会更新大量的数据

  • 1.4.4. 对象存储现在是数据湖存储的黄金标准

    • 1.4.4.1. 在数据湖的早期,一次写入,多次读取(Write Once,Read Many,WORM)是操作标准,但这不是HDFS和对象存储的局限,而与管理数据版本和文件的复杂性有很大关系
  • 1.4.5. 对象存储是这些结构化数据应用之外的任何格式的非结构化数据的理想存储库

  • 1.4.6. 对象存储可以存放任何二进制数据,不受类型或结构的限制,并且经常在原始文本、图像、视频和音频的ML管道中发挥作用

1.5. 对象寻找

  • 1.5.1. 与文件存储不同,对象存储不利用目录树来寻找对象

  • 1.5.2. 对象存储使用一个顶级的逻辑容器​,并通过键来引用对象

1.6. 对象的一致性和版本管理

  • 1.6.1. 对象存储不支持原地更新或追加

  • 1.6.2. 最终一致性的最终部分意味着,在足够长的时间过去后,存储集群达到一个状态,即只返回对象的最新版本

  • 1.6.3. 对象版本与对象一致性密切相关

  • 1.6.4. 对象的历史版本通常具有与当前版本相同的相关存储成本

  • 1.6.5. 生命周期策略允许在满足某些条件时自动删除旧的对象版本

1.7. 存储类别和层级

  • 1.7.1. 云供应商现在提供不同的存储等级,以降低访问量或降低耐用性为交换条件,对数据存储定价进行折扣

  • 1.7.2. 许多存储层仍然使数据高度可用,但以高的检索成本换取少的存储成本

  • 1.7.3. 在减少访问的层级中,更进一步的是S3 Glacier的归档层级

    • 1.7.3.1. 数据恢复需要12小时

    • 1.7.3.2. 这种存储类别是为那些将被存储7~10年,每年只被访问1~2次的数据而设计的

1.8. 对象存储支持的文件系统

  • 1.8.1. 高速的事务写入将使对象存储的更新能力不堪重负

  • 1.8.2. 将对象存储作为一个本地文件系统挂载,对于不经常更新的文件来说是很好的

2. 缓存和基于内存的存储系统

2.1. RAM提供了出色的低延迟和高传输速度

  • 2.1.1. 基于RAM的存储系统一般专注于缓存应用程序,呈现数据的快速访问和高带宽

  • 2.1.2. 出于保留的目的,数据一般应被写入更持久的介质中

2.2. 分布式内存缓存系统(Memcached)是一个键值存储,用于缓存数据库查询结果、API调用响应等

  • 2.2.1. Memcached使用简单的数据结构,支持字符串或整数类型

  • 2.2.2. Memcached可以以非常低的延迟提供结果,同时也减轻了后端系统的负担

2.3. Redis还建立了多种持久性机制,包括快照和日记

3. Hadoop分布式文件系统

3.1. Hadoop分布式文件系统基于谷歌文件系统(Google File System,GFS),最初是为了用MapReduce编程模型处理数据而设计的

3.2. Hadoop将大文件分成块,即大小小于几百兆字节的数据块

3.3. Hadoop不是简单的一个存储系统

  • 3.3.1. Hadoop将计算资源与存储节点结合起来,以实现就地数据处理

3.4. HDFS仍然在各种应用程序和组织中广泛使用

  • 3.4.1. 纯粹的MapReduce编程模型已经被淘汰了

3.5. HDFS是目前许多大数据引擎的关键成分

4. 流式存储

4.1. 流数据与非流数据有不同的存储要求

  • 4.1.1. 在消息队列中,存储的数据是时间性的,预计在一定时间后会消失

  • 4.1.2. Kafka通过将旧的、不经常访问的消息推送到对象存储中来支持无限期的数据保留

  • 4.1.3. Kafka的竞争对手(包括Amazon Kinesis、Apache Pulsar和Google Cloud Pub/Sub)也支持长期数据保留

4.2. 重放允许流媒体系统返回一系列的历史存储数据

  • 4.2.1. 重放是流式存储系统的标准数据检索机制

  • 4.2.2. 重放可以用来在一个时间范围内运行批处理查询,也可以用来重新处理流管道中的数据

4.3. 事务数据库是最早的实时查询引擎,数据一经写入就会被查询

5. 索引、分区和聚类

5.1. 索引为特定字段提供了一个表格图,并允许极快地查找个别记录

  • 5.1.1. 如果没有索引,则数据库将需要扫描整个表来找到满足WHERE条件的记录

  • 5.1.2. 索引也可以应用于其他列,以满足特定应用程序的需要

  • 5.1.3. 使用索引,一个RDBMS可以每秒查询和更新数千条记录

5.2. 列式序列化

  • 5.2.1. 列式序列化允许数据库只扫描特定查询所需的列,有时会极大地减少从磁盘上读取的数据量

  • 5.2.2. 按列排列的数据将相似的值放在一起,产生高压缩率,而压缩开销最小,使得数据可以更快地从磁盘和网络上被扫描

  • 5.2.3. 列式数据库在事务用例(即当我们试图异步查询大量的单独行时)中的表现很差

  • 5.2.4. 当必须扫描大量的数据(例如,用于复杂的数据转换、聚合、统计计算或对大型数据集的复杂条件进行评估)时,它们的表现非常好

  • 5.2.5. 列式数据库允许快速的扫描速度,但尽可能减少扫描的数据量仍然是有帮助的

5.3. Snowflake微分区

  • 5.3.1. Snowflake微分区,因为它是列存储方法最近发展和演变的一个好例子

  • 5.3.2. 微分区是指未压缩的大小在50兆~500兆字节之间的行集

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

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

相关文章

关于 服务器的 http server 架设与配置 梳理

目标:想将自己的一些文件放到服务器上,然后谁都能下载,由于不懂这方面,所以跟着网上教程走,但是还是踩了好多坑.这里再梳理一下.首先肯定是要有个自己的云服务器. 然后开始搭建 web服务器.这里我是跟着一个教程走的,用的是 nginx. 链接:Http服务器搭建-CSDN博客怕博主删了,这里…

Codeforces Round 981 div3 个人题解(A~G)

Codeforces Round 981 div3 个人题解(A~G) Dashboard - Codeforces Round 981 (Div. 3) - Codeforces 火车头 #define _CRT_SECURE_NO_WARNINGS 1#include <algorithm> #include <array> #include <bitset> #include <cmath> #include <cstdio> …

JetBrains终于正式宣布:WebStorm免费开放个人开发者使用了!

10 月 24 日,正值程序员节之际,JetBrains 正式宣布:WebStorm 个人版现已全面免费开放使用。众所周知,WebStorm 是一个非常好用的 IDE,但是不免费。为响应开发者社区的需求,JetBrains 决定,针对非商业用途,WebStorm 个人版将不再收取费用,真正实现了对个人开发者的免费…

ubuntu22.04桌面版开启root用户登陆并开启root用户远程ssh连接

ubuntu22.04桌面版开启root用户登陆并开启root用户远程ssh连接最近在使用Ubuntu22.04时需要用到root用户登录桌面,于是配置了下系统,也在网上查找了类似的文章,发现几篇文章都操作都存在一定的问题,所以在这里写了一份较为完整的,这份文档是清澈过可以正常使用运行的,具体…

Arm64内存模型、内存类型、性能与DMA

一、背景 写下本文的原因来自一次 bug 排查,平台为某个 Arm64 处理器。 问题简单来说就是,就是申请一块 dma-buf 并映射到用户空间,对 buffer 使用memcpy()时发现一些异常性能问题:从 dma-buf 向通过malloc()申请的普通堆内存拷贝速度,远慢于从普通堆内存向 dma-buf 拷贝的…

[rCore学习笔记 030] 虚拟地址与地址空间

时隔很久,终于忙里偷闲可以搞一搞rCore,上帝啊,保佑我日更吧,我真的很想学会. 导读部分 首先还是要看官方文档. 我决定看一遍然后自己表述一遍(智将). 这里反复提到MMU,就是因为之前学MCU的时候有一个疑问,就是为什么MCU上不选择跑一个Linux,当时找到的答案是因为没有MMU. MMU的…

11. 使用MySQL之使用数据处理函数

1. 函数 与其他大多数计算机语言一样,SQL支持利用函数来处理数据。 函数一般是在数据上执行的,它给数据的转换和处理提供了方便。 在前一章中用来去掉串尾空格的RTrim()就是一个函数的例子。 补充: 函数没有SQL的可移植性强 能运行在多个系统上的代码称为可移植的(portable…

【CodeForces训练记录】Codeforces Round 981 (Div. 3)

https://codeforces.com/contest/2033 训练情况 22队长率先开出E题,但是结局可能还是掉分了 TAT赛后反思 这场太板了,D题有点反常(存疑?) A题 我们直接模拟位置的变化就行,先手 \(-2 \times i - 1\) 后手 \(+ 2 \times i - 1\),用一个while找到 \(>n\) 的地方来结束循…

东山Pi柒号-4-STM32MP157 TF-A移植

STM32MP157 TF-A 移植 在了解了 STM32MP 系列芯片的启动流程后,我们将开始进行东山 Pi 柒号的 TF-A 移植。 准备工作 首先,我们需要下载 STM32MP1 系列的 STM32MPU_Developer_Package,该包中包含编译器 SDK 和官方源码:STM32MP1 OpenSTLinux 开发套件 https://www.st.com.c…

【投资理财】一起来探索金融理财世界啦

各位程序员小伙伴们,大家都知道最近大 A 股市那叫一个起伏不定啊,就像坐过山车似的,刺激得很。咱程序员平时工作忙归忙,但不少同学对炒股还挺感兴趣的,甚至有的同学在工作的时候还会偷偷摸摸瞅几眼股市行情😜。我最近发现了一些很不错的金融理财资源,想着赶紧分享给大家…

第43篇 Linux上使用docker部署.net8项目详细教程

在docker上部署自己的.net8 webapi,以腾迅linux云服务为例: 1.安装docker 1.1 查看docker是否已安装: 命令:docker -v如果显示版本,说明已经安装成功,无需再安装 1.2 docker未安装,执行以下步骤安装 1.2.1 添加 Docker 软件源。 dnf config-manager --add-repo=http://m…