首字母縮寫NoSQL是在1998年創造的。許多人認為NoSQL是一個詆毀SQL的貶義詞。 實際上,這個術語不僅意味著SQL。 這個想法是兩種技術都可以共存,並且每種技術都有自己的位置。 由於許多Web 2.0領導者採用了NoSQL技術,因此NoSQL運動在過去幾年一直是新聞。 Facebook,Twitter,Digg,亞馬遜,LinkedIn和谷歌等公司都以某種方式使用NoSQL。
讓我們分解一下NoSQL,這樣你就可以向你的CIO甚至你的同事解釋它。
NoSQL從需求中湧現出來
數據存儲:世界上存儲的數字數據以兆字節為單位進行測量。 exabyte等於十億千兆字節(GB)的數據。 根據Internet.com的統計,2006年存儲的數據量為161艾字節。 僅在2010年的4年後,存儲的數據量將接近1000 ExaBytes,增幅超過500%。 換句話說,世界上存儲著大量的數據,並且它會持續增長。
相互關聯的數據:數據繼續變得更加連接。 在超鏈接中創建了網絡,博客有pingbacks,每個主要的社交網絡系統都有標籤,可以將事情聯繫在一起。 主要係統的構建是相互關聯的。
複雜的數據結構: NoSQL可以輕鬆處理層次化的嵌套數據結構。 為了在SQL中完成同樣的事情,你需要多個關係表和各種關鍵字。
另外,性能和數據複雜性之間也有關係。 由於我們存儲社交網絡應用程序和語義網所需的大量數據,因此傳統RDBMS中的性能可能會下降。
什麼是NoSQL?
我猜想定義NoSQL的一種方法是考慮它不是什麼。
這不是SQL,它不是關係型的。 就像名稱所暗示的那樣,它不是RDBMS的替代品,而是對它的讚揚。 NoSQL專為分佈式數據存儲而設計,可滿足大規模數據需求。 用它的5億用戶或Twitter來思考Facebook,這些用戶或Twitter每天都會收集Terabits的數據。
在NoSQL數據庫中,沒有固定的模式,也沒有連接。 RDBMS通過獲得更快更快的硬件和增加內存來“擴展”。 另一方面,NoSQL可以利用“擴展”。 擴大指的是分散許多商品系統的負載。 這是NoSQL的組件,使其成為大數據集的廉價解決方案。
NoSQL類別
目前的NoSQL世界適合4個基本類別。
- 鍵值存儲主要基於2007年編寫的亞馬遜Dynamo Paper 。主要思想是存在一個哈希表,其中存在唯一鍵和指向特定數據項的指針。 這些映射通常伴隨著緩存機制以最大限度地提高性能。
Column Family Stores創建用於存儲和處理分佈在許多機器上的大量數據。 仍然有鍵,但它們指向多列。 在BigTable(谷歌的Column Family NoSQL模型)的情況下,行由行鍵標識,數據通過該鍵排序和存儲。 這些列按列族排列。
- 文檔數據庫的靈感來自Lotus Notes ,並且與鍵值存儲類似。 該模型基本上是版本化的文檔,它們是其他鍵值集合的集合。 半結構化文檔以JSON等格式存儲。
- 圖數據庫用節點,筆記之間的關係和節點的屬性構建。 除了行和列的表格以及SQL的嚴格結構之外,還可以使用靈活的圖表模型,這種模型可以跨越多台機器進行擴展。
主要的NoSQL玩家
NoSQL的主要參與者主要是因為已經採用它們的組織而出現的。 一些最大的NoSQL技術包括:
- Dynamo: Dynamo由Amazon.com創建,是最顯著的Key-Value NoSQL數據庫。 亞馬遜需要為他們的電子商務企業提供高度可擴展的分佈式平台,因此他們開發了Dynamo。 Amazon S3使用Dynamo作為存儲機制。
- Cassandra: Cassandra是Facebook開源的,是一個面向列的NoSQL數據庫。
- BigTable: BigTable是Google專有的面向列的數據庫。 Google允許使用BigTable,但僅限Google App Engine。
- SimpleDB: SimpleDB是另一個亞馬遜數據庫。 用於亞馬遜EC2和S3,它是亞馬遜網絡服務的一部分,根據使用情況收取費用。
- CouchDB: CouchDB和MongoDB是開源的面向文檔的NoSQL數據庫。
- Neo4J: Neo4j是一個開源圖形數據庫。
查詢NoSQL
如何查詢NoSQL數據庫是大多數開發人員感興趣的問題。畢竟,如果無法檢索並向最終用戶或Web服務展示數據,存儲在龐大數據庫中的數據對任何人都沒有任何好處。 NoSQL數據庫不提供像SQL這樣的高級聲明式查詢語言。 相反,查詢這些數據庫是特定於數據模型的。
許多NoSQL平台都支持RESTful接口。 其他報價查詢API。 有幾種查詢工具已經開發,可以查詢多個NoSQL數據庫。 這些工具通常適用於單個NoSQL類別。 一個例子是SPARQL。 SPARQL是為圖數據庫設計的聲明性查詢規範。 以下是一個SPARQL查詢的示例,用於檢索特定博客的URL(由IBM提供):
PREFIX foaf:
SELECT?url
FROM
WHERE {
?貢獻者foaf:名稱“Jon Foobar”。
?貢獻者foaf:weblog?url。
}
NoSQL的未來
有大量數據存儲需求的組織正在認真對待NoSQL。 顯然,這個概念在小型組織中沒有得到太多的牽引力。 在Information Week進行的一項調查中,44%的商業IT專業人士還沒有聽說過NoSQL。 此外,只有1%的受訪者表示NoSQL是他們戰略方向的一部分。 顯然,NoSQL在我們的互聯世界中佔有一席之地,但需要繼續發展以獲得許多人認為它可能具有的大眾吸引力。