NoSQL 是 Not Only SQL 的縮寫,意思是“不僅僅是 SQL”,而不是“不使用 SQL”。常見的 NoSQL 資料庫有 MongoDB、Memcached、Redis、HBase、CouchDB、Neo4j、Cassandra、Riak 等。
NoSQL 資料庫是眾多非關係型資料庫的統稱,它和關係型資料庫一樣,也是用來儲存資料的倉庫。
為什麼需要使用 NoSQL?
隨著網際網路的高速發展,資料量、存取量呈爆發式增長,人們對網路的需求逐漸多樣化。比如,通過 QQ、微信、微博等進行聊天互動,刷朋友圈,點讚,互評;又如,通過各大視訊網站、音樂網站看視訊、看直播、聽音樂等,這麼多資料都是需要儲存的。
然而,傳統的關係型資料庫面對這些海量資料的儲存,以及實現高存取量、高並行讀/寫,就會顯得力不從心;尤其是當面對超大規模、高並行、高吞吐量的大型動態網站的時候,就會暴露出很多難以克服的問題,影響使用者體驗。為了滿足對海量資料的高速儲存需求,實現高並行、高吞吐量,NoSQL 應運而生。
NoSQL 的出現可以解決傳統關係型資料庫所不能解決的問題。
1) NoSQL 解決了高並行讀/寫問題
Web 2.0 動態網站需要根據使用者的個性化資訊來實時生成動態頁面和提供動態資訊,而無法使用動態頁面的靜態化技術,因此資料庫的並行負載就會非常高。比如,微博、朋友圈的實時更新,就會出現每秒上萬次的讀/寫需求。
關係型資料庫在面對每秒上萬次的 SQL 查詢操作時還能應對自如,但是在面對每秒上萬次的 SQL 寫操作時就難以勝任了。
普通的 BBS 系統網站也存在高並行讀/寫的需求,比如,實時統計線上人數、記錄熱門貼文的瀏覽次數等,當面對這些需求時,傳統的關係型資料庫就會出現大量問題。
2) NoSQL 解決了海量資料的高效率儲存和存取問題
面對實時產生的巨量資料量的儲存與查詢,關係型資料庫是難以應付的,會顯得效率非常低;而利用 NoSQL 的高效儲存與查詢能力,就能解決這個問題。
3) NoSQL 實現了高可用性及高可延伸性
在基於 Web 的架構中,關係型資料庫難以進行橫向擴充套件。
當一個網站系統的使用者量和存取量與日俱增的時候,資料庫沒有辦法像 Web 伺服器或應用伺服器那樣通過新增更多的硬體來搭建負載均衡的伺服器。對於很多提供 24 小時不間斷服務的網站來說,對資料庫系統的維護升級和擴充套件是非常折磨人的一件事,往往需要停機維護和資料遷移。
總之,NoSQL 的出現解決了大規模資料庫集中和資料種類不同所帶來的各種問題,尤其是巨量資料實現的困難。
NoSQL 資料庫有什麼特點?
NoSQL 資料庫具有如下特點:
-
容易擴充套件,方便使用,資料之間沒有關係。
-
資料模型非常靈活,無須提前為要儲存的資料建立欄位型別,隨時可以儲存自定義的資料格式。
-
適合巨量資料量、高效能的儲存。
-
具有高並行讀/寫、高可用性。
在什麼應用場景下使用 NoSQL?
NoSQL 資料庫的應用場景比較廣泛,下面簡單說一下比較適合使用 NoSQL 的幾個場景:
-
對於巨量資料量、高並行的儲存系統及相關應用。
-
對於一些資料模型比較簡單的相關應用。
-
對資料一致性要求不是很高的業務場景。
-
對於給定 key 來對映一些複雜值的環境。
-
對一些大型系統的紀錄檔資訊的儲存。
-
儲存使用者資訊,如大型電商系統的購物車、對談等。
-
對於多資料來源的資料儲存。
-
對易變化、熱點高頻資訊、關鍵字等資訊的儲存。
以上這些相關業務場景都可以使用 NoSQL 來儲存。NoSQL 還有很多其他應用,在此不再細述,請讀者自行參考其他相關資料。