首页 > 其他分享 >读数据工程之道:设计和构建健壮的数据系统14源系统

读数据工程之道:设计和构建健壮的数据系统14源系统

时间:2024-10-20 08:49:02浏览次数:5  
标签:4.1 14 数据库 读数据 3.7 数据系统 日志 数据 2.1

1. 源系统中的数据生成

1.1. 数据工程师的工作是从源系统获取数据,对其进行处理,使其有助于为下游用例提供服务

1.2. 数据工程师的角色将在很大程度上转向理解数据源和目的地之间的相互作用

1.3. 数据工程的最基本的数据管道任务——将数据从A移动到B

2. 数据源

2.1. 数据是无组织的、缺乏内容描述的事实和数据特征的集合

  • 2.1.1. 模拟的

  • 2.1.1.1. 模拟数据是在现实世界中生成的,例如语音、手语、纸上书写或演奏乐器

  • 2.1.1.2. 模拟数据通常是瞬态的,如通常的口头对话,在对话结束后声音数据也就消失了

  • 2.1.2. 数字的

  • 2.1.2.1. 数字数据要么是通过将模拟数据转换为数字形式生成的,要么是数字系统直接生成的

  • 2.1.2.2. 将模拟语音转换为数字文本的移动短信应用程序

  • 2.1.2.3. 电子商务平台上的信用卡交易信息

2.2. 数据在我们周围的世界无处不在

  • 2.2.1. 物联网设备、信用卡终端、望远镜传感器、股票交易等都在生成数据

3. 源系统

3.1. 源系统以各种方式生成数据

3.2. 文件和非结构化数据

  • 3.2.1. 文件是字节序列,通常存储在磁盘上

  • 3.2.2. 应用程序经常将数据写入文件

  • 3.2.3. 文件可以存储本地参数、事件、日志、图像和音频

  • 3.2.4. 文件是一种通用的数据交换媒介

  • 3.2.5. 主要源文件格式类型(手动生成或源系统输出的文件)有Excel、CSV、TXT、JSON和XML

  • 3.2.5.1. 结构化的(Excel、CSV)

  • 3.2.5.2. 半结构化的(JSON、XML、CSV)

  • 3.2.5.3. 非结构化的(TXT、CSV)

3.3. API

  • 3.3.1. 应用程序接口是系统间交换数据的标准方式

  • 3.3.2. API仍然存在许多针对数据的复杂性,需要工程师管理

  • 3.3.3. 数据工程师也必须投入大量资金和相当多的精力用于维护自定义的API连接

3.4. 应用程序数据库(OLTP系统)

  • 3.4.1. 应用程序数据库存储应用程序的状态

  • 3.4.2. 应用程序数据库是联机事务处理系统

  • 3.4.2.1. 以高速率读取和写入单个数据记录的数据库

  • 3.4.2.2. OLTP系统通常被称为事务数据库,但这并不一定意味着所讨论的系统支持原子事务

  • 3.4.2.3. OLTP数据库支持低延迟和高并发

  • 3.4.2.4. 当成千上万甚至数百万用户可能同时与应用程序交互、同时更新和写入数据时,OLTP数据库可以很好地作为应用程序后端

  • 3.4.3. OLTP系统不太适合由大规模分析驱动的用例,由于其单个查询也必须扫描大量数据

  • 3.4.4. 小公司直接在OLTP上运行分析

  • 3.4.4.1. 适用于短期但最终无法扩展

3.5. 联机分析处理系统

  • 3.5.1. 联机分析处理系统是为运行大型分析查询而构建的,通常在处理单个记录的查找方面效率低下

  • 3.5.2. OLAP来指代任何支持大规模交互式分析查询的数据库系统

  • 3.5.3. OLAP的在线部分通过不断地监听传入的查询,使OLAP系统适合交互式分析

