什么是NoSQL 隨著用戶內容的增長,所生成、處理、分析和歸檔的數據的規模快速增大,類型也快速增多。此外,一些新數據源也在生成大量數據,比如傳感器、全球定位系統(GPS)、自動追蹤器和監控系統。這些大數據集通常被稱為大數據。數據不僅僅快速增長,而且
什么是NoSQL
隨著用戶內容的增長,所生成、處理、分析和歸檔的數據的規模快速增大,類型也快速增多。此外,一些新數據源也在生成大量數據,比如傳感器、全球定位系統(GPS)、自動追蹤器和監控系統。這些大數據集通常被稱為大數據。數據不僅僅快速增長,免備案空間,而且半結構化和稀疏的趨勢也很明顯。這樣一來,預定義好schema和利用關系型引用的傳統數據管理技術就受到了挑戰。
在探索海量數據和半結構化數據相關問題的過程中,誕生了一系列新型數據庫產品,其中包括列族數據庫(column-oriented data store)、鍵/值數據庫和文檔數據庫,這些數據庫統稱NoSQL。
今天NoSQL泛指這樣一類數據庫和數據存儲,它們不遵循經典RDBMS原理,且常與Web規模的大型數據集有關。換句話說,NoSQL并不單指一個產品或一種技術,它代表一族產品,以及一系列不同的、有時相互關聯的、有關數據存儲及處理的概念。
RDBMS假定數據的結構已明確定義,數據是致密的,并且很大程度上是一致的。RDBMS構建在這樣的先決條件上,即數據的屬性可以預先定義好,它們之間的相互關系非常穩固且被系統地引用(systematically referenced)。它還假定定義在數據上的索引能保持一致性,能統一應用以提高查詢的速度。RDBMS可以容忍一定程度的不規律和結構缺乏,但在松散結構的海量稀疏數據面前,傳統存儲機制和訪問方法捉襟見肘。
NoSQL緩解了RDBMS引發的問題并降低了處理海量稀疏數據的難度,但是反過來也被奪去了事務完整性的力量和靈活的索引及查詢能力。
總之,NoSQL數據庫是非常高效、強大的海量數據存儲與處理工具。大部分NoSQL數據庫都能很好地適應數據增長,并且能靈活適應半結構化數據和稀疏數據集。
背景和歷史Google建造了大規模可擴展的基礎設施,用于支撐Google的搜索引擎和其他應用。其策略是在應用程序棧的每個層面上分別解決問題,旨在建立一套可伸縮的基礎設施來并行處理海量數據。為此Google創建了一整套完備的機制,包括分布式文件系統、面向列族的數據存儲、分布式協調系統和基于MapReduce的并行算法執行環境。
Google公開發布了一系列論文來解釋其基礎設施中一些關鍵的組成部分:
Sanjay Ghemawat、Howard Gobioff和Shun-Tak Leung,“The Google File System”; pub.19th ACM Symposium on Operating Systems Principles, Lake George, NY, October 2003
Jeffrey Dean和Sanjay Ghemawat,“MapReduce: Simplified Data Processing on Large Clusters”; pub. OSDI’04: Sixth Symposium on Operating System Design and Implementation, San Francisco, CA, December 2004。
Fay Chang、Jeffrey Dean、Sanjay Ghemawat、Wilson C. Hsieh、Deborah A. Wallach、Mike Burrows、Tushar Chandra、Andrew Fikes和Robert E. Gruber,“Bigtable: A Distributed Storage System for Structured Data”; pub. OSDI’06: Seventh Symposium on Operating System Design and Implementation, Seattle, WA, November 2006。
Mike Burrows,“The Chubby Lock Service for Loosely-Coupled Distributed Systems”; pub.OSDI’06: Seventh Symposium on Operating System Design and Implementation, Seattle, WA, November 2006。
Google 云端三大天王分別是: The Google File System, MapReduce, Bigtable
下面是中文翻譯版
GFS:
MapReduce:
BigTale:
Google公布設計理念引起了開源開發者的廣泛關注和濃厚興趣。很快,虛擬主機,第一個模仿Google基礎設施部分特性的開源軟件就開發出來了,它的創建者正是開源搜索引擎Lucene的發明人。緊接著,Lucene的核心開發者們加入了Yahoo!,在那里,依靠眾多開源貢獻者的支持,參照Google的分布式計算架構,開發者們創建出了一個能夠替代Google基礎設施所有部分的開源產品,這就是Hadoop及其子項目和相關項目。
Google的論文激發了人們對并行大規模處理和分布式非關系型數據存儲的興趣,一年后,Amazon分享了他們的成功經驗。2007年Amazon對外展示了它的分布式高可用、最終一致性數據存儲,其名曰Dynamo。
有關Amazon Dynamo的內容可以參考如下論文:
Giuseppe DeCandia, Deniz Hastorun, Madan Jampani, Gunavardhan Kakulapati, Avinash Lakshman, Alex Pilchin, Swami Sivasubramanian, Peter Vosshall, and Werner Vogels,“Dynamo: Amazon’s Highly Available Key/value Store,”in the Proceedings of the 21st ACM Symposium on Operating Systems Principles, Stevenson, WA, October 2007。(中文版:點擊下載)
此外,Amazon的CTO Werner Vogels在一篇博文中解釋了Amazon Dynamo背后的關鍵思想,博文地址為:
大數據就現在而言,任何超過幾個TB大小的數據集都可以歸為大數據。這是數據集大到開始跨越多個存儲單元的典型尺寸,也是傳統RDBMS技術開始表現出吃力的尺寸。
隨著數據規模的增長和數據創建來源的日趨多元化,以下挑戰將日益嚴峻。
·高效存儲和訪問大量數據很難。額外要求的容錯和備份使事情變得更加復雜。
·操作大數據集涉及大量并行進程。運行過程中要從任何故障中平穩恢復過來,同時還要在合理的時間范圍內返回結果,這非常復雜。
·各種不同數據源生成的半結構化和無結構數據的schema和元數據持續不斷變化,對它們的管理是一個令人頭疼的問題。
可擴展性是一種能力,有了它系統能通過增加資源提高吞吐量進而解決增加的負荷。可擴展性可以通過兩種方式實現,一是配置一個大而強的資源來滿足額外的需求,二是依靠由普通機器組成的集群。使用大而強的機器通常屬于垂直可擴展性。典型的垂直擴展方案是使用配有大量CPU內核且直接掛載大量存儲的超級計算機。這類超級計算機通常極其昂貴,屬于專有設備。替代垂直擴展的是水平擴展。水平擴展使用商業系統集群,集群隨負載的增加而擴展。水平擴展通常需要添加額外的節點來應付額外的負載。大數據以及大規模并行處理數據的需要促使水平擴展得到了廣泛的采納。在Google、Amazon、Facebook、eBay和Yahoo!,水平擴展的基礎設施包含數量巨大的服務器,其中一些包含幾千甚至幾十萬臺服務器。
對水平擴展集群上分布的數據進行處理是非常復雜的事情。在水平集群上處理大規模數據的方法里,MapReduce模型可能要算是最好的。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com