1、NoSQL產生的原因
目前關系型數據庫難以應對日益增多的海量數據,橫向的分布式擴展能力比較弱,因此構建出非關系型數據庫(所謂的NoSQL),其目的是為了構建一種結構簡單、分布式、易擴展、效率高且使用方便的新型數據庫系統。
2、NoSQL特點
NoSQL一般提供數據的分布式存儲、數據表的統一管理和維護、以及快速的分布式寫入和簡單查詢能力等。
- 一是流行的NoSQL軟件滿足業務需求而生
- 二是知名的NoSQL軟件都是開源
3、NoSQL的典型應用場景
- 海量日志數據、業務數據或監控數據的管理和查詢
- 特殊的或復雜的數據模型的簡化處理
- 作為數據倉庫、數據挖掘系統或OLAP系統的后台數據支撐
數據倉庫:企業管理和決策中面向主題的、集成的、與時間相關的、不可修改的數據集合。
數據倉庫可以從多個數據源收集經營數據,並且將數據進行預處理,如清洗、提取和轉換等操作,將數據轉換成統一的模式。處理后的數據會根據決策的需求進行組織,形成面向主題的、集成化的、較穩定的數據集合,數據內容則反映了經營和業務的歷史變化
數據挖掘:從大量數據集中發現有用的新模式的過程。
OLAP:聯機分析處理,OLAP可以看作是一種基於數據倉庫系統的應用,一般面向決策人員和數據分析人員,針對特定的商務主題對海量數據進行查詢和分析等
OLTP:聯機事務處理,即利用傳統關系型數據庫實現的、基於事務的業務系統。
數據庫:數據信息的集合,按照數據結構來存儲和組織信息數據的軟件容器或倉庫
4、關系型數據庫與NoSQL的區別
- 關系型數據庫能夠更好地保持數據的完整性和事務的一致性,以及支持對數據的復雜操作
- 非關系型數據庫在分布式環境下對數據的簡單管理和查詢
5、大數據的技術體系
5.1 特征
主要包含幾個特征:大容量、多樣化、高速率、有價值、數據全在線
- 多樣化:大數據業務可能需要對多種數據類型進行處理,同時來自不同的業務系統,數據格式不同、不同的領域。也可以對半結構化(例如日志)和非結構化數據進行處理(例如照片和視頻等)
- 大容量:數據總量大,新興的互聯網業務。
- 高速率:數據增長快且數據持續增長。
- 有價值:對大數據進行查詢、統計、挖掘會產生很高的價值。
- 數據全在線:全部的數據都處在可以被使用的狀態,而非離線備份的狀態。
5.2 采集
大數據采集的過程:把原始數據加載到分布式的大數據管理系統的過程。有2種采集的方式:
- 在線采集:直接監視數據源的變化,以實時或准實時的方式將產生的新數據獲取,並裝載到大數據系統中。裝載的過程:推模式或拉模式,即數據分發服務主動查看數據變化並獲取數據
- 離線采集:定期將數據從數據源上傳到大數據系統中的方式。
5.3 存儲
采用的是分布式架構,並支持通過網絡方式訪問。
- DAS:直連式存儲,存儲設備是通過電纜直接連到服務器
- NAS:網絡接入存儲,存儲設備連接到網絡中,通常是標准的TCP/IP網絡。客戶端通過網絡文件存取協議(NFS)存儲數據
- SAN:存儲區域網絡,存儲設備組成單獨的網絡,大多利用光纖連接。
- 雲存儲:將存儲作為服務提供出來。
雲存儲的優勢:
- 用戶不再需要購買存儲設備與管理軟件,而是通過易用化的網絡接口租用存儲服務
- 用戶不再需要對存儲系統進行運維,而是通過付費讓雲存儲服務提供商進行數據備份和系統維護
雲存儲常見類型
- 對象存儲:數據放入容器,客戶端利用http或restful等應用層接口分別訪問元數據和數據塊
- 文件存儲:基於雲模式實現的NAS服務,即可租用、免維護的網絡文件系統服務
- 塊存儲(卷存儲):可以實現在雲主機中掛載一個虛擬盤符的功能(例如將一個存儲卷映射為windows主機下的虛擬D盤),以及雲主機鏡像和快照存儲等功能
- 鍵值對存儲:在雲平台上直接實現鍵值對形式的NoSQL數據庫,免安裝、免維護、用戶可以直接使用
- 數據庫存儲:在雲平台上直接實現的關系型數據庫
- 快照存儲和鏡像存儲:在雲平台上的虛擬機鏡像和實例快照進行存儲。一般是基於塊存儲實現
- 消息隊列存儲:異步消息是分布式系統中的一種重要通信方式。消息的發送者一般會將消息發送到一個可靠的存儲容器,並等待接收者收取該消息。
5.4 大數據的管理和使用
原因:將數據匯總到一處,很難實現且效率低下。
遵循“計算本地化”策略,所謂計算本地化,首先需要將數據存儲在多個網絡節點之上,各個節點既是存儲節點也是處理節點 。
查詢和處理數據時,將查詢指令或處理數據所需的程序分發到各個節點,每個節點只處理或分析一部分數據,最好是本節點的數據。程序隨數據移動的並行處理的方式,在較短時間內完成了處理任務。
NoSQL系統會自行實現分布式存儲,例如MongoDB系統;HBase系統基於HDFS分布式文件系統構建,並將所有文件操作交給HDFS,自身只負責數據庫表的操作。
大數據的存儲和管理實現了文件方式的大數據管理,但對大數據的使用存在困難,無法直接看出數據結構和關系,沒有庫表的概念。
NoSQL等工具會對大數據實現表格化管理、快速查詢支持,以及提供數據庫系統的集群的監控、擴展等維護管理功能。
NoSQL在大數據業務中的基本功能就是實現:分布式數據組織、管理和分布式數據查詢,有兩種方式。
- 第一種是半結構化存儲的大數據文件映射為表,即對文件進行縱向分割,對每個列定義其名稱和屬性,將這些名稱屬性作為元數據管理起來,即實現表格化管理。由於是分塊存儲,映射成表后,也可以實現分布式查詢
- 第二種是要求數據按照自身所規定的格式進行存儲,可能需要通過數據導入等方式將原始數據按照新的格式重新存儲一遍
分布式環境下大數據可以的操作:預處理、數據統計分析、數據挖掘
預處理工具:Hadoop的MapReduce模塊、Spark
大數據挖掘和機器學習引擎:hadoop的Mahout、Spark的Mlib、谷歌的TensorFlow
6、數據可視化
從形式上可以大致分為統計圖形和主題圖兩類
7、大數據安全和治理
7.1 身份管理和訪問控制
- 身份管理:對用戶身份(憑證)的管理和身份認證。
- 訪問控制:指按照用戶的身份或屬性來限制和管理用戶對資源的訪問權限
大數據場景下,數據存儲在集群環境中,且集群節點隨數據增長而添加。除了要解決客戶端訪問集群時的認證授權問題,還要解決集群間各節點的認證授權問題,以防止攻擊者冒充某個服務節點。NoSQL數據庫提供了基於用戶名口令的認證與授權方式,實現客戶端到服務器的認證授權,Hadoop等大數據系統提供了Kerberos認證的身份管理和權限管理,一方面提供對客戶端的身份認證,另一方面提供節點或組件之間的身份認證
7.2 大數據加密
主要包括傳輸加密和存儲加密
- 數據存儲加密,常見的策略是將加密的數據上傳到存儲平台,使用時下載到本地再解密
- 傳輸加密,不僅要解決加密算法的問題,也要解決秘鑰傳輸和身份認證等一系列問題,通過SSL協議和數據分塊后進行透明加密等方式解決這些問題
Hadoop目前采用SSL協議和數據分塊后進行透明加密等方式
隱私保護和准標識符保護
8、關系型數據庫的原理簡述
8.1 關系模型
數據模型是對現實世界的抽象。關系型數據模型中將現實世界定義為實體[eg:一個學生]、實體集[eg:全體學生]、實體類型[eg:集合]、實體標識符[eg:學生的學號]、聯系(關系、元組、列)。
8.2 關系型數據庫的完整性約束
有域完整性、實體完整性、參照完整性、用戶定義的完整性。
8.3 關系型數據庫的事務機制
並發:多個用戶同時存取數據的操作。關系型數據庫會對並發操作進行控制,防止用戶在存取數據時破壞數據的完整性,造成數據錯誤。
事務機制可以保障用戶定義的一組操作序列作為一個不可分割的整體提交執行。
8.4 關系型數據庫的分布式部署
常見的關系型數據庫一般部署在單個主機上。
1、一種常見的關系型數據庫的分布式部署方式稱為讀寫分離機制。
2、分布式部署可以通過分庫和分表等方式,將大數據集分割成小的數據集,並且將分割后的數據集分布在不同硬盤或主機上,實現有限度的負載均衡。
3、分布式部署可以通過開發分布式中間件。用戶可以在不同主機上分別部署成熟的關系型數據庫產品,中間件根據設計策略將數據分別部署在各個主機上,各主機上的關系型數據庫只管理自身存儲的數據。中間件實現集群管理、統一訪問、水平分片以及分布式故障恢復等功能。
9、分布式數據管理的特點
9.1 數據分片
為了處理大數據業務,NoSQL數據庫可能運行在分布式集群上,通過增加節點的數量實現分布式系統的橫向擴展。
目前采用的是服務器與虛擬服務器作為節點,利用局域網和TCP/IP實現節點之間的互聯,即集群一般不會跨數據中心、通過廣域網鏈接。
將數據均勻分布到各個節點上,充分利用各個節點的處理能力、存儲能力、吞吐能力,可以利用各個節點實現多副本容錯等。存在的問題:數據管理、消息通信、一致性、如何實現分布式事務。
數據分布到多個節點上,執行查詢操作時,各個節點可以並行檢索自身的數據,並將結果進行匯總。為了實現並行檢索:
- 1、數據被統一維護、分布存儲
- 2、數據是均勻存儲的,及數據平均分布在所有節點上,也可以根據節點性能進行調整
數據分片(數據分塊):將數據打散,實現均勻分布的做法。目的:將大數據集切分成小的數據集,並均勻分布到多個節點上。
可以通過對分片大小、分片算法等策略進行配置;但分配功能是自動實現的,包括:分片邊界、存儲位置等信息的維護。根據寫入數據的特征,決定數據該歸屬哪一個分片,並將數據寫入負責該分片的節點。
數據分片后,NoSQL實現兩種機制:一是一次寫入多次讀取、二是保持數據塊(分片)中的記錄是有序的。此外,還可能對數據塊使用索引或過濾機制,比如布隆過濾器
9.2 數據多副本
分布式集群存在兩個方面的問題:局部網絡故障、少量節點故障。
- 局部網絡故障:有暫時的網絡擁塞或網絡設備的損壞等
- 少量節點故障:有節點的暫時故障或存儲數據的永久損失
NoSQL支持多副本,即將一個數據分片復制為多分,並復制到多個節點上,當少量節點故障或局部網絡故障時,可以通過訪問其他副本,使數據保持完整,對數據的查詢和數據處理任務能夠正確返回所有結果。
數據多副本存在問題:存儲策略問題和如何實現多個副本的復制,且內容相同
- 1、當用戶發起寫入和修改時,可以向任意副本寫入,還是只能寫入指定副本?
- 2、所有副本狀態一致,才判斷寫入成功,還是一個副本寫入成功就判斷寫入成功?
- 3、在數據復制、同步的過程中出現故障,會造成副本不一致?
- 4、用戶讀取數據時,是否需要對比不同副本之間的差異?
9.3 一次寫入多次讀取
- 一是通過弱化數據更新和刪除操作,是NoSQL在查詢性能、數據持續分片能力和數據多副本。
- 二是提高機械磁盤的IO性能和可靠性。
9.4 分布式系統的可伸縮性
原因:數據強調數據持續采集、數據全在線,因此分布式系統集群出現容量和性能瓶頸問題。通過采用橫向擴展的方式解決可伸縮性的問題,通過增加節點的方式提升集群的數據存儲和處理能力。
需要解決的問題:
- 1、更新節點狀態
- 2、數據重新平衡
- 3、對業務影響小
NoSQL數據庫:面向傳統關系型數據庫難以支撐的大數據業務
- 數據結構復雜
- 數據量大
數據量大,必須采用分布式系統而非單擊系統支撐,分布式系統存在的問題:
- 1、如何將多個節點上的數據進行統一的管理。
- 2、如何盡可能地將數據進行均勻的存儲。
- 3、如何增加節點或減少節點,如何使整個系統自適應。
- 4、考慮到節點和網絡可能發生錯誤,如何確保數據不丟失,查詢結果沒有缺失。
- 5、如何盡可能提高數據管理能力和查詢效率,如何盡可能提高系統的穩定性。
- 6、如何提高系統的易用性,使用戶在無需了解分布式技術細節的情況下,使用NoSQL的數據庫系統。
解決上述問題,NoSQL數據庫通過降低系統的通用性,以及犧牲關系型數據庫中的某些優勢特點,以換取在分布式部署、橫向擴展、高可用性等方面的優勢
10、分布式系統的一致性問題
10.1 CAP原理
在分布式系統中,CAP三個特性不可兼得,只能同時滿足兩個。
CAP是指分布式系統中的一致性、可用性、分區容錯性(Consistency、Availability、Partition Tolerance)
10.2 BASE和最終一致性
基本可用:Basically Available,允許分布式系統中部分節點或功能出現故障的情況下,系統的核心部門或其他數據仍然可用
軟狀態/柔性事務:soft-state,允許系統中出現中間狀態,在NoSQL中暫時出現多個副本暫時的不一致情況
最終一致性:允許系統的狀態或者多個副本之間存在暫時的不一致,但最終總會變得一致
10.3 Paxos算法簡介
基於消息的一致性算法
11、NoSQL的常見模式
11.1 鍵值對存儲模式
Key-Value模式,數據表中的每個實際行只有行鍵和數值兩個基本內容。適合按照鍵對數據進行快速定位,還可以通過對鍵進行排序和分區,以實現更快速的數據定位。
在分布式集群中,可以根據鍵將數據分塊部署在不同節點上,這樣可以實現並行的數據遍歷
場景:Redis、levelDB
11.2 文檔式存儲模式
采用Json或者類似Json的方式描述數據,強調可以通過關鍵詞查詢內部的結構,而非只通過鍵來進行檢索
場景:MongoDB、CouchDB等
11.3 列存儲模式
面向列的存儲模式,以區別於關系型數據庫中面向行的存儲模式,主要用於OLAP、數據倉庫等場合
11.4 圖存儲模式
節點的ID和屬性,節點之間的連線(或稱邊、關系),邊的ID、方向、屬性。
圖存儲可以用在搜索引擎排序、社交網絡分析和推薦系統等領域。
常見的圖存儲數據庫:Neo4J以及Spark
12、NoSQL系統的其他相關技術
12.1 分布式數據處理
大數據的處理和計算包括數據預處理、數據統計分析和數據挖掘等方面.
過程:將數據進行分割,其次是任務的調度、監控和管理,最后是分布式任務的執行.
- 數據分割:Hadoop 和spark 等分布式大數據處理引擎利用分布式文件系統實現數據切割,但也可以自己控制每個節點每次處理所讀入的數據量
- 任務的調度、監控和管理:任務的管理者需要將處理任務分解,指示每個節點處理子任務,同時還要在各個子節點撒花姑娘根據性能和任務分配子任務處理所需的CPU和內存資源並且監控各個節點和子任務的狀態,對出錯的節點或子任務采取措施。常見的分布式任務調度模塊有Hadoop中的Yarn,以及Mesos等。
- 任務的執行:分布式處理引擎需要考慮如何充分發揮分布式計算優勢,並且向用戶提供簡化的接口,摒弊底層分布式處理細節。
12.2 時間同步服務
通過NTP(Network Time Protocol)等方式實現時間同步
12.3 布隆過濾器
目的:檢查某個元素是否存在於集合(如數據塊)中
在NoSQL系統中,如HBase、Cassandra和MongoDB等,都采用了布隆過濾器機制