摘要:讀取出數(shù)據(jù)時(shí),將此版本號(hào)一同讀出,之后更新時(shí),對(duì)此版本號(hào)加一。此時(shí),將提交數(shù)據(jù)的版本數(shù)據(jù)與數(shù)據(jù)庫(kù)表對(duì)應(yīng)記錄的當(dāng)前版本信息進(jìn)行比對(duì),如果提交的數(shù)據(jù)版本號(hào)大于數(shù)據(jù)庫(kù)表當(dāng)前版本號(hào),則予以更新,否則認(rèn)為是過期數(shù)據(jù)。
前言
很多人都在討論數(shù)據(jù)的指數(shù)型增長(zhǎng),以及我們將會(huì)有比想象的還要大的數(shù)據(jù)量。但是,很少有人從數(shù)據(jù)庫(kù)的角度談?wù)撨@個(gè)問題。隨著數(shù)據(jù)量的暴漲,數(shù)據(jù)庫(kù)也需要隨之升級(jí)。這也是為什么既要了解如何分析海量數(shù)據(jù),也要了解數(shù)據(jù)庫(kù)如何存儲(chǔ)這些數(shù)據(jù)變得越來越重要。
AACID(Atomicity, Consistency, Isolation, Durability)
通常用于SQL數(shù)據(jù)庫(kù),用來形容數(shù)據(jù)庫(kù)事務(wù)的屬性
補(bǔ)充:
Atomicity原子性:一個(gè)事務(wù)的所有操作,要么全部完成,要么全部不完成。不會(huì)結(jié)束在中間某個(gè)階段
Consistency一致性:在事務(wù)開始之前和事務(wù)結(jié)束以后,數(shù)據(jù)庫(kù)的完整性沒有被破壞。表示數(shù)據(jù)庫(kù)寫入的資料必須完全符合所有的預(yù)設(shè)規(guī)則
Isolation隔離性:數(shù)據(jù)庫(kù)允許多個(gè)并發(fā)事務(wù)同時(shí)對(duì)其數(shù)據(jù)進(jìn)行讀寫和修改能力,隔離性可以防止多個(gè)事務(wù)并發(fā)執(zhí)行時(shí)由于交叉執(zhí)行而導(dǎo)致的數(shù)據(jù)不一致。事務(wù)的隔離級(jí)別包括讀未提交(Read uncommitted)、讀提交(read committed)、可重復(fù)讀(repeatable read)和串行化(Serializable)
Durability持久性:對(duì)數(shù)據(jù)的修改是永久的,即使系統(tǒng)故障也不會(huì)丟失因?yàn)橹懊嬖囉斜粏柕竭^數(shù)據(jù)庫(kù)的事務(wù)隔離級(jí)別,所以在這里加深一下印象:
未提交讀:能讀取到其他會(huì)話中未提交事務(wù)修改的數(shù)據(jù)(很少使用)
已提交讀:只能讀取到已經(jīng)提交的數(shù)據(jù),數(shù)據(jù)的讀取都是不加鎖的,但是數(shù)據(jù)的寫入、修改和刪除是需要加鎖的
可重復(fù)讀:在同一個(gè)事務(wù)內(nèi)的查詢都是事務(wù)開始時(shí)刻一致的,InnoDB默認(rèn)級(jí)別。
串行讀:完全串行化的讀,每次讀都需要獲得表級(jí)共享鎖,讀寫相互都會(huì)阻塞
悲觀鎖:對(duì)數(shù)據(jù)被外界(包括本系統(tǒng)當(dāng)前的其他事務(wù),以及來自外部系統(tǒng)的事務(wù)處理)修改持保守態(tài)度,因此,在整個(gè)數(shù)據(jù)處理過程中,將數(shù)據(jù)處于鎖定狀態(tài)。往往依靠數(shù)據(jù)庫(kù)提供的鎖機(jī)制
樂觀鎖:大多是基于數(shù)據(jù)版本( Version )記錄機(jī)制實(shí)現(xiàn)。何謂數(shù)據(jù)版本?即為數(shù)據(jù)增加一個(gè)版本標(biāo)識(shí),在基于數(shù)據(jù)庫(kù)表的版本解決方案中,一般是通過為數(shù)據(jù)庫(kù)表增加一個(gè) “version” 字段來實(shí)現(xiàn)。讀取出數(shù)據(jù)時(shí),將此版本號(hào)一同讀出,之后更新時(shí),對(duì)此版本號(hào)加一。此時(shí),將提交數(shù)據(jù)的版本數(shù)據(jù)與數(shù)據(jù)庫(kù)表對(duì)應(yīng)記錄的當(dāng)前版本信息進(jìn)行比對(duì),如果提交的數(shù)據(jù)版本號(hào)大于數(shù)據(jù)庫(kù)表當(dāng)前版本號(hào),則予以更新,否則認(rèn)為是過期數(shù)據(jù)。
Aggregate 聚合
一組可以被當(dāng)做一個(gè)單元的領(lǐng)域?qū)ο?。適合作為大型分布式系統(tǒng)上的數(shù)據(jù)存儲(chǔ)單元。
BASE(Basic Availability, Soft State, Eventual Consistency)
用來形容數(shù)據(jù)庫(kù)事務(wù)的屬性,尤其是需要管理非結(jié)構(gòu)化數(shù)據(jù)的NoSQL數(shù)據(jù)庫(kù)。約等于放棄CAP屬性中的一致性。
Basic Availability:不保證時(shí)時(shí)刻刻的可用性
Soft State:系統(tǒng)狀態(tài)可能在沒有輸入的情況下會(huì)發(fā)生改變,因?yàn)樾枰_(dá)到最終的一致性
Eventual Consistency:系統(tǒng)會(huì)在一段時(shí)間之后最終達(dá)成一致
B-樹
所有的葉節(jié)點(diǎn)都在同一個(gè)高度,所有的非葉節(jié)點(diǎn)都包含n~2n個(gè)子節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)。它用于優(yōu)化讀寫大量數(shù)據(jù)塊或是大量讀操作。
云原生數(shù)據(jù)庫(kù)
在云上構(gòu)建并運(yùn)行的數(shù)據(jù)庫(kù)
Complex event processing 復(fù)雜事件處理
從多個(gè)流中有組織的收集數(shù)據(jù)進(jìn)行分析和規(guī)劃的過程
Consistency 一致性
數(shù)據(jù)庫(kù)事務(wù)的四個(gè)基本屬性之一,指如果一個(gè)事務(wù)失敗了,那么數(shù)據(jù)將會(huì)返回至最初的狀態(tài)。如果成功了,那么將新建一個(gè)數(shù)據(jù)狀態(tài)。
CAP(Consistency,Availability, Partition Tolerance)
這個(gè)概念通常用于提醒開發(fā)人員在數(shù)據(jù)庫(kù)設(shè)計(jì)中所需要作出的妥協(xié)。
Consistency: 確保分布式集群中每一個(gè)節(jié)點(diǎn)返回相同的且是最近成功寫入的數(shù)據(jù)D
Availability: 每個(gè)沒有當(dāng)?shù)舻墓?jié)點(diǎn)在一段時(shí)間內(nèi)對(duì)每一個(gè)讀寫請(qǐng)求作出相應(yīng)
Partition Tolerant: 盡管存在網(wǎng)絡(luò)分區(qū),系統(tǒng)仍然能正常運(yùn)行并保持一致性
Database clustering 數(shù)據(jù)庫(kù)集群
將兩個(gè)或多個(gè)實(shí)例連接到數(shù)據(jù)庫(kù),通常用于容錯(cuò),負(fù)載均衡和并行處理。
Data management數(shù)據(jù)庫(kù)管理
一個(gè)組織存儲(chǔ),運(yùn)行和分析數(shù)據(jù)的完整的生命周期。
Data mining 數(shù)據(jù)挖掘
在大量數(shù)據(jù)中發(fā)掘模式,并將其轉(zhuǎn)化為可以理解的形式的過程
DBMS 數(shù)據(jù)庫(kù)管理系統(tǒng)
一套用于管理終端用戶和數(shù)據(jù)庫(kù)之間的數(shù)據(jù)的軟件和工具
Distributed system 分布式系統(tǒng)
一組獨(dú)立的計(jì)算機(jī)協(xié)作運(yùn)行,使其看上去好像是一臺(tái)計(jì)算機(jī)在工作。
Document Store
從文檔而不是定義好的table中獲取數(shù)據(jù)的一種數(shù)據(jù)庫(kù),通常會(huì)將文檔數(shù)據(jù)以一種可以搜索的方式展示出來。
ElasticSearch 彈性搜索
一個(gè)基于JAVA的搜索引擎,可以將近實(shí)時(shí)的搜索和索引文件,能夠自動(dòng)索引JSON文檔。
Fault tolerance 容錯(cuò)性
系統(tǒng)能夠在不干擾別的系統(tǒng)的情況下應(yīng)對(duì)硬件或是軟件故障。
Graph store
一種用于處理包含大量關(guān)聯(lián)的數(shù)據(jù)的數(shù)據(jù)庫(kù),比如社交圖,標(biāo)簽系統(tǒng),或是一切富鏈接領(lǐng)域。它還常用于路由和定位服務(wù)。
High availability 高可用性
指及時(shí)出現(xiàn)組件崩潰,也能持續(xù)提供可用資源的系統(tǒng)。它可以通過硬件冗余,軟件方法和其它特殊的策略來實(shí)現(xiàn)。
Hybrid transaction/analytical processing
一種應(yīng)用的架構(gòu),該架構(gòu)據(jù)說突破了事務(wù)處理和分析的高墻,從而支持實(shí)時(shí)決策制定。
In-memory
一個(gè)通用的生產(chǎn)用語(yǔ),通常指將數(shù)據(jù)加載到RAM或是閃存而不是硬盤的數(shù)據(jù)管理工具
Join
SQL術(shù)語(yǔ),在關(guān)系型數(shù)據(jù)庫(kù)中將多個(gè)數(shù)據(jù)庫(kù)用一些列關(guān)聯(lián)起來
Journaling
指實(shí)時(shí)的將數(shù)據(jù)庫(kù)中的所有數(shù)據(jù)更新寫入日志。如果原始數(shù)據(jù)損壞或是刪除,可以用生成的日志恢復(fù)。
JPA(Java Persistent API)
基于JAVA的用于獲取,管理和持久化數(shù)據(jù)的實(shí)現(xiàn)。
Key-value store
一種將數(shù)據(jù)以鍵值對(duì)的形式存儲(chǔ)的數(shù)據(jù)庫(kù)。它用于處理大量小型的,連續(xù)的讀寫操作。
MapReducer
Google創(chuàng)建的一種具有高可擴(kuò)展性的編程模型。
MVCC 多版本同步控制
一種用于處理同時(shí)讀寫數(shù)據(jù)庫(kù)的策略。
InnoDB中MVCC的實(shí)現(xiàn)N
一般我們認(rèn)為MVCC有下面幾個(gè)特點(diǎn):
1.每行數(shù)據(jù)都存在一個(gè)版本,每次數(shù)據(jù)更新時(shí)都更新該版本
2.修改時(shí)Copy出當(dāng)前版本隨意修改,個(gè)事務(wù)之間無干擾
3.保存時(shí)比較版本號(hào),如果成功(commit),則覆蓋原記錄;失敗則放棄copy(rollback)InnoDB的默認(rèn)事務(wù)隔離級(jí)別為可重復(fù)讀(RR),使用行級(jí)鎖
Innodb為每行記錄都實(shí)現(xiàn)了三個(gè)隱藏字段:6字節(jié)的事務(wù)ID(DB_TRX_ID ),7字節(jié)的回滾指針(DB_ROLL_PTR),隱藏的ID
1.事務(wù)以排他鎖的形式修改原始數(shù)據(jù)
2.把修改前的數(shù)據(jù)存放于undo log,通過回滾指針與主數(shù)據(jù)關(guān)聯(lián)
3.修改成功(commit)啥都不做,失敗則恢復(fù)undo log中的數(shù)據(jù)(rollback)
NoSQL
不同于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)結(jié)構(gòu),結(jié)合了傳統(tǒng)SQL以外的查詢手段的一類數(shù)據(jù)庫(kù)。
ORM
使用面向?qū)ο缶幊陶Z(yǔ)言而非數(shù)據(jù)庫(kù)語(yǔ)言將數(shù)據(jù)在不兼容的系統(tǒng)之間進(jìn)行轉(zhuǎn)化的一種工具。
Parallelism
操作系統(tǒng)能夠相互協(xié)作來解決一個(gè)問題的狀態(tài)
Sharding 分表
也可以成為水平分割,將數(shù)據(jù)庫(kù)分割為幾個(gè)片段,通常用來提升數(shù)據(jù)庫(kù)的速度和可靠性
Wide-column store
又被稱為大數(shù)據(jù)倉(cāng)庫(kù),這些數(shù)據(jù)庫(kù)以記錄的形式存儲(chǔ)數(shù)據(jù),而且能夠保存大量的動(dòng)態(tài)列。列的名稱和鍵不是固定的
原文鏈接在這里。
其中還有一些新興的名詞在文中并沒有提及,一方面是因?yàn)椴皇煜じ杏X翻譯會(huì)有偏差,另一方面是希望面向面試來了解相關(guān)的詞匯。
后序還會(huì)在這里更新一些其他的感覺比較重要的數(shù)據(jù)庫(kù)概念。
參考文件Innodb中的事務(wù)隔離級(jí)別和鎖的關(guān)系
ACID vs BASE
理解CAP理論
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/17676.html
摘要:因此,誤解幾乎是與之俱來的。這是完全錯(cuò)誤的。就像所強(qiáng)調(diào)的,對(duì)于一個(gè)被稱作的來說,狀態(tài)轉(zhuǎn)移管理是一個(gè)必須要完成的需求。你可以將其稱為或是,但是請(qǐng)不要把它叫做。 2000年的時(shí)候,Douglas Crockford聲明JavaScript是最被誤解的編程語(yǔ)言。這種誤解來源于不良的命名規(guī)范,錯(cuò)誤設(shè)計(jì),非標(biāo)準(zhǔn)模式等等。因此,誤解幾乎是與之俱來的。 我也在關(guān)于Restful架構(gòu)上發(fā)表了一個(gè)相似的...
摘要:是指可能導(dǎo)致程序終止的非常嚴(yán)重的時(shí)間。具有最高的級(jí)別,旨在關(guān)閉中的日志功能。因此為每一個(gè)消息選擇一個(gè)合適的日志級(jí)別是非常重要的。日志的個(gè)小建議將日志訪日代碼塊它能顯著的減少因?yàn)樽址唇佣鴰淼男阅艿挠绊憽? 前言 首先,這篇文章沒有進(jìn)行任何的日志功能的詳細(xì)介紹,而是對(duì)日志提出了幾種最佳實(shí)踐。適合對(duì)日志記錄有所了解的同學(xué)閱讀。下面是正文: JAVA日志管理既是一門科學(xué),又是一門藝術(shù)。科學(xué)...
摘要:否則它就會(huì)用新的值替代當(dāng)前值。在這種情況下,鎖可能會(huì)優(yōu)于原子變量,但在實(shí)際的爭(zhēng)用級(jí)別中,原子變量的性能優(yōu)于鎖。在中引入了另外一個(gè)構(gòu)件。 題目要求 在我們深入了解CAS(Compare And Swap)策略以及它是如何在AtomicInteger這樣的原子構(gòu)造器中使用的,首先來看一下這段代碼: public class MyApp { private volatile int ...
閱讀 2424·2021-11-24 11:16
閱讀 2139·2021-09-30 09:47
閱讀 2069·2021-09-10 10:51
閱讀 1366·2019-08-30 14:08
閱讀 3189·2019-08-30 13:47
閱讀 1588·2019-08-30 13:02
閱讀 3270·2019-08-29 12:29
閱讀 3315·2019-08-26 17:05