3.6. 变更数据捕获

  • 3.6.1. 变更数据捕获是一种提取数据库中发生的每个变更事件(插入、更新、删除)的方法

  • 3.6.2. CDC经常用于近乎实时地在数据库之间进行复制或为下游处理创建事件流

  • 3.6.3. 关系数据库通常直接生成存储在数据库服务器上的事件日志,可以对其进行处理以创建一个流

  • 3.6.4. 许多云端NoSQL数据库可以将日志或事件流发送到目标存储位置

3.7. 日志

  • 3.7.1. 日志收集有关系统中发生的事件的信息

  • 3.7.2. 日志是一个丰富的数据源,对下游数据分析、ML和自动化具有潜在价值

  • 3.7.2.1. 操作系统

  • 3.7.2.2. 应用程序

  • 3.7.2.3. 服务器

  • 3.7.2.4. 容器

  • 3.7.2.5. 网络

  • 3.7.2.6. 物联网设备

  • 3.7.3. 所有日志都跟踪事件和其元数据

  • 3.7.4. 日志应该记录谁、发生了什么和什么时候

  • 3.7.4.1. 与事件关联的人员、系统或服务账户

  • 3.7.4.2. 事件和相关元数据

  • 3.7.4.3. 事件的时间戳

  • 3.7.5. 日志编码

  • 3.7.5.1. 二进制编码日志

>  3.7.5.1.1. 通过自定义的紧凑格式编码数据来提高空间效率和I/O速度
  • 3.7.5.2. 半结构化日志
>  3.7.5.2.1. 被编码为对象序列化格式(JSON,也可能是其他)的文本

>  3.7.5.2.2. 半结构化日志是机器可读和可移植的

>  3.7.5.2.3. 效率远低于二进制日志
  • 3.7.5.3. 纯文本(非结构化)日志
>  3.7.5.3.1. 存储从软件的控制台输出的日志
  • 3.7.6. 日志分辨率

  • 3.7.6.1. 日志以各种分辨率和日志等级创建

  • 3.7.6.2. 日志分辨率是指一个日志中捕获的事件数据量

  • 3.7.6.3. 捕获大数据系统中的所有数据变化通常是不切实际的

  • 3.7.6.4. 日志等级是指记录一个日志条目所需的条件,具体涉及错误和调试信息

  • 3.7.7. 日志延迟:批处理或实时

  • 3.7.7.1. 批处理日志通常被连续写入一个文件

  • 3.7.7.2. 将单个日志条目写入消息系统

3.8. 数据库日志

  • 3.8.1. 预写日志

  • 3.8.1.1. 以特定数据库的格式存储的二进制文件

  • 3.8.1.2. 在数据库的保证和可恢复性中起着至关重要的作用

  • 3.8.1.3. 确认伴随着与日志相关的保证:即使服务器出现故障,它也可以通过完成日志中未完成的工作来在重新启动时恢复其状态

  • 3.8.2. 数据库日志在数据工程中非常有用,特别是利用CDC从数据库更改中生成事件流

3.9. CRUD

  • 3.9.1. 代表创建、读取、更新和删除,是编程中常用的事务模式,代表持久化存储的四种基本操作

  • 3.9.2. CRUD是在数据库中存储应用程序状态的最常见模式

  • 3.9.3. CRUD的一个基本原则是数据必须在使用前创建

3.10. ⑩仅插入

  • 3.10.1. 仅插入模式将历史记录直接保留在数据的表中

  • 3.10.2. 新记录没有更新记录,而是插入了一个新的时间戳,指示它们的创建时间

  • 3.10.3. 仅插入模式直接在表本身中维护数据库日志,如果应用程序需要访问历史记录,则这种模式特别有用

  • 3.10.4. 仅插入模式的分析通常与常规CRUD应用程序表一起使用

  • 3.10.5. 在仅插入模式ETL中,只要CRUD表中发生更新,数据管道就会在目标分析表中插入一条新记录

  • 3.10.6. 缺点

  • 3.10.6.1. 表可能会变得非常大,尤其是在数据频繁更改的情况下

  • 3.10.6.2. 记录查找会产生额外的开销,因为查找当前状态涉及运行MAX(created_timestamp)

