闻数起舞 发表于 2021-4-8 08:47:41

每个数据工程师都应该知道的7个数据库概念

如果您准备接受数据工程职位口试,则必须相识数据库的全部主要概念。这不是点击诱饵。几个月前,我进行了频频数据工程访谈,全部访谈都涉及我在本文中提到的主题的问题。纵然您没有准备口试,您仍然大概想查抄一下这些概念并刷新一下。
此外,这将是没有效的升数据工程师Y,而是各种各样的专业工作与数据库中的数据:数据科学家,ML-工程师,软件开发等等。
我的名字叫Oleg,是我在GitHub上发布的开源“数据工程书”的作者。我将尝试尽大概简单地解释数据库的7个主要概念。这些概念是:

[*]关系模型
[*]数据归一化
[*]主键和外键
[*]指标
[*]生意业务
[*]复制
[*]分片
让我们开始吧!
关系模型

关系模型是一种结构化和管理数据的方法。


https://p3-sign.toutiaoimg.com/pgc-image/c3e300756a074f649bf9767d699ba221~tplv-tt-large.image?x-expires=1969757794&x-signature=v1zAcYh%2B4JAOFpvmq%2Bf%2FX7TSuzI%3D


在此模型中,数据被组织到表中。每个表都有一个架构。这意味着它具有预定义的列表,因此只能将满足模式的数据写入表中。此外,每一列都有一种数据范例(数字,字符串,布尔值等)。表的列通常称为字段,行称为记录。
在最初的数据库理论中,表称为“关系”,因此称为模型。不要将此定义与表之间的关系肴杂,在表之间我们通常利用键来定义这种关系。我们将在本文背面讨论键。
最后,遵循此模型的数据库称为关系数据库。关系数据库利用SQL(结构化查询语言)访问它们存储的数据。
数据归一化

规范化是使您的数据适合于关系数据库的过程。
有时,标准化被称为删除数据冗余的过程。通常,此定义通常易于解释和明白。规范化有助于对抗数据冗余,进步数据完整性,简化数据结构,资助发现错误。
规范化过程是通过应用两种方法完成的:

[*]综合(例如,创建以前不存在的新项目)或
[*]分解(通过拆分成较小的部分来改善现有数据结构)
思量下面的例子。想象一下,您经营一家电子商店,并在Excel电子表格中记下了每笔采购。它大概看起来像如许:


https://p3-sign.toutiaoimg.com/pgc-image/52575a82bbb544c3b1b142d6a8ae19d1~tplv-tt-large.image?x-expires=1969757794&x-signature=9WKpbIZZPwxe13HQgxtaa0ePgBo%3D


尽管如许的数据结构在Excel中是可以接受的,但是如果您以1对1的方式将其插入数据库中,则大概会导致一些问题:

[*]数据是多余的。例如,您是否真的需要在这里输入客户的姓名?大概电子邮件就足够了,名称可以存储在单独的表中。
[*]查询此类数据将很困难。例如,您能否说说您买了几部iPhone,以及以什么价格出售?不可以,因为“总价”已经是合计代价,而且您不知道购物车中每件商品的本钱。
[*]数据更新和删除非常困难。让我们思量包含两个项目的第一笔订单,并假设客户已决定退回一个项目。在此类表格中反映此更改的最佳方法是什么?
数据规范化将使此类购买日志变成如下所示:
https://p3-sign.toutiaoimg.com/pgc-image/e1ae07b316ee422493543a6ea4a0b77c~tplv-tt-large.image?x-expires=1969757794&x-signature=MuVnn%2FDwEv7L%2FMEDsMRVQiM0uag%3D
在这种结构中,添加,更新和删除条目将变得更加容易。而且,由于我们将重复的数据替换为标识符并将它们存储在单独的表中,因此它将淘汰硬盘驱动器上的空间。
如许的标准化不是唯一的。有一些规则描述规范化级别。数据有6种普通情势,每种情势都有其自己的一组规则和对数据结构的限定。
主键和外键

主键是表中记录的唯一标识符。
当我们想与另一个表建立关系时,需要如许的键。当table的列包含对另一个表的引用时,该列将成为外键。


https://p3-sign.toutiaoimg.com/pgc-image/b4c546eaced347a19d788545900d450c~tplv-tt-large.image?x-expires=1969757794&x-signature=vwtinBAb4q6D9%2BpOnJYakr6FbBM%3D


例如,如果我们有一个customers表,该表的列名为customer_id,则它是该表的主键。与此同时,如果表中orders有CUSTOMER_ID列引用在这一领域的customers表,它成为一个外键的orders表。
索引

索引是数据库内部的一个特殊对象,有助于在数据内部进行快速搜刮。
假设您有一个包含数百万条记录的大表,而且需要查找该表的满足特定条件的子集,例如,特定客户有多少订单。通常,记录不带order插入到表中。因此,要执行搜刮,数据库将需要进行全面扫描,这意味着它将从头至尾逐行进行直到找到所需的行。
为了加快该过程,我们可以为搜刮到的列建立索引。如许的索引将存储表中列的每个值的位置。因此,当利用索引列执行搜刮时,数据库将起首搜刮索引以查找数据的位置,然后才利用这些位置提取所需的行。


