时间:2021-05-02
如果您准备接受数据工程职位面试,则必须了解数据库的所有主要概念。这不是点击诱饵。几个月前,我进行了几次数据工程访谈,所有访谈都涉及我在本文中提到的主题的问题。即使您没有准备面试,您仍然可能想检查一下这些概念并刷新一下。
此外,这将是没有用的升数据工程师Y,而是各种各样的专业工作与数据库中的数据:数据科学家,ML-工程师,软件开发等等。
我的名字叫Oleg,是我在GitHub上发布的开源“数据工程书”的作者。我将尝试尽可能简单地解释数据库的7个主要概念。这些概念是:
让我们开始吧!
关系模型是一种结构化和管理数据的方法。
在此模型中,数据被组织到表中。每个表都有一个架构。这意味着它具有预定义的列表,因此只能将满足模式的数据写入表中。此外,每一列都有一种数据类型(数字,字符串,布尔值等)。表的列通常称为字段,行称为记录。
在最初的数据库理论中,表称为“关系”,因此称为模型。不要将此定义与表之间的关系混淆,在表之间我们通常使用键来定义这种关系。我们将在本文后面讨论键。
最后,遵循此模型的数据库称为关系数据库。关系数据库使用SQL(结构化查询语言)访问它们存储的数据。
规范化是使您的数据适合于关系数据库的过程。
有时,标准化被称为删除数据冗余的过程。通常,此定义通常易于解释和理解。规范化有助于对抗数据冗余,提高数据完整性,简化数据结构,帮助发现错误。
规范化过程是通过应用两种方法完成的:
考虑下面的例子。想象一下,您经营一家电子商店,并在Excel电子表格中记下了每笔采购。它可能看起来像这样:
尽管这样的数据结构在Excel中是可以接受的,但是如果您以1对1的方式将其插入数据库中,则可能会导致一些问题:
数据规范化将使此类购买日志变成如下所示:
在这种结构中,添加,更新和删除条目将变得更加容易。而且,由于我们将重复的数据替换为标识符并将它们存储在单独的表中,因此它将减少硬盘驱动器上的空间。
这样的标准化不是唯一的。有一些规则描述规范化级别。数据有6种普通形式,每种形式都有其自己的一组规则和对数据结构的限制。
主键是表中记录的唯一标识符。
当我们想与另一个表建立关系时,需要这样的键。当table的列包含对另一个表的引用时,该列将成为外键。
例如,如果我们有一个customers表,该表的列名为customer_id,则它是该表的主键。与此同时,如果表中orders有CUSTOMER_ID列引用在这一领域的customers表,它成为一个外键的orders表。
索引是数据库内部的一个特殊对象,有助于在数据内部进行快速搜索。
假设您有一个包含数百万条记录的大表,并且需要查找该表的满足特定条件的子集,例如,特定客户有多少订单。通常,记录不带order插入到表中。因此,要执行搜索,数据库将需要进行全面扫描,这意味着它将从头到尾逐行进行直到找到所需的行。
为了加快该过程,我们可以为搜索到的列建立索引。这样的索引将存储表中列的每个值的位置。因此,当使用索引列执行搜索时,数据库将首先搜索索引以查找数据的位置,然后才使用这些位置提取所需的行。
术语“交易”通常是指不可分割的工作单元。当我们想要在数据库中执行多个操作并且想要确保所有操作一次成功还是失败时,它是必需的。
交易的经典示例是银行转账,当您需要将资金从一个帐户转移到另一个帐户时。基本上,涉及三个步骤:
如果银行应用程序开始了转帐过程,则必须保证这三个操作全部成功或全部失败。
为了确保数据库中可以进行事务处理,数据库应满足一组要求,即ACID缩写。
ACID代表原子性,一致性,隔离性,耐久性。
原子性是保证操作(工作单元)将被完全执行的保证。换句话说,必须成功执行或完全不执行对数据的所有更改。
一致性是指在事务处理之前和之后,数据应处于一致状态。该规则的执行完全由业务逻辑承担。回想一下银行转帐的示例:如果我们从帐户#1减去$ 100,则无法向帐户#2添加$ 200,因为这会导致不一致。
隔离意味着并行事务不应影响彼此的结果。对于数据库而言,此要求非常昂贵,因此在某些数据库中存在不同级别的隔离。
最后,持久性保证了操作结果可以持久保存在数据库中,并且不会丢失。例如,如果用户收到事务已完成的响应,则可以确保不会因为系统故障或其他中断而放弃所做的更改。
复制是将数据库同步到其他节点或服务器。换句话说,复制是将我们的数据从一个来源复制到另一个来源的过程。
如果我们的数据主副本会发生问题,那么复制可以使我们免受数据丢失的困扰。例如,如果我们的数据库正在停机(例如,缺少网络或中断),则我们的应用程序将无法运行,因为它没有任何数据可显示给用户。
副本可以在两种模式下工作:同步和异步。
顾名思义,同步模式是指副本应用与主实例相同的更改,并且仅在该用户从数据库获得响应之后。同步模式具有一致的数据,但响应时间通常较慢。
在异步模式下,主服务器不等待副本的响应,而是立即将操作结果发送回用户。异步模式可能会有一些数据延迟(不一致),但是响应速度非常快。
分片是一种通过某些键拆分表中数据并将不同部分发送到不同节点的方法。
分片是水平缩放。我们将一个表分成几个逻辑分区。每个分区的架构都是相同的(因为我们按行而不是按列划分数据)。每个分区代表表的逻辑分片。
在不同节点之间分布后,它们成为物理碎片。数据库的一个节点可以容纳多个逻辑分片。
如何实现分片?共有三种常见方法:
有很多方法可以实现分片,但是在所有情况下,您都需要提供分发密钥。该键决定您的数据如何在整个群集中分布。而且,没有关于如何选择正确的分发密钥的灵丹妙药。分发密钥的两个最常见的选择是基于哈希的密钥或基于值的密钥。
原文地址:https://www.toutiao.com/i6948579774667276811/
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
在任何一个数据库中,查询优化都是不可避免的一个话题。对于数据库工程师来说,优化工作是最有挑战性的工作。MySQL开源数据库也不例外。其实笔者认为,数据库优化
一、概述:数据库可以被看成是SQL对象(数据库对象)的命名集合,通常而言,每个数据库对象(表、函数等)只属于一个数据库。不过对于部分系统表而言,如pg_data
要想知道每个数据库的大小的话,步骤如下:1、进入information_schema数据库(存放了其他的数据库的信息)useinformation_schema
MongoDB是一个跨平台的,面向文档的数据库,提供高性能,高可用性和可扩展性方便。MongoDB工作在收集和文件的概念。数据库数据库是一个物理容器集合。每个数
根据研发的内容不同,数据库开发工程师可以分为两大发展方向:数据库内核研发和数据库应用软件研发: a)数据库内核研发:主要负责设计和研发数据库管理系统,