03.08 一文讀懂 NoSQL 數據庫


一文讀懂 NoSQL 數據庫

NoSQL: NOT ONLY SQL

NoSQL全稱NOT ONLY SQL,是一種數據庫類型,比傳統的關係型數據庫具有更大的靈活性。

什麼是NoSQL數據庫

對比傳統的關係型數據庫,NoSQL提供了靈活的存儲和檢索模式。


一文讀懂 NoSQL 數據庫

NoSQL 可伸縮,高性能,靈活性


隨著雲計算,IoT物聯網,大數據以及高容量Web和移動應用程序的廣泛使用,NoSQL變得更加流行。NoSQL數據庫的最常見類型是鍵值數據庫,文檔數據庫,列數據庫和圖形數據庫。

需要強調的是,“ NoSQL”中的“No”不是"否"的意思,而是“Not Only, 不僅” 的縮寫。

這是因為許多NoSQL數據庫都支持類似SQL的查詢,而且因為在微服務和持久性中,現在的應用程序通常都既使用NoSQL數據庫,也使用關係數據庫。

NoSQL數據庫 與 SQL數據庫對比

NoSQL數據庫不遵循關係數據庫的所有規則-特別是,它確實使用傳統的行/列/表數據庫設計,並且不使用結構化查詢語言(SQL)來查詢數據。

最初的數據庫系統是平面文件/逗號分隔的,通常是特定應用程序專有的,並且它們在數據之間可能發現的關係受到限制。這時的數據庫管理系統也很複雜。

這最終導致了關係數據庫(RDBMS)的發展。關係數據庫將數據安排在可以通過公用字段連接或關聯的表中,與應用程序分開並通過SQL查詢。換句話說,關係數據庫將數據放入表中,而SQL創建了一個與之交互的接口。代表數據庫包括Oracle DB,微軟的Sql Server,以及MySQL和PostgreSQL等等。

關係數據庫可以很好地用於大型服務器和存儲介質。但是,隨著越來越多的頻繁變化的異構數據在諸如電子商務應用程序之類的事物中變得越來越普遍,程序員需要比SQL更靈活的東西。NoSQL是那種選擇。

NoSQL數據庫是為特定的數據模型構建的,並具有靈活的架構,允許程序員創建和管理現代應用程序。NoSQL也更加靈活,因為NoSQL不是基於表的概念構建的,並且不使用SQL來操縱或分析數據(儘管某些NoSQL數據庫可能具有SQL啟發式的查詢語言)。

NoSQL包含結構化數據(特定格式的代碼,以使搜索引擎可以理解的方式編寫),半結構化數據(包含用於分隔語義元素並在數據中強制執行記錄和字段層次結構的標記或其他標記的數據) ,非結構化數據(不具有預定義數據模型或未以預定義方式組織的信息)和多態數據(可以根據需要轉換為任何不同數據類型的數據)。

NoSQL使您變得更敏捷,更靈活並且可以更快地進行迭代。NoSQL數據庫可簡化設計,更好地控制可用性並提高可伸縮性。

當今的雲計算供應商既支持SQL,也支持NoSQL數據庫。選擇哪個數據庫取決於業務的需求。


一文讀懂 NoSQL 數據庫

NoSQL VS SQL

從上圖我們可以看出,NoSQL在社交媒體領域,物聯網領域,遊戲領域以及文檔數據庫中有廣泛的應用。而SQL在Web引用,移動應用,企業級應用同樣也在廣泛使用。對於大型的企業級應用而言,往往及使用SQL,也是用NoSQL。

NoSQL數據庫類型和示例

NoSQL數據庫可以使用以下四個主要數據模型中的任何一個來管理信息:

  • 鍵值存儲型數據庫

在鍵值結構中,鍵通常是一個簡單的字符串,值是一系列對數據庫不透明的不間斷字節。數據本身通常是某種原始數據類型(字符串,整數,數組)或應用程序需要持久存儲並直接訪問的更復雜的對象。

這用更靈活的數據模型代替了關係模式的剛性(方案基本上是表如何工作的藍圖),該模型允許開發人員在其應用程序發展時輕鬆地修改字段和對象結構。通常,鍵值存儲沒有查詢語言。它們只是提供了一種使用簡單的GET,PUT和DELETE命令存儲,檢索和更新數據的方法。此模型的簡單性使鍵值存儲快速,易於使用,可擴展,可移植且靈活。REDIS就是這類的代表。

  • 文檔型數據庫

