1. 程式人生 > >Redis-NoSQL入門和概述(一)

Redis-NoSQL入門和概述(一)

NoSQL簡史及定義


NoSQL 這個術語最早是在 1998 年被Carlo Strozzi命名在他的輕量的,開源的關係型資料庫上的,但是該資料庫沒有提供標準的SQL介面;
在2009 年再次被Eric Evans提起,討論分散式開源資料庫的問題,這是的NoSQL主要指的非關係型,分散式的,不提供關係型的atomicity(A)consistency(C)isolation(I)durability(D) 即ACID的特性;
緊接著2009年在亞特蘭大舉行的no:sql討論會是一個里程碑,當時的口號是select fun, profit from real_world where relational=false,因此之後對於NoSQL

最普遍的解釋為非關係型的,強調Key-ValueDocument(文件)資料庫的優點,並非單純的反對關係型資料庫;

下面給NoSQL下一個定義,如果你在網上查閱資料會得到很多種定義,大家的理解不盡相同,我這裡引用 http://nosql-database.org/ 網站上的定義:下一代,主要解決以下幾點:非關係資料庫、分散式資料庫、開源資料庫和水平擴充套件資料庫

原文資訊:Next Generation Databases mostly addressing some of the points: being non-relational, distributed, open-source and horizontally scalable
對於 NoSQL這個詞語,現在最普遍的理解就是:Not Only SQL

常見的NoSQl資料庫以及分類

NoSQL 僅僅是一個概念,還可以根據資料庫儲存資料的模型和特點分為以下種類

  • Key-Value 儲存,代表資料庫為 Redis ,可以通過Key快速的查詢到對應的Value值,非常適合儲存不涉及過多資料關係的業務資料,一般儲存在記憶體中,可以有效的減少讀寫磁碟的IO次數,提高了讀寫效能
  • Documnet 文件型 儲存,代表資料庫為 MongoDB, 文件的內容一般使用類似JSON的格式,儲存的內容就是文件型的,由於文件資料庫的no-schema的特性,可以儲存和讀取任意的資料,很好的解決的資料結構欄位不確定的問題。對於文件型的資料庫,一般是可以在某個欄位上建立索引的等,文件之間可以進行關聯,也就是說可以實現一些關係型資料庫的功能特性
  • XML 儲存,代表資料庫為 Berkeley DB XMl(BDB XML) ,是一個嵌入式資料庫,專門用於儲存和檢索XML格式的文件,支援XQuery這種查詢語言對XML文件進行高效的查詢
  • Graph 圖儲存 代表資料庫為 Neo4J 為最流行的圖資料庫,應用圖形理論(這裡可以學習一下有關圖的資料結構)儲存實體之間的關係資訊,最常見的應用就是儲存社交網路中人與人之間的關係比如微信好友之間的關係,還可以使用在推薦系統,如果我們將資料以圖的形式表現,那麼將會非常有益於推薦規則的制定,這類資料庫可以很方便了解決了關係型資料庫儲存這類資料的缺點,查詢慢,設計複雜的問題
  • Column 列儲存 代表資料庫為 HBase ,傳統的關係型資料庫是按照行來儲存資料的,因此可以稱為“行資料庫”,而列資料庫是按照列來進行儲存資料的,使用列儲存可以的根據某一列資料型別特徵選擇不同的演算法來壓縮資料,提高儲存空間的利用率;當讀取多條資料的同一列的時候,讀取效率非常高,因為這些列的資料都放在一起儲存的;該型別的資料庫適合大量的資料儲存的應用場景不適合小量的資料儲存的應用場景,多用於大資料處理方面
  • Object 物件儲存 代表資料庫 db4o 該型別的資料庫用的不多,主要特點是:通過類似面嚮物件語言的語法操作資料庫,通過物件的方式存取資料

   對於現在我們聽說的ElasticsearchNoSQL的關係可以查這篇文章 https://www.elastic.co/cn/blog/found-elasticsearch-as-nosql ,可以把它歸類為文件資料庫的一種

   對於非常詳細的NoSQL資料庫分類和NoSQL列表的詳細資訊(現已經超過255個了)可以檢視這個網站 http://nosql-database.org/

關係型資料庫與NoSQL資料庫的區別

關係型資料庫特點

  • 高度組織化,結構化資料
  • 結構化查詢語言(SQL)
  • 資料操作語言(DML),資料定義語言(DDL)
  • 多表之間進行關聯查詢(join)
  • 嚴格的一致性(事務處理)
  • ACID模型

對於關係型資料庫的事務ACID特性,這裡做一下解釋:

  • A(Atomicity): 原子性,原子的概念就是不可分隔,也就是說事務中的操作要麼全部完成,要麼都不做,事務成功的條件是事務中的所有操作都成功,只要事務中有一個操作失敗,真個事務就失敗,就行回滾
  • C(Consistency): 一致性,指進行事務操作後,由原來的一致性狀態變成另一種一致性的狀態,也就是事務提交後,或者事務回滾後,資料庫的完整性一致性約束不能被破壞。任何資料寫入資料庫必須是有效的根據已定義的規則,包括約束,觸發器,任何組合,引用完整性保證主鍵,外來鍵關係
  • I(Isolation): 隔離性,事務之間不會相互影響,每個事務是彼此獨立的,也就是在一個事務提交之前對其他事務是不可見的
  • D(Durability): 永續性,指一旦事務提交後,它所做的修改將會永久的儲存在資料庫中,即使出現服務宕機也不會丟失

NoSQL資料庫特點

  • 沒有固定的資料結構,鍵-值對儲存,列儲存,文件儲存,圖形資料庫,可以靈活的進行擴充套件
  • 沒有標準的查詢話語言,幾乎每一種NoSQL資料庫都會有自己獨特的查詢語言
  • 最終一致性,非ACID
  • CAP模型
  • 高效能,可擴充套件,非常容易進行水平擴充套件
 說明:這裡CAP只是簡單提了一下,在下一篇會有文章專門來解釋CAP定理

NoSQL和SQL的區別

  • 關係型資料庫基於ACID模型,NoSQL非關係型基於CAP模型
  • 資料儲存結構:關係型資料庫一般都是固定的表結構,通過DDL語句來進行修改,不是很容易進行擴充套件;而NoSQL非關係型儲存的機制就比較多了,就如上面所說的基於文件的,基於鍵-指的等等,對資料的格式十分靈活沒有固定的表結構,方便進行擴充套件
  • 資料的一致性:NoSQL非關係型資料庫強調最終一致性,沒有像關係型資料庫ACID強調強一致性,從非關係型資料庫中讀到的有可能還是處於一箇中間態的資料,因此如果你的業務對於資料的一致性要求很高,那麼非關係型資料庫並不一個很好的選擇

思考:對於關係型資料庫NoSQL非關係型資料庫 你有什麼樣不同的理解,歡迎留言討