數據庫相關概念梳理(walker)

Normalization/Denormalization

本節內容主要摘自: 阮一鳴《 Elasticsearch核心技術與實戰》第 49 課·對象及Nested對象

範式化設計

Normalization 概念

設計關係數據庫時,聽從不一樣的規範要求,設計出合理的關係型數據庫,這些不一樣的規範要求被稱爲不一樣的範式,各類範式呈遞次規範,越高的範式數據庫冗餘越小。html

Normalization 優勢

  • 節省存儲空間,並減小不必要的更新

Normalization 缺點

  • 查詢緩慢:⼀個徹底範式化設計的數據庫會常常⾯面臨「查詢緩慢」的問題,由於數據庫越範式化,就須要 Join 越多的表

幾種範式

  • 第一範式:1NF(First Normal Form)

消除非主屬性對鍵的部分函數依賴算法

  • 第二範式:2NF(Second Normal Form)

消除非主要屬性對鍵的傳遞函數依賴數據庫

  • 第三範式:3NF(Third Normal Form)

消除主屬性對鍵的傳遞函數依賴緩存

  • BC範式:BCNF(Boyce-Codd Normal Form)

主屬性不依賴於主屬性網絡

反範式化設計

Denormalization 概念

數據 「Flattening」,不使用關聯關係,⽽而是在文檔中保存冗餘的數據拷貝數據結構

Denormalization 優勢

  • 讀取性能好,查詢快,無需 join 操做

Denormalization 缺點

  • 浪費空間
  • 一條數據的改動,可能會引發不少數據的更新

小結

  • 關係型數據庫通常優先考慮範式化設計
  • 非關係型數據庫通常優先考慮反範式化設計
  • 範式化設計節省了存儲空間,可是存儲空間卻愈來愈便宜;範式化簡化了更新,可是數據「讀」取操做可能更多
  • 反範式化設計數據庫會經過壓縮儘可能減小空間佔用,如 Elasticsearch 經過壓縮 _source 字段,減小磁盤空間的開銷

數據庫事務

本節內容主要摘自: 理解數據庫的事務,ACID,CAP和一致性

事務的概念

數據庫事務(Database Transaction,簡稱「事務」)是數據庫管理系統執行過程當中的一個邏輯單位,由一個有限的數據庫操做序列構成。這個過程當中的全部操做要麼都成功,要麼都不成功。併發

ACID

ACID 是事務的四個特性,指的是atomicity,原子性;consistency,一致性;isolation,隔離性;durability,持久性。less

原子性(Atomicity)

指全部在事務中的操做要麼都成功,要麼都不成功,全部的操做都不可分割,沒有中間狀態。一旦某一步執行失敗,就會所有回滾到初始狀態。分佈式

一致性(Consistency)

指的是邏輯上的一致性,即全部操做是符合現實當中的指望的。具體參考下一節函數

隔離性(Isolation)

即不一樣事務之間的相互影響和隔離的程度。好比,不一樣的隔離級別,事務的併發程度也不一樣,最強的隔離狀態是全部的事務都是串行化的(serializable)(即一個事務完成以後才能進行下一個事務),這樣併發性也會降到最低,在保證了強一致性的狀況下,性能也會受很大影響,因此在實際工程當中,每每會折中一下。

持久性(Durability)

能夠簡單地理解爲事務執行完畢後數據不可逆並持久化存儲於存儲系統當中

CAP

CAP 理論主要是針對分佈式存儲系統的,C 是指 Consistency 一致性,A 是指 Availability 可用性,P 是指Partition tolerance 分區容忍性。CAP 定理認爲分佈式系統中這三個特性最多隻能同時知足兩個特性。
CAP

一致性(Consistency)

指在分佈式系統中的全部數據備份,在同一時刻是否一樣的值。(等同於全部節點訪問同一份最新的數據副本)

可用性(Availability)

在集羣中一部分節點故障後,集羣總體是否還能響應客戶端的讀寫請求。(對數據更新具有高可用性)

分區容忍性(Partition tolerance)

即當節點之間沒法正常通訊時,就產生了分區,而分區產生後,依然可以保證服務可用,那麼咱們就說系統是分區容忍的。顯然若是節點越多,且備份越多,分區容忍度就越高(由於即使是其中一個或多個節點掛了,仍然有其它節點和備份可用)。

理解一致性(此 C 非 彼 C)

實際上咱們一般說的數據庫事務的一致性和分佈式系統的一致性並非一個概念。這裏能夠區分紅「內部一致性」和「外部一致性」。「內部一致性」搞數據庫的人不多這麼說,通常就直接說一致性,更準確的說是「Consistency in ACID」(「事務 ACID 屬性中的一致性」);「外部一致性」是針對分佈式系統而言的,分佈式領域說起的 Consistency 表示系統的正確性模型,著名的也是臭名昭著的 CAP 理論中的 C 就是這個範疇的。這主要是因爲分佈式系統寫入和讀取均可能不在同一臺機器上,而這必然會有一段時間致使不一樣機器上所存的數據不一致的狀況,這就是所謂的「不一致時間窗口」。

NoSQL 的四大類型

本節摘自: NoSQL的四大類型

鍵值數據庫

  • 相關產品:Redis、Riak、SimpleDB、Chordless、Scalaris、Memcached
  • 應用:內容緩存
  • 優勢:擴展性好、靈活性好、大量寫操做時性能高
  • 缺點:沒法存儲結構化信息、條件查詢效率較低
  • 使用者:百度雲(Redis)、GitHub(Riak)、BestBuy(Riak)、Twitter(Ridis和Memcached)

列族數據庫

  • 相關產品:BigTable、HBase、Cassandra、HadoopDB、GreenPlum、PNUTS
  • 應用:分佈式數據存儲與管理
  • 優勢:查找速度快、可擴展性強、容易進行分佈式擴展、複雜性低
  • 使用者:Ebay(Cassandra)、Instagram(Cassandra)、NASA(Cassandra)、Facebook(HBase)

文檔數據庫

  • 相關產品:MongoDB、Elasticsearch、CouchDB、ThruDB、CloudKit、Perservere、Jackrabbit
  • 應用:存儲、索引並管理面向文檔的數據或者相似的半結構化數據
  • 優勢:性能好、靈活性高、複雜性低、數據結構靈活
  • 缺點:缺少統一的查詢語言
  • 使用者:百度雲數據庫(MongoDB)、SAP(MongoDB)

圖形數據庫

  • 相關產品:Neo4J、OrientDB、InfoGrid、GraphDB
  • 應用:大量複雜、互鏈接、低結構化的圖結構場合,如社交網絡、推薦系統等
  • 優勢:靈活性高、支持複雜的圖形算法、可用於構建複雜的關係圖譜
  • 缺點:複雜性高、只能支持必定的數據規模
  • 使用者:Adobe(Neo4J)、Cisco(Neo4J)、T-Mobile(Neo4J)

Microsoft Access

  • 在安裝 32 位 access 的機器上安裝 64 位的 access 驅動,會報兼容性錯誤,解決方案以下:(摘自這裏
一、使用"/passive"命令來安裝,例如"C:\directory path\AccessDatabaseEngine_x64.exe" /passive
二、安裝完成後,查看註冊表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Common\FilesPaths,刪除mso.dll

相關閱讀

相關文章
相關標籤/搜索