3.11. ⑾消息和流

  • 3.11.1. 消息是在两个或多个系统之间通信的原始数据

  • 3.11.1.1. 消息通常通过消息队列从一个发布者到一个消费者,一旦消息被传递,它就会从队列中移除

  • 3.11.1.2. 在事件驱动系统中,消息是离散的单一信号

  • 3.11.2. 流是事件记录的仅追加日志

  • 3.11.2.1. 流被获取并存储在事件流平台中

  • 3.11.2.2. 当事件发生时,它们会按时间戳或ID顺序累积

  • 3.11.2.3. 在分布式系统下需要注意,事件并不总是按准确的顺序传递

  • 3.11.2.4. 当你关心许多事件中发生的事情时,推荐使用流

  • 3.11.2.5. 由于流的仅追加性质,流中的记录会保存很长时间(通常为数周或数月)​,从而允许对记录进行复杂的操作

  • 3.11.2.6. 处理流的系统也可以处理消息,流平台经常用于消息传递

  • 3.11.2.7. 当我们想要执行消息分析时,我们经常在流中累积消息

3.12. ⑿时间类型

  • 3.12.1. 时间是所有数据获取的基本考虑因素,但在流处理的上下文中它变得更加关键和微妙,因为我们将数据视为连续数据并期望在生成后不久就使用它

  • 3.12.2. 事件时间表示事件在源系统中何时产生,包括原始事件本身的时间戳

  • 3.12.3. 在事件被下游获取和处理之前,会发生不确定的时间滞后

  • 3.12.4. 事件经过的每个阶段的时间戳都需要被记录

  • 3.12.5. 日志需要记录事件发生时以及每个阶段的时间(创建、获取和处理时间)

  • 3.12.6. 时间戳日志可以准确跟踪数据在数据管道中的移动

  • 3.12.7. 处理时间发生在获取时间之后,此时数据被处理(通常是转换)

  • 3.12.8. 处理时长是处理数据所花费的时间,以秒、分钟、小时等为单位

4. ACID

4.1. 对原子事务的支持是数据库关键特征之一,统称为ACID

  • 4.1.1. 原子性

  • 4.1.1.1. 原子事务

>  4.1.1.1.1. 原子事务是在一个提交中有多个更改
  • 4.1.2. 一致性

  • 4.1.2.1. 一致性意味着数据库的任何读取检索都将返回最后写入版本

  • 4.1.3. 隔离性

  • 4.1.3.1. 隔离性意味着如果针对同一事物同时进行两个更新,则最终数据库状态将与这些更新的提交顺序一致

  • 4.1.4. 持久性

  • 4.1.4.1. 持久性表示提交的数据永远不会丢失,即使在停电的情况下也是如此

4.2. 支持应用程序后端不需要完全具备ACID特性,放宽这些限制可以大大提高性能和规模

4.3. 文档数据库集群可以通过降低一致性来获取更高的文档提交率

4.4. 图数据库还可以处理事务用例

标签:4.1,14,数据库,读数据,3.7,数据系统,日志,数据,2.1
From: https://www.cnblogs.com/lying7/p/18473726

相关文章

  • VTK9.3.1在Windows10+VS2022+Qt 5.14.2环境下编译安装以及VTK应用于QT
    文章目录概要搭建编译环境编译源代码VisualStudio2022+Qt使用VTK概要本文主要介绍VTK9.3.1如何在Windows10上使用VS2022和QT进行编译安装。搭建编译环境先从VTK官网下载VTK9.3.1的源码,VTK下载地址我们可以按照官方推荐的编译方式进行编译,首先设置三个文件夹......
  • USB协议详解第14讲(USB传输-同步传输及事务组成)
    1.前言前面讲过USB一个传输由多个事务组成,一个事务由多个包实体组成。传输又分为控制传输、同步传输、批量传输、中断传输四种,上一节我们讲了控制传输细节及事务组成,今天我们主要讲解同步传输及事务组成。同步传输用在数据量大、对实时性要求高的场合,例如音频设备、视频设备等,这......
  • 14.归一化——关键的数据预处理方法
    引言在人工智能(AI)和机器学习中,归一化(Normalization)是一个重要的预处理步骤。它的主要目的是将数据转换到某个特定的范围。归一化可以帮助模型更高效地学习和提高预测的准确性。归一化在数据预处理方法中占据核心地位,是确保数据质量和模型性能的关键步骤。通过阅读本篇博客,你......
  • NOIP 计划 R14
    洛谷NOIP计划142024年10月17日Status:CLOSEDAuthor:云浅知处\(\def\EZ{\textcolor{#51af44}{\text{EZ}}}\EZ\)表示简单,10分钟内就能想到。\(\def\HD{\textcolor{#3173b3}{\text{HD}}}\HD\)表示中等,能独立想出\(\def\IN{\textcolor{#be2d23}{\text{IN}}}\IN\)......
  • P3571 [POI2014] SUP-Supercomputer 题解
    P3571「POI2014」SUP-Supercomputer题解一道“较”水的黑题(可一开始苦思冥想还是不会)。本蒟蒻的第一篇黑题题解,求赞。题意简化给定一棵$n$个节点、根节点为$1$的有根树。$q$次询问中每次给定一个$k$,输出需要最少用几次操作次数删除完整棵树。每次操作可以选择删......
  • Android14———Launcher去除抽屉模式的实现,将所有app显示在桌面上
    1、首先需要增加一个标志flag,通过true或者false进行是否去除抽屉模式的表达。FeatureFlags.javapublicstaticfinalbooleanREMOVE_DRAWER=true;2、将allApp显示到桌面Workspace上LoaderTask.java先导包:importandroid.util.Pair;importjava.util.function.......
  • 2024-2025-1 20241407《计算机基础与程序设计》第四周学习总结
    这个作业属于哪个课程2024-2025-1-计算机基础与程序设计这个作业要求在哪里2024-2025-1计算机基础与程序设计第四周作业这个作业的目标学习门电路,组合电路,逻辑电路,冯诺依曼结构,CPU,内存,IO管理,嵌入式系统,并行结构,物理安全作业正文https://www.cnblogs.com/wangyih......
  • XC6SLX25T-2CSG324C,XC6SLX45T-2FGG484I,XC7K70T-3FBG484E4914, XILINX/赛灵思 嵌入式
    Xilinx是一家总部位于美国的半导体公司,成立于1984年。他们的主要产品是可编程逻辑器件(FPGA和SoC)和相关的开发工具。Xilinx的FPGA产品被广泛应用于各种领域,包括通信、数据中心、工业控制、汽车、物联网等。他们的产品具有灵活性高、性能强大和可定制性强等特点。2018年,Xilinx宣......
  • P1435 [IOI2000] 回文字串
    尝试了几次发现添加的字符数等于n-正着的和反着的最长公共子序列的长度,即为答案。正序与倒序“公共”的部分就是我们回文的部分,如果把正序与倒序公共的部分减去你就会惊奇的发现剩余的字符就是你所要添加的字符,也就是所求的正解。点击查看代码#include<iostream>#include<st......
  • P1439 【模板】最长公共子序列
    首先考虑动态规划,a[i]==b[j],f[i][j]=f[i-1][j-1]+1,否则f[i][j]=max(f[i-1][j],f[i][j-1]);然后看了一眼数据范围,被卡的实施的,然后考虑优化,看到题目是一个排列于是不要考虑重复的问题,于是只在b里看,如果b[i]在a中的位置,小于我们维护的最长的就不行,否则的话直接加入我们维护的最长......