自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

每個(gè)數(shù)據(jù)工程師都應(yīng)該知道的7個(gè)數(shù)據(jù)庫概念

數(shù)據(jù)庫 其他數(shù)據(jù)庫
如果您準(zhǔn)備接受數(shù)據(jù)工程職位面試,則必須了解數(shù)據(jù)庫的所有主要概念。我將嘗試盡可能簡(jiǎn)單地解釋數(shù)據(jù)庫的7個(gè)主要概念。

如果您準(zhǔn)備接受數(shù)據(jù)工程職位面試,則必須了解數(shù)據(jù)庫的所有主要概念。這不是點(diǎn)擊誘餌。幾個(gè)月前,我進(jìn)行了幾次數(shù)據(jù)工程訪談,所有訪談都涉及我在本文中提到的主題的問題。即使您沒有準(zhǔn)備面試,您仍然可能想檢查一下這些概念并刷新一下。

[[391849]]

此外,這將是沒有用的升數(shù)據(jù)工程師Y,而是各種各樣的專業(yè)工作與數(shù)據(jù)庫中的數(shù)據(jù):數(shù)據(jù)科學(xué)家,ML-工程師,軟件開發(fā)等等。

我的名字叫Oleg,是我在GitHub上發(fā)布的開源“數(shù)據(jù)工程書”的作者。我將嘗試盡可能簡(jiǎn)單地解釋數(shù)據(jù)庫的7個(gè)主要概念。這些概念是:

  • 關(guān)系模型
  • 數(shù)據(jù)歸一化
  • 主鍵和外鍵
  • 指標(biāo)
  • 交易
  • 復(fù)制
  • 分片

讓我們開始吧!

關(guān)系模型

關(guān)系模型是一種結(jié)構(gòu)化和管理數(shù)據(jù)的方法。

在此模型中,數(shù)據(jù)被組織到表中。每個(gè)表都有一個(gè)架構(gòu)。這意味著它具有預(yù)定義的列表,因此只能將滿足模式的數(shù)據(jù)寫入表中。此外,每一列都有一種數(shù)據(jù)類型(數(shù)字,字符串,布爾值等)。表的列通常稱為字段,行稱為記錄。

在最初的數(shù)據(jù)庫理論中,表稱為“關(guān)系”,因此稱為模型。不要將此定義與表之間的關(guān)系混淆,在表之間我們通常使用鍵來定義這種關(guān)系。我們將在本文后面討論鍵。

最后,遵循此模型的數(shù)據(jù)庫稱為關(guān)系數(shù)據(jù)庫。關(guān)系數(shù)據(jù)庫使用SQL(結(jié)構(gòu)化查詢語言)訪問它們存儲(chǔ)的數(shù)據(jù)。

數(shù)據(jù)歸一化

規(guī)范化是使您的數(shù)據(jù)適合于關(guān)系數(shù)據(jù)庫的過程。

有時(shí),標(biāo)準(zhǔn)化被稱為刪除數(shù)據(jù)冗余的過程。通常,此定義通常易于解釋和理解。規(guī)范化有助于對(duì)抗數(shù)據(jù)冗余,提高數(shù)據(jù)完整性,簡(jiǎn)化數(shù)據(jù)結(jié)構(gòu),幫助發(fā)現(xiàn)錯(cuò)誤。

規(guī)范化過程是通過應(yīng)用兩種方法完成的:

  • 綜合(例如,創(chuàng)建以前不存在的新項(xiàng)目)或
  • 分解(通過拆分成較小的部分來改善現(xiàn)有數(shù)據(jù)結(jié)構(gòu))

考慮下面的例子。想象一下,您經(jīng)營(yíng)一家電子商店,并在Excel電子表格中記下了每筆采購。它可能看起來像這樣:

盡管這樣的數(shù)據(jù)結(jié)構(gòu)在Excel中是可以接受的,但是如果您以1對(duì)1的方式將其插入數(shù)據(jù)庫中,則可能會(huì)導(dǎo)致一些問題:

  • 數(shù)據(jù)是多余的。例如,您是否真的需要在這里輸入客戶的姓名?也許電子郵件就足夠了,名稱可以存儲(chǔ)在單獨(dú)的表中。
  • 查詢此類數(shù)據(jù)將很困難。例如,您能否說說您買了幾部iPhone,以及以什么價(jià)格出售?不可以,因?yàn)?ldquo;總價(jià)”已經(jīng)是合計(jì)價(jià)值,并且您不知道購物車中每件商品的成本。
  • 數(shù)據(jù)更新和刪除非常困難。讓我們考慮包含兩個(gè)項(xiàng)目的第一筆訂單,并假設(shè)客戶已決定退回一個(gè)項(xiàng)目。在此類表格中反映此更改的最佳方法是什么?

