当前位置: 首页 > news >正文

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

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. 图数据库还可以处理事务用例

相关文章:

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

1. 源系统中的数据生成 1.1. 数据工程师的工作是从源系统获取数据,对其进行处理,使其有助于为下游用例提供服务 1.2. 数据工程师的角色将在很大程度上转向理解数据源和目的地之间的相互作用 1.3. 数据工程的最基本的数据管道任务——将数据从A移动到B…...

基于SpringBoot+Vue的厨艺交流系统的设计与实现(源码+定制开发)厨艺知识与美食交流系统开发、在线厨艺分享与交流平台开发、智能厨艺交流与分享系统开发

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…...

STMicroelectronics 意法半导体芯片选型表

意法半导体作为全球知名的半导体厂商,其产品广泛应用于各个领域,从消费电子到工业控制,从汽车电子到通信设备,都能看到意法半导体芯片的身影。在电子硬件设计领域,芯片的选型至关重要。亿配芯城(ICgoodFind…...

TCP/IP 寻址

TCP/IP 寻址 概述 TCP/IP(传输控制协议/互联网协议)是一组用于数据网络的通信协议。它们定义了数据如何在网络上从一个设备传输到另一个设备。在TCP/IP网络中,每个设备都有一个唯一的地址,称为IP地址,用于标识网络上…...

深入探索 APKTool:Android 应用的反编译与重打包工具

文章目录 一、反编译 APK1.1 解压 APK1.2 DEX 文件转换1.3 资源解码 二、重新打包 APK2.1 资源重新编译2.2 smali 转换为 DEX2.3 打包 APK2.4 签名 APK 三、技术原理3.1 Smali/Baksmali3.1.1 DEX 文件格式3.1.2 Smali 语法3.1.2.1 指令3.1.2.2 寄存器3.1.2.3 操作码3.1.2.4 注释…...

软件测试与软件缺陷的基础知识

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…...

【JPCS独立出版,EI检索稳定】第三届能源互联网及电力系统国际学术会议(ICEIPS 2024)

第三届能源互联网及电力系统国际学术会议(ICEIPS 2024) 2024 3rd International Conference on Energy Internet and Power Systems ICEIPS 2024已成功申请JPCS - Journal of Physics: Conference Series (ISSN:1742-6596) ICEIPS 2024独立出版&…...

ssm配置模式

新版 用Java类,全注解demo案例 1. AppConfig.java (Spring主配置类)package com.example.config;import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.cont…...

[MySQL课后作业]人事管理系统的SQL实践

第一题 1.假设某商业集团中有若干公司,人事数据库中有3个基本表: 职工表:EMP(E#.ENAME,AGE, SEX, ECITY)。 其属性分别表示职工工号、姓名、年龄、性别和居住城市。 工作表:WORKS(E#,C#,SALARY)。其属性分别表示职工工号、所在公司的编号和工资。 公司表:COMP(C#,CA…...

【MySQL】增删改查-进阶(二)

目录 🌴新增 🎄查询 🚩聚合查询 🏀聚合函数 🏀group by子句 🏀HAVING 🚩联合查询 🏀内连接 🏀外连接 🏀自连接 🏀子查询 &#x1f3c0…...

cefsharp79.1.360(Chromium 79.0.3945.130)支持H264视频播放-PDF预览 老版本回顾系列体验

一、关于此版本 版本:Cef 79.1.36/CefSharp 79.1.360/Chromium 79.0.3945.130/支持H264/支持PDF预览 支持PDF预览和H264推荐版本 63/79/84/88/100/111/125 运行环境需要 visual c++ 2015不支持xp/vista/2003/2008默认不支持h264(版权问题)支持打印预览 print preview已知问题…...

【Linux】main函数的参数列表从何而来?

Linux系统进程通过exec系列函数启动新程序时,argc整型 、 argv数组 和 环境变量表 environ 会作为 exec 系列函数的参数,显式传递给新程序的 main 函数。 main函数的参数列表 在C语言中,main函数的标准参数列表通常如下所示: in…...

缓冲区类QBuffer

1、QBuffer继承自QIODevice 2、是一种随机设备 3、和QFile类似, 4、有了 QBuffer,你可以把 QByteArray 当成文件一样来操作 其主要作用就是像QFile操作文件一样来操作一块QByteArray(内存区域),比如读和写 常用方…...

从一个事故中理解 Redis(几乎)所有知识点

作者:看破 一、简单回顾 事故回溯总结一句话: (1)因为大 KEY 调用量,随着白天自然流量趋势增长而增长,最终在业务高峰最高点期占满带宽使用 100%。   (2&#xff…...

MySQL程序介绍<二>

目录 mysqlcheck - 表维护程序 Mysqldump - 数据库备份程序 mysqladmin - MySQL 服务器管理程序 mysqlshow - 显⽰数据库、表和列信息 mysqldumpslow - 总结慢查询⽇志⽂件 ​编辑 mysqlbinlog - 处理⼆进制⽇志⽂件 mysqlslap - 负载仿真客⼾端 接着上篇继续介绍MySQL…...

Java项目实战II基于Spring Boot的毕业就业信息管理系统设计与实现(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着高校扩…...

LeetCode 1343.大小为K且平均值大于等于阈值的子数组数目

题目: 给你一个整数数组 arr 和两个整数 k 和 threshold 。 请你返回长度为 k 且平均值大于等于 threshold 的子数组数目。 思路:定长滑动窗口 入 更新 出 代码: class Solution {public int numOfSubarrays(int[] arr, int k, int t…...

【电商项目】1分布式基础篇

1 项目简介 1.2 项目架构图 1.2.1 项目微服务架构图 1.2.2 微服务划分图 2 分布式基础概念 3 Linux系统环境搭建 查看网络IP和网关 linux网络环境配置 补充P123(修改linux网络设置&开启root密码访问) 设置主机名和hosts映射 主机名解析过程分析&…...

PHP嵌套函数

PHP嵌套函数(Nested Functions)在标准的PHP语法中并不直接支持,也就是说,你不能在一个函数内部直接定义另一个函数。然而,可以通过闭包(Closures)和匿名函数(Anonymous Functions&am…...

外包干了2个月,技术明显退步

回望过去,我是一名普通的本科生,于2019年通过校招有幸加入了南京某知名软件公司。那时的我,满怀着对未来的憧憬和热情,投入到了功能测试的岗位中。日复一日,年复一年,转眼间,我已经在这个岗位上…...

kaptcha依赖maven无法拉取的问题

老依赖了,就是无法拉取,也不知道为什么,就是用maven一直拉去不成功,还以为是魔法的原因,试了好久发现不是,只好在百度寻求帮助了,好在寻找到了这位大佬的文章Maven - 解决无法安装 Kaptcha 依赖…...

48.旋转图像

秋招未止脚步不止,大厂,我一定要上大厂! 题目链接 . - 力扣(LeetCode) 自己的思路 感觉好难,想不出来. 噫噫噫,我想着想着又想出来了。 //发现规律了,先左右对称, 再…...

每天5分钟玩转C#/.NET之goto跳转语句

前言 在我们日常工作中常用的C#跳转语句有break、continue、return,但是还有一个C#跳转语句很多同学可能都比较的陌生就是goto,今天大姚带大家一起来认识一下goto语句及其它的优缺点。 goto语句介绍 goto 语句由关键字 goto 后跟一个标签名称组成&…...

Java处理大数据小技巧:深入探讨与实践

引言 一、选择合适的数据结构 1. 使用高效的集合 2. 并发安全的数据结构 二、内存管理 1. JVM参数调优 2. 避免内存泄漏 三、并行计算与分布式处理 1. 利用Java并发API 2. 分布式框架 四、数据压缩与序列化 1. 数据压缩 2. 高效序列化 五、外部存储与缓存 1. NoS…...

我开源了Go语言连接数据库和一键生成结构体的包【实用】

项目地址:https://gitee.com/zht639/my_gopkg autosql autosql 是一个简化数据库使用的模块,支持常见的数据库(MySQL、PostgreSQL、SQLite、SQL Server)。该模块不仅提供了数据库连接函数,还能自动生成数据表对应的结…...

Sentinel 快速入门

前置推荐阅读:Sentinel 介绍-CSDN博客 前置推荐阅读:Nacos快速入门-CSDN博客 快速开始 欢迎来到 Sentinel 的世界!这篇新手指南将指引您快速入门 Sentinel。 Sentinel 的使用可以分为两个部分: 核心库(Java 客户端)&#xff1a…...

基于SpringBoot健康生活助手微信小程序【附源码】

基于SpringBoot健康生活助手微信小程序 效果如下: 管理员登录界面 管理员主界面 用户管理界面 健康记录管理界面 健康目标管理界面 微信小程序首页界面 活动信息界面 留言反馈界面 研究背景 近年来,由于计算机技术和互联网技术的飞速发展,…...

功能安全实战系列-软件FEMA分析与组件鉴定

本文框架 前言1. 功能安全分析1.1 Why1.2 What?1.3 How?1.3.1 分析范围确定1.3.2 失效模式分析1.3.3 安全措施制定1.3.4 确认是否满足功能安全目标2. 软件组件鉴定2.1 Why2.2 How?前言 在本系列笔者将结合工作中对功能安全实战部分的开发经验进一步介绍常用,包括Memory(Fl…...

【数据结构与算法】链表(上)

记录自己所学&#xff0c;无详细讲解 无头单链表实现 1.项目目录文件 2.头文件 Slist.h #include <stdio.h> #include <assert.h> #include <stdlib.h> struct Slist {int data;struct Slist* next; }; typedef struct Slist Slist; //初始化 void SlistI…...

svn-拉取与更新代码

右键项目文件 进行更新与提交代码&#xff0c;提交代码选择更改的文件以及填写commit...