https://p3-sign.toutiaoimg.com/pgc-image/41fc746b78b442a883ec9f19f1cab78b~tplv-tt-large.image?x-expires=1969757794&x-signature=TfSCDIvdU6DJ3uSMj70VhiFjjts%3D


生意业务

术语“生意业务”通常是指不可分割的工作单元。当我们想要在数据库中执行多个利用而且想要确保全部利用一次成功还是失败时,它是必需的。
生意业务的经典示例是银行转账,当您需要将资金从一个帐户转移到另一个帐户时。根本上,涉及三个步骤:

[*]查抄帐户1是否存在所请求的金额
[*]从帐户#1中减去所需的金额
[*]将所需金额添加到帐户2


https://p3-sign.toutiaoimg.com/pgc-image/0d7bdfa8a8d94b21ab0d4a12178705e8~tplv-tt-large.image?x-expires=1969757794&x-signature=qoWbO1EhxQ6hY8dSg9ZTYrao3WI%3D


如果银行应用程序开始了转帐过程,则必须保证这三个利用全部成功或全部失败。
为了确保数据库中可以进行事务处理,数据库应满足一组要求,即ACID缩写。
ACID代表原子性,划一性,隔离性,耐久性。
原子性是保证利用(工作单元)将被完全执行的保证。换句话说,必须成功执行或完全不执行对数据的全部更改。
划一性是指在事务处理之前和之后,数据应处于划一状态。该规则的执行完全由业务逻辑承担。回想一下银行转帐的示例:如果我们从帐户#1减去$ 100,则无法向帐户#2添加$ 200,因为这会导致不划一。
隔离意味着并行事务不应影响相互的结果。对于数据库而言,此要求非常昂贵,因此在某些数据库中存在不同级别的隔离。
最后,持久性保证了利用结果可以持久保存在数据库中,而且不会丢失。例如,如果用户收到事务已完成的响应,则可以确保不会因为系统故障或其他中断而放弃所做的更改。
副本

复制是将数据库同步到其他节点或服务器。换句话说,复制是将我们的数据从一个泉源复制到另一个泉源的过程。
如果我们的数据主副本会发生问题,那么复制可以使我们免受数据丢失的困扰。例如,如果我们的数据库正在停机(例如,缺少网络或中断),则我们的应用程序将无法运行,因为它没有任何数据可显示给用户。


https://p3-sign.toutiaoimg.com/pgc-image/3c4d71937d9644d6a24f757e84b9b695~tplv-tt-large.image?x-expires=1969757794&x-signature=lQEn4YKRONtytj3nx2%2FKqaWjzUY%3D


复制给我们带来了什么:

[*]副本是我们数据库的完整副本
[*]主副本中的更改立即应用于副本
[*]如果主数据库关闭,则全部传入请求都可以重定向到副本
[*]全部添加/更新/删除请求都路由到主数据库,但全部读取都复制到副本数据库的常见情况,为这种体系结构提供了很好的负载平衡
副本可以在两种模式下工作:同步和异步。
顾名思义,同步模式是指副本应用与主实例雷同的更改,而且仅在该用户从数据库得到响应之后。同步模式具有划一的数据,但响应时间通常较慢。
在异步模式下,主服务器不等候副本的响应,而是立即将利用结果发送回用户。异步模式大概会有一些数据延迟(不划一),但是响应速度非常快。
分片

分片是一种通过某些键拆分表中数据并将不同部分发送到不同节点的方法。
分片是水平缩放。我们将一个表分成几个逻辑分区。每个分区的架构都是雷同的(因为我们按行而不是按列划分数据)。每个分区代表表的逻辑分片。
在不同节点之间分布后,它们成为物理碎片。数据库的一个节点可以容纳多个逻辑分片。
如何实现分片?共有三种常见方法:

[*]在应用程序级别上。根本上,知道所需数据的存储位置是您应用程序的工作。
[*]在数据库级别上。数据库自己决定将数据放置在哪个节点上。固然,它不是自动完成的,因为数据库需要预先提供正确的设置。
[*]利用外部和谐服务。在这里,您将分片外包给第三方服务,该服务决定命据的存储位置。您的应用程序利用此服务而不是数据库。
有许多方法可以实现分片,但是在全部情况下,您都需要提供分发密钥。该键决定您的数据如何在整个聚集中分布。而且,没有关于如何选择正确的分发密钥的灵丹灵药。分发密钥的两个最常见的选择是基于哈希的密钥或基于值的密钥。
概括

希望您喜好这篇文章,并在此过程中学到一些新东西。
口试中祝你好运!
(本文由闻数起舞翻译自文章《7 concepts of databases every data engineer should know》,转载请注明出处,原文链接:
https://oleg-agapov.medium.com/7-concepts-of-databases-every-data-engineer-should-know-5ea4a357c149)

murkey 发表于 2021-4-8 14:01:28

转发了

回忆的守护者 发表于 2021-4-9 00:00:32

转发了

那年夏天007 发表于 2021-4-9 21:51:06

转发了
页: [1]
查看完整版本: 每个数据工程师都应该知道的7个数据库概念