NoSQL
概述
一、什麼是NoSQL
- 1、NoSQL:not only SQL,非關係型數據庫
- 2、NoSQL是一個通用術語
a)指不遵循傳統RDBMS模型的數據庫
b)數據是非關係的,且不使用SQL作爲主要查詢語言
c)解決數據庫的可伸縮性和可用性問題
d)不針對原子性或一致性問題
二、 爲什麼使用NoSQL
- 互聯網的發展,傳統關係型數據庫存在瓶頸
高併發讀寫
高存儲量
高可用性
高擴展性
低成本
三、NoSQL和關係型數據庫對比
主要有以下一些區別
四、NoSQL的特點
- 1、最終一致性
- 2、應用程序增加了維護一致性和處理事務等職責
- 3、冗餘數據存儲
- 4、NoSQL != 大數據
a)NoSQL產品是爲了幫助解決大數據存儲問題
b)大數據不僅僅包含數據存儲的問題
NoSQL基本概念
- 1、三大基石
CAP、BASE、 最終一致性
- 2、Indexing(索引)、Query(查詢)
- 3、MapReduce
- 4、Sharding
三大基石
CAP理論
- 1、數據庫最多支持3箇中的2個
a)Consistency (一致性)
b)Availability(可用性)
c)Partition Tolerance(分區容錯性)
- 2、NoSQL不保證"ACID"
- 3、提供"最終一致性"
BASE
- 1、Basically Availble(基本可用)
保證核心可用
- 2、Soft-state(軟狀態)
狀態可以有一段時間不同步
- 3、Eventual Consistency(最終一致性)
系統經過一定時間後,數據最終能夠達到一致的狀態
- 4、核心思想是即使無法做到強一致性,但應用可以選擇適合的方式達到最終一致性
最終一致性
- 1、最終結果保持一致性,而不是時時一致
- 2、如賬戶餘額,庫存量等數據需強一致性
- 3、如catalog等信息不需要強一致性
a)Causal consistency(因果一致性)
b)Read-your-writes consistency
c)Session consistency
索引和查詢
Indexing(索引)
- 1、大多數NoSQL是按key進行索引
- 2、部分NoSQL允許二級索引
- 3、HBase使用HDFS,append-only
a)批處理寫入Logged
b)重新創建並排序文件
Query(查詢)
- 1、沒有專門的查詢語言,通常使用腳本語言查詢
- 2、有些開始支持SQL查詢
- 3、有些可以使用MapReduce代碼查詢
MapReduce、Sharding
MapReduce
- 1、不是Hadoop的MapReduce,概念相關
- 2、可進行數據的處理查詢
Sharding(分片)
- 1、一種分區模式
- 2、可以複製分片
有利於災難恢復
NoSQL分類
主要分爲以下四類
鍵值存儲數據庫(Key-Value)
- 1、通常用hash table來實現
可以通過key來添加、查詢或者刪除數據
- 2、常應用於內容緩存
儲存用戶信息,比如會話、配置文件、參數等等
- 3、不適用場景
需要事務支持場景
列存儲數據庫(Wide Column Store)
- 1、將數據儲存在列簇
a)一個列簇存儲經常被一起查詢的相關數據
b)每一個列簇包含kv鍵值對的「列」,可以隨行變化
- 2、應用於分佈式數據存儲與管理
- 3、優點
a)查找速度快
b)可擴展性強
c)容易進行分佈式擴展
文檔型數據庫(Document Store)
- 1、將數據以文檔的形式存儲
a)文檔通常爲JSON對象,也可以使用XML
b)每個文檔都有屬性和值
c)值可以是簡單數據類型或複雜數據類型
數組、到其他數據庫中的文檔的鏈接或子文檔
- 2、應用
存儲、索引並管理面向文檔的數據或類似的半結構化數據
- 3、優點
a)數據結構要求不嚴格,表結構可變
b)可以使用它儲存不同的信息
圖數據庫(Graph Databases)
- 1、將數據以圖的方式儲存
- 2、適用的場景
在一些關係性強的數據中
推薦引擎
NoSQL和BI、大數據的關係
- 1、BI(Business Intelligence):商務智能
a)它是一套完整的解決方案
b)BI應用涉及模型,模型依賴於模式
c)BI主要支持標準SQL,對NoSQL支持弱於關係型數據庫
- 2、NoSQL和大數據相關性較高 通常大數據場景採用列存儲數據庫 如:HBase和Hadoop