數(shù)據(jù)規(guī)范化將使此類購買日志變成如下所示:

在這種結(jié)構(gòu)中,添加,更新和刪除條目將變得更加容易。而且,由于我們將重復(fù)的數(shù)據(jù)替換為標(biāo)識(shí)符并將它們存儲(chǔ)在單獨(dú)的表中,因此它將減少硬盤驅(qū)動(dòng)器上的空間。

這樣的標(biāo)準(zhǔn)化不是唯一的。有一些規(guī)則描述規(guī)范化級(jí)別。數(shù)據(jù)有6種普通形式,每種形式都有其自己的一組規(guī)則和對(duì)數(shù)據(jù)結(jié)構(gòu)的限制。

主鍵和外鍵

主鍵是表中記錄的唯一標(biāo)識(shí)符。

當(dāng)我們想與另一個(gè)表建立關(guān)系時(shí),需要這樣的鍵。當(dāng)table的列包含對(duì)另一個(gè)表的引用時(shí),該列將成為外鍵。

例如,如果我們有一個(gè)customers表,該表的列名為customer_id,則它是該表的主鍵。與此同時(shí),如果表中orders有CUSTOMER_ID列引用在這一領(lǐng)域的customers表,它成為一個(gè)外鍵的orders表。

索引

索引是數(shù)據(jù)庫內(nèi)部的一個(gè)特殊對(duì)象,有助于在數(shù)據(jù)內(nèi)部進(jìn)行快速搜索。

假設(shè)您有一個(gè)包含數(shù)百萬條記錄的大表,并且需要查找該表的滿足特定條件的子集,例如,特定客戶有多少訂單。通常,記錄不帶order插入到表中。因此,要執(zhí)行搜索,數(shù)據(jù)庫將需要進(jìn)行全面掃描,這意味著它將從頭到尾逐行進(jìn)行直到找到所需的行。

為了加快該過程,我們可以為搜索到的列建立索引。這樣的索引將存儲(chǔ)表中列的每個(gè)值的位置。因此,當(dāng)使用索引列執(zhí)行搜索時(shí),數(shù)據(jù)庫將首先搜索索引以查找數(shù)據(jù)的位置,然后才使用這些位置提取所需的行。

交易

術(shù)語“交易”通常是指不可分割的工作單元。當(dāng)我們想要在數(shù)據(jù)庫中執(zhí)行多個(gè)操作并且想要確保所有操作一次成功還是失敗時(shí),它是必需的。

交易的經(jīng)典示例是銀行轉(zhuǎn)賬,當(dāng)您需要將資金從一個(gè)帳戶轉(zhuǎn)移到另一個(gè)帳戶時(shí)。基本上,涉及三個(gè)步驟:

  • 檢查帳戶1是否存在所請(qǐng)求的金額
  • 從帳戶#1中減去所需的金額
  • 將所需金額添加到帳戶2

如果銀行應(yīng)用程序開始了轉(zhuǎn)帳過程,則必須保證這三個(gè)操作全部成功或全部失敗。

為了確保數(shù)據(jù)庫中可以進(jìn)行事務(wù)處理,數(shù)據(jù)庫應(yīng)滿足一組要求,即ACID縮寫。

ACID代表原子性,一致性,隔離性,耐久性。

原子性是保證操作(工作單元)將被完全執(zhí)行的保證。換句話說,必須成功執(zhí)行或完全不執(zhí)行對(duì)數(shù)據(jù)的所有更改。

一致性是指在事務(wù)處理之前和之后,數(shù)據(jù)應(yīng)處于一致狀態(tài)。該規(guī)則的執(zhí)行完全由業(yè)務(wù)邏輯承擔(dān)?;叵胍幌裸y行轉(zhuǎn)帳的示例:如果我們從帳戶#1減去$ 100,則無法向帳戶#2添加$ 200,因?yàn)檫@會(huì)導(dǎo)致不一致。

隔離意味著并行事務(wù)不應(yīng)影響彼此的結(jié)果。對(duì)于數(shù)據(jù)庫而言,此要求非常昂貴,因此在某些數(shù)據(jù)庫中存在不同級(jí)別的隔離。

最后,持久性保證了操作結(jié)果可以持久保存在數(shù)據(jù)庫中,并且不會(huì)丟失。例如,如果用戶收到事務(wù)已完成的響應(yīng),則可以確保不會(huì)因?yàn)橄到y(tǒng)故障或其他中斷而放棄所做的更改。

副本

復(fù)制是將數(shù)據(jù)庫同步到其他節(jié)點(diǎn)或服務(wù)器。換句話說,復(fù)制是將我們的數(shù)據(jù)從一個(gè)來源復(fù)制到另一個(gè)來源的過程。