文檔是具有可識別類型的值(包括數字,布爾值和字符串)以及嵌套數組和字典的對象和鍵(字符串)。文檔數據庫的設計具有靈活性。它們通常不會被強制具有架構,因此易於修改。如果應用程序需要能夠存儲各種屬性以及大量數據,那麼文檔數據庫是一個不錯的選擇。MongoDB和Apache CouchDB是流行的基於文檔的數據庫的示例。

  • 列數據庫

基於列的模型(也稱為“寬列”)使用行鍵,列名和單元格時間戳,可以非常快速地訪問數據。這些類型的數據庫的靈活模式意味著列不必在記錄之間保持一致,並且您可以將列添加到特定行,而不必將它們添加到每條記錄中。類似於Apache Cassandra中的列式存儲數據模型,來自Google的BigTable。

  • 圖數據庫

現代圖形數據庫是一個數據存儲和處理引擎,可以使數據和關係的持久性和探索效率更高。在圖論中,結構由頂點和邊(數據和連接)或以後稱為“數據關係”的部分組成。圖的行為類似於人們的想法,即離散數據單元之間的特定關係。此數據庫類型對於可視化,分析或幫助您查找不同數據之間的連接特別有用。結果,企業將圖技術用於推薦引擎,欺詐分析和網絡分析。基於圖的NoSQL數據庫的示例包括Neo4j和JanusGraph。

NoSQL數據庫的示例


一文讀懂 NoSQL 數據庫


許多NoSQL數據庫是由Google,Amazon,Yahoo和Facebook等年輕的技術公司設計的,旨在提供更有效的方式來存儲內容或處理大型網站的數據。一些最受歡迎的NoSQL數據庫包括:

  • Apache CouchDB,一個基於JSON文檔的開放源代碼數據庫,使用JavaScript作為查詢語言
  • Apache Cassandra,一個開放源代碼的大列存儲數據庫,旨在管理多個服務器上的大量數據以及跨多個數據中心的集群
  • MongoDB,一個基於開源文檔的數據庫,使用類似於JSON的文檔和架構,是MEAN堆棧的數據庫組件
  • Redis,功能強大的內存鍵值存儲,用於會話緩存,消息隊列和其他特定應用程序
  • Elasticsearch,一個基於文檔的數據庫,其中包括全文搜索引擎

何時使用NoSQL

NoSQL支持更快,更敏捷的存儲和處理,這意味著NoSQL數據庫通常更適合現代,複雜的應用程序,例如電子商務站點或移動應用程序。

NoSQL數據庫的水平擴展和靈活的數據模型意味著它們可以處理大量快速變化的數據,使其非常適合敏捷開發,快速迭代和頻繁的代碼推送。

簡而言之,關係數據庫和NoSQL數據庫之間的區別是性能,可用性和可伸縮性

NoSQL數據庫比RDBMS更好的一些特定情況包括:

  • 當您需要通過更改架構存儲大量非結構化數據時。NoSQL數據庫通常具有水平擴展屬性,該屬性允許它們存儲和處理大量數據。而且NoSQL支持臨時模式更改。(相比之下,對於關係數據庫,工程師預先設計了數據模式,然後對數據庫運行SQL查詢;如果需要後續的模式更改,則通常很難執行並且很複雜。)
  • 當您使用雲計算和存儲時。大多數NoSQL數據庫旨在跨多個數據中心進行擴展,並作為分佈式系統運行,這使它們可以立即利用雲計算基礎架構及其更高的可用性。(有關更多信息,請參閱“ 如何在IBM Cloud上選擇數據庫。”)
  • 當您需要快速發展時。NoSQL通常是敏捷軟件開發方法的首選數據存儲,這需要非常短的衝刺週期。使用NoSQL,您不必像使用關係數據庫那樣準備數據,並且不必在每次應用程序設計更改時都遷移結構化數據,而是可以隨應用程序發展動態NoSQL模式。
  • 當混合數據環境有意義時。NoSQL有時不僅僅意味著SQL,這意味著它可以與關係數據庫互補或並排放置,併為選擇最佳工具提供了靈活性。例如,Craigslist將其活動列表存儲在關係數據庫中,但將其歸檔存儲在開銷較低的基於文檔的NoSQL存儲中。

關於NoSQL的講解就到這裡,希望本文能夠讓你對NoSQL有所瞭解。歡迎留言討論。


分享到:


相關文章: