不少人都在討論數據的指數型增加,以及咱們將會有比想象的還要大的數據量。可是,不多有人從數據庫的角度談論這個問題。隨着數據量的暴漲,數據庫也須要隨之升級。這也是爲何既要了解如何分析海量數據,也要了解數據庫如何存儲這些數據變得愈來愈重要。html
ACID(Atomicity, Consistency, Isolation, Durability)
一般用於SQL數據庫,用來形容數據庫事務的屬性
補充:面試
Atomicity原子性
:一個事務的全部操做,要麼所有完成,要麼所有不完成。不會結束在中間某個階段
Consistency一致性
:在事務開始以前和事務結束之後,數據庫的完整性沒有被破壞。表示數據庫寫入的資料必須徹底符合全部的預設規則
Isolation隔離性
:數據庫容許多個併發事務同時對其數據進行讀寫和修改能力,隔離性能夠防止多個事務併發執行時因爲交叉執行而致使的數據不一致。事務的隔離級別包括 讀未提交(Read uncommitted)、讀提交(read committed)、可重複讀(repeatable read)和串行化(Serializable)
Durability持久性
:對數據的修改是永久的,即便系統故障也不會丟失由於以前面試有被問到過數據庫的事務隔離級別,因此在這裏加深一下印象:
未提交讀
:能讀取到其餘會話中未提交事務修改的數據(不多使用)已提交讀
:只能讀取到已經提交的數據,數據的讀取都是不加鎖的,可是數據的寫入、修改和刪除是須要加鎖的可重複讀
:在同一個事務內的查詢都是事務開始時刻一致的,InnoDB默認級別。串行讀
:徹底串行化的讀,每次讀都須要得到表級共享鎖,讀寫相互都會阻塞悲觀鎖
:對數據被外界(包括本系統當前的其餘事務,以及來自外部系統的事務處理)修改持保守態度,所以,在整個數據處理過程當中,將數據處於鎖定狀態。每每依靠數據庫提供的鎖機制樂觀鎖
:大可能是基於數據版本( Version )記錄機制實現。何謂數據版本?即爲數據增長一個版本標識,在基於數據庫表的版本解決方案中,通常是經過爲數據庫表增長一個 「version」 字段來實現。讀取出數據時,將此版本號一同讀出,以後更新時,對此版本號加一。此時,將提交數據的版本數據與數據庫表對應記錄的當前版本信息進行比對,若是提交的數據版本號大於數據庫表當前版本號,則予以更新,不然認爲是過時數據。數據庫
Aggregate 聚合
一組能夠被當作一個單元的領域對象。適合做爲大型分佈式系統上的數據存儲單元。編程
BASE(Basic Availability, Soft State, Eventual Consistency)
用來形容數據庫事務的屬性,尤爲是須要管理非結構化數據的NoSQL數據庫。約等於放棄CAP屬性中的一致性。網絡
Basic Availability
:不保證時時刻刻的可用性
Soft State
:系統狀態可能在沒有輸入的狀況下會發生改變,由於須要達到最終的一致性
Eventual Consistency
:系統會在一段時間以後最終達成一致
B-樹
全部的葉節點都在同一個高度,全部的非葉節點都包含n~2n個子節點的數據結構。它用於優化讀寫大量數據塊或是大量讀操做。數據結構
雲原生數據庫
在雲上構建並運行的數據庫架構
Complex event processing 復瑣事件處理
從多個流中有組織的收集數據進行分析和規劃的過程併發
Consistency 一致性
數據庫事務的四個基本屬性之一,指若是一個事務失敗了,那麼數據將會返回至最初的狀態。若是成功了,那麼將新建一個數據狀態。負載均衡
CAP(Consistency,Availability, Partition Tolerance)
這個概念一般用於提醒開發人員在數據庫設計中所須要做出的妥協。數據庫設計
Consistency: 確保分佈式集羣中每個節點返回相同的且是最近成功寫入的數據
Availability: 每一個沒有當掉的節點在一段時間內對每個讀寫請求做出相應
Partition Tolerant: 儘管存在網絡分區,系統仍然能正常運行並保持一致性
Database clustering 數據庫集羣
將兩個或多個實例鏈接到數據庫,一般用於容錯,負載均衡和並行處理。
Data management數據庫管理
一個組織存儲,運行和分析數據的完整的生命週期。
Data mining 數據挖掘
在大量數據中發掘模式,並將其轉化爲能夠理解的形式的過程
DBMS 數據庫管理系統
一套用於管理終端用戶和數據庫之間的數據的軟件和工具
Distributed system 分佈式系統
一組獨立的計算機協做運行,使其看上去好像是一臺計算機在工做。
Document Store
從文檔而不是定義好的table中獲取數據的一種數據庫,一般會將文檔數據以一種能夠搜索的方式展現出來。
ElasticSearch 彈性搜索
一個基於JAVA的搜索引擎,能夠將近實時的搜索和索引文件,可以自動索引JSON文檔。
Fault tolerance 容錯性
系統可以在不干擾別的系統的狀況下應對硬件或是軟件故障。
Graph store
一種用於處理包含大量關聯的數據的數據庫,好比社交圖,標籤系統,或是一切富連接領域。它還經常使用於路由和定位服務。
High availability 高可用性
指及時出現組件崩潰,也能持續提供可用資源的系統。它能夠經過硬件冗餘,軟件方法和其它特殊的策略來實現。
Hybrid transaction/analytical processing
一種應用的架構,該架構聽說突破了事務處理和分析的高牆,從而支持實時決策制定。
In-memory
一個通用的生產用語,一般指將數據加載到RAM或是閃存而不是硬盤的數據管理工具
Join
SQL術語,在關係型數據庫中將多個數據庫用一些列關聯起來
Journaling
指實時的將數據庫中的全部數據更新寫入日誌。若是原始數據損壞或是刪除,能夠用生成的日誌恢復。
JPA(Java Persistent API)
基於JAVA的用於獲取,管理和持久化數據的實現。
Key-value store
一種將數據以鍵值對的形式存儲的數據庫。它用於處理大量小型的,連續的讀寫操做。
MapReducer
Google建立的一種具備高可擴展性的編程模型。
MVCC 多版本同步控制
一種用於處理同時讀寫數據庫的策略。
InnoDB中MVCC的實現
通常咱們認爲MVCC有下面幾個特色:
1.每行數據都存在一個版本,每次數據更新時都更新該版本
2.修改時Copy出當前版本隨意修改,個事務之間無干擾
3.保存時比較版本號,若是成功(commit),則覆蓋原記錄;失敗則放棄copy(rollback)InnoDB的默認事務隔離級別爲可重複讀(RR),使用行級鎖
Innodb爲每行記錄都實現了三個隱藏字段:6字節的事務ID(DB_TRX_ID ),7字節的回滾指針(DB_ROLL_PTR),隱藏的ID
1.事務以排他鎖的形式修改原始數據
2.把修改前的數據存放於undo log,經過回滾指針與主數據關聯
3.修改爲功(commit)啥都不作,失敗則恢復undo log中的數據(rollback)
NoSQL
不一樣於傳統的關係型數據庫結構,結合了傳統SQL之外的查詢手段的一類數據庫。
ORM
使用面向對象編程語言而非數據庫語言將數據在不兼容的系統之間進行轉化的一種工具。
Parallelism
操做系統可以相互協做來解決一個問題的狀態
Sharding 分表
也能夠成爲水平分割,將數據庫分割爲幾個片斷,一般用來提高數據庫的速度和可靠性
Wide-column store
又被稱爲大數據倉庫,這些數據庫以記錄的形式存儲數據,並且可以保存大量的動態列。列的名稱和鍵不是固定的
原文連接在這裏。
其中還有一些新興的名詞在文中並無說起,一方面是由於不熟悉感受翻譯會有誤差,另外一方面是但願面向面試來了解相關的詞彙。
後序還會在這裏更新一些其餘的感受比較重要的數據庫概念。
Innodb中的事務隔離級別和鎖的關係
ACID vs BASE
理解CAP理論