一、NoSQL數據庫概念
NoSQL數據庫是非關係型數據庫,主要是針對關係型數據庫而言,它主要是用來解決半結構化數據和非機構化數據的存儲問題。redis
二、爲何使用NoSQL數據庫?
(1)對數據庫的高併發讀寫的需求數據庫
關係型數據庫可以應付每秒上萬次的讀請求,可是卻沒有辦法應付每秒上萬次的寫請求,若是達到每秒上萬次的寫請求,磁盤的IO就沒法承受這麼大的壓力了。服務器
(2)對海量數據的高效存儲和訪問的需求併發
NoSQL數據庫能夠處理超大量的數據,可以運行在便宜的PC集羣上。memcached
(3)對數據庫的高可用性和高可擴展性的需求高併發
關係型數據庫難以橫向擴展,可是NoSQL數據庫卻能夠經過增長硬件的數量和服務節點的數量來擴展性能和服務器的負載能力。性能
三、關係型數據庫的缺陷
(1)對於數據庫事務一致性的需求
(2)數據庫的寫實時性和讀實時性的需求
(3)對於複雜的SQL語句,特別是多表關聯的查詢
四、NoSQL數據庫有哪些?
(1)K/V:memcached和redis
(2)列存儲數據庫:mongoDB和hbase
五、NoSQL的三大基石:CAP、BASE和最終一致性
(1)CAP:(consistency)一致性、(Availability)可用性、(Tolerance of network partition)分區容忍性
(2)BASE:提出犧牲強一致性換取可用性和高性能,支持分區失敗,容許一段時間的狀態不一樣步,只要達到數據的最終一致性便可。而不須要時時一致。
(3)最終一致性:要求最終讀取的操做都是最新寫入的數據
六、IO的五分鐘法則
若是數據庫的一條記錄被頻繁訪問,就應該將它放到內存中,不然就放到磁盤中按需訪問。這個臨界值是5分鐘。
七、行存儲和列存儲的概念
(1)行存儲:把一行中的數據值串在一塊兒進行存儲,而後再存儲下一行,依次類推;
(2)列存儲:把一列中的數據值串在一塊兒進行存儲,而後再存儲下一列,依次類推;