如果我們的數(shù)據(jù)主副本會(huì)發(fā)生問題,那么復(fù)制可以使我們免受數(shù)據(jù)丟失的困擾。例如,如果我們的數(shù)據(jù)庫正在停機(jī)(例如,缺少網(wǎng)絡(luò)或中斷),則我們的應(yīng)用程序?qū)o法運(yùn)行,因?yàn)樗鼪]有任何數(shù)據(jù)可顯示給用戶。

  • 復(fù)制給我們帶來了什么:
  • 副本是我們數(shù)據(jù)庫的完整副本
  • 主副本中的更改立即應(yīng)用于副本
  • 如果主數(shù)據(jù)庫關(guān)閉,則所有傳入請(qǐng)求都可以重定向到副本
  • 所有添加/更新/刪除請(qǐng)求都路由到主數(shù)據(jù)庫,但所有讀取都復(fù)制到副本數(shù)據(jù)庫的常見情況,為這種體系結(jié)構(gòu)提供了很好的負(fù)載平衡

副本可以在兩種模式下工作:同步和異步。

顧名思義,同步模式是指副本應(yīng)用與主實(shí)例相同的更改,并且僅在該用戶從數(shù)據(jù)庫獲得響應(yīng)之后。同步模式具有一致的數(shù)據(jù),但響應(yīng)時(shí)間通常較慢。

在異步模式下,主服務(wù)器不等待副本的響應(yīng),而是立即將操作結(jié)果發(fā)送回用戶。異步模式可能會(huì)有一些數(shù)據(jù)延遲(不一致),但是響應(yīng)速度非常快。

分片

分片是一種通過某些鍵拆分表中數(shù)據(jù)并將不同部分發(fā)送到不同節(jié)點(diǎn)的方法。

分片是水平縮放。我們將一個(gè)表分成幾個(gè)邏輯分區(qū)。每個(gè)分區(qū)的架構(gòu)都是相同的(因?yàn)槲覀儼葱卸皇前戳袆澐謹(jǐn)?shù)據(jù))。每個(gè)分區(qū)代表表的邏輯分片。

在不同節(jié)點(diǎn)之間分布后,它們成為物理碎片。數(shù)據(jù)庫的一個(gè)節(jié)點(diǎn)可以容納多個(gè)邏輯分片。

如何實(shí)現(xiàn)分片?共有三種常見方法:

  • 在應(yīng)用程序級(jí)別上。基本上,知道所需數(shù)據(jù)的存儲(chǔ)位置是您應(yīng)用程序的工作。
  • 在數(shù)據(jù)庫級(jí)別上。數(shù)據(jù)庫本身決定將數(shù)據(jù)放置在哪個(gè)節(jié)點(diǎn)上。當(dāng)然,它不是自動(dòng)完成的,因?yàn)閿?shù)據(jù)庫需要預(yù)先提供正確的配置。
  • 使用外部協(xié)調(diào)服務(wù)。在這里,您將分片外包給第三方服務(wù),該服務(wù)決定數(shù)據(jù)的存儲(chǔ)位置。您的應(yīng)用程序使用此服務(wù)而不是數(shù)據(jù)庫。

有很多方法可以實(shí)現(xiàn)分片,但是在所有情況下,您都需要提供分發(fā)密鑰。該鍵決定您的數(shù)據(jù)如何在整個(gè)群集中分布。而且,沒有關(guān)于如何選擇正確的分發(fā)密鑰的靈丹妙藥。分發(fā)密鑰的兩個(gè)最常見的選擇是基于哈希的密鑰或基于值的密鑰。

 

責(zé)任編輯:趙寧寧 來源: 今日頭條
相關(guān)推薦

2018-03-01 14:30:22

數(shù)據(jù)科學(xué)概率分布

2023-09-14 10:20:56

前端布局自適應(yīng)

2022-02-07 14:00:27

數(shù)據(jù)分析模型

2022-12-06 17:07:40

2019-11-20 12:09:01

JavaScriptGitHub工具

2019-05-21 16:19:46

前端性能優(yōu)化圖片

2020-12-14 12:54:07

數(shù)據(jù)類型數(shù)據(jù)分析數(shù)據(jù)科學(xué)

2014-02-12 09:31:53

2022-04-27 09:48:56

JS前端開發(fā)

2017-07-20 01:59:19

大數(shù)據(jù)算法數(shù)據(jù)

2018-05-03 08:45:58

Linux命令

2020-09-29 17:15:41

數(shù)據(jù)科學(xué)技術(shù)

2024-10-21 13:15:03

2023-04-10 14:45:43

2012-02-28 10:52:13

2018-03-07 12:57:53

2021-03-17 08:27:23

數(shù)據(jù)科學(xué)家數(shù)據(jù)科學(xué)

2023-03-21 18:46:53

2017-04-05 12:04:17

python函數(shù)

2020-01-14 08:28:50

Linux命令程序
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)