十年網站開發(fā)經驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網站問題一站解決
而傳統(tǒng)的關系數據庫在應付web2.0網站,特別是超大規(guī)模和高并發(fā)的SNS類型的web2.0純動態(tài)網站已經顯得力不從心,暴露了很多難以克服的問題,例如:
在金城江等地區(qū),都構建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供網站設計、做網站 網站設計制作按需網站策劃,公司網站建設,企業(yè)網站建設,高端網站設計,網絡營銷推廣,成都外貿網站建設公司,金城江網站建設費用合理。
1、High performance - 對數據庫高并發(fā)讀寫的需求
web2.0網站要根據用戶個性化信息來實時生成動態(tài)頁面和提供動態(tài)信息,所以基本上無法使用動態(tài)頁面靜態(tài)化技術,因此數據庫并發(fā)負載非常高,往往要達到每秒上萬次讀寫請求。關系數據庫應付上萬次SQL查詢還勉強頂得住,但是應付上萬次SQL寫數據請求,硬盤IO就已經無法承受了。其實對于普通的BBS網站,往往也存在對高并發(fā)寫請求的需求。
2、Huge Storage - 對海量數據的高效率存儲和訪問的需求
對于大型的SNS網站,每天用戶產生海量的用戶動態(tài),以國外的Friendfeed為例,一個月就達到了2.5億條用戶動態(tài),對于關系數據庫來說,在一張2.5億條記錄的表里面進行SQL查詢,效率是極其低下乃至不可忍受的。再例如大型web網站的用戶登錄系統(tǒng),例如騰訊,盛大,動輒數以億計的帳號,關系數據庫也很難應付。
3、High Scalability High Availability- 對數據庫的高可擴展性和高可用性的需求
在基于web的架構當中,數據庫是最難進行橫向擴展的,當一個應用系統(tǒng)的用戶量和訪問量與日俱增的時候,你的數據庫卻沒有辦法像web server和app server那樣簡單的通過添加更多的硬件和服務節(jié)點來擴展性能和負載能力。對于很多需要提供24小時不間斷服務的網站來說,對數據庫系統(tǒng)進行升級和擴展是非常痛苦的事情,往往需要停機維護和數據遷移,為什么數據庫不能通過不斷的添加服務器節(jié)點來實現擴展呢?
在上面提到的“三高”需求面前,關系數據庫遇到了難以克服的障礙,而對于web2.0網站來說,關系數據庫的很多主要特性卻往往無用武之地,例如:
1、數據庫事務一致性需求
很多web實時系統(tǒng)并不要求嚴格的數據庫事務,對讀一致性的要求很低,有些場合對寫一致性要求也不高。因此數據庫事務管理成了數據庫高負載下一個沉重的負擔。
2、數據庫的寫實時性和讀實時性需求
對關系數據庫來說,插入一條數據之后立刻查詢,是肯定可以讀出來這條數據的,但是對于很多web應用來說,并不要求這么高的實時性。
3、對復雜的SQL查詢,特別是多表關聯查詢的需求
任何大數據量的web系統(tǒng),都非常忌諱多個大表的關聯查詢,以及復雜的數據分析類型的復雜SQL報表查詢,特別是SNS類型的網站,從需求以及產品設計角度,就避免了這種情況的產生。往往更多的只是單表的主鍵查詢,以及單表的簡單條件分頁查詢,SQL的功能被極大的弱化了。
因此,關系數據庫在這些越來越多的應用場景下顯得不那么合適了,為了解決這類問題的非關系數據庫應運而生。
NoSQL 是非關系型數據存儲的廣義定義。它打破了長久以來關系型數據庫與ACID理論大一統(tǒng)的局面。NoSQL 數據存儲不需要固定的表結構,通常也不存在連接操作。在大數據存取上具備關系型數據庫無法比擬的性能優(yōu)勢。該術語在 2009 年初得到了廣泛認同。
當今的應用體系結構需要數據存儲在橫向伸縮性上能夠滿足需求。而 NoSQL 存儲就是為了實現這個需求。Google 的BigTable與Amazon的Dynamo是非常成功的商業(yè) NoSQL 實現。一些開源的 NoSQL 體系,如Facebook 的Cassandra, Apache 的HBase,也得到了廣泛認同。
NoSQL,泛指非關系型的數據庫。隨著互聯網web2.0網站的興起,傳統(tǒng)的關系數據庫在應付web2.0網站,特別是超大規(guī)模和高并發(fā)的SNS類型的web2.0純動態(tài)網站已經顯得力不從心,暴露了很多難以克服的問題,而非關系型的數據庫則由于其本身的特點得到了非常迅速的發(fā)展。NoSQL數據庫的產生就是為了解決大規(guī)模數據集合多重數據種類帶來的挑戰(zhàn),尤其是大數據應用難題。
雖然NoSQL流行語火起來才短短一年的時間,但是不可否認,現在已經開始了第二代運動。盡管早期的堆棧代碼只能算是一種實驗,然而現在的系統(tǒng)已經更加的成熟、穩(wěn)定。不過現在也面臨著一個嚴酷的事實:技術越來越成熟——以至于原來很好的NoSQL數據存儲不得不進行重寫,也有少數人認為這就是所謂的2.0版本。這里列出一些比較知名的工具,可以為大數據建立快速、可擴展的存儲庫。
NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,是一項全新的數據庫革命性運動,早期就有人提出,發(fā)展至2009年趨勢越發(fā)高漲。NoSQL的擁護者們提倡運用非關系型的數據存儲,相對于鋪天蓋地的關系型數據庫運用,這一概念無疑是一種全新的思維的注入。
NoSQL數據庫在以下的這幾種情況下比較適用:1、數據模型比較簡單;2、需要靈活性更強的IT系統(tǒng);3、對數據庫性能要求較高;4、不需要高度的數據一致性;5、對于給定key,比較容易映射復雜值的環(huán)境。
Web1.0的時代,數據訪問量很有限,用一夫當關的高性能的單點服務器可以解決大部分問題。
隨著Web2.0的時代的到來,用戶訪問量大幅度提升,同時產生了大量的用戶數據。加上后來的智能移動設備的普及,所有的互聯網平臺都面臨了巨大的性能挑戰(zhàn)。
NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,泛指非關系型的數據庫。
NoSQL 不依賴業(yè)務邏輯方式存儲,而以簡單的key-value模式存儲。因此大大的增加了數據庫的擴展能力。
Memcache Memcache Redis Redis MongoDB MongoDB 列式數據庫 列式數據庫 Hbase Hbase
HBase是Hadoop項目中的數據庫。它用于需要對大量的數據進行隨機、實時的讀寫操作的場景中。
HBase的目標就是處理數據量非常龐大的表,可以用普通的計算機處理超過10億行數據,還可處理有數百萬列元素的數據表。
Cassandra Cassandra
Apache Cassandra是一款免費的開源NoSQL數據庫,其設計目的在于管理由大量商用服務器構建起來的龐大集群上的海量數據集(數據量通常達到PB級別)。在眾多顯著特性當中,Cassandra最為卓越的長處是對寫入及讀取操作進行規(guī)模調整,而且其不強調主集群的設計思路能夠以相對直觀的方式簡化各集群的創(chuàng)建與擴展流程。
主要應用:社會關系,公共交通網絡,地圖及網絡拓譜(n*(n-1)/2)
一、概念
SQL?(Structured?Query?Language)?數據庫,指關系型數據庫。主要代表:SQL?Server,Oracle,MySQL(開源),PostgreSQL(開源)。
NoSQL(Not?Only?SQL)泛指非關系型數據庫。主要代表:MongoDB,Redis,CouchDB。
二、區(qū)別
1、存儲方式
SQL數據存在特定結構的表中;而NoSQL則更加靈活和可擴展,存儲方式可以省是JSON文檔、哈希表或者其他方式。SQL通常以數據庫表形式存儲數據。舉個栗子,存?zhèn)€學生借書數據:
而NoSQL存儲方式比較靈活,比如使用類JSON文件存儲上表中熊大的借閱數據:
2、表/數據集合的數據的關系
在SQL中,必須定義好表和字段結構后才能添加數據,例如定義表的主鍵(primary?key),索引(index),觸發(fā)器(trigger),存儲過程(stored?procedure)等。表結構可以在被定義之后更新,但是如果有比較大的結構變更的話就會變得比較復雜。在NoSQL中,數據可以在任何時候任何地方添加,不需要先定義表。例如下面這段代碼會自動創(chuàng)建一個新的"借閱表"數據集合:
NoSQL也可以在數據集中建立索引。以MongoDB為例,會自動在數據集合創(chuàng)建后創(chuàng)建唯一值_id字段,這樣的話就可以在數據集創(chuàng)建后增加索引。
從這點來看,NoSQL可能更加適合初始化數據還不明確或者未定的項目中。
3、外部數據存儲
SQL中如何需要增加外部關聯數據的話,規(guī)范化做法是在原表中增加一個外鍵,關聯外部數據表。例如需要在借閱表中增加審核人信息,先建立一個審核人表:
再在原來的借閱人表中增加審核人外鍵:
這樣如果我們需要更新審核人個人信息的時候只需要更新審核人表而不需要對借閱人表做更新。而在NoSQL中除了這種規(guī)范化的外部數據表做法以外,我們還能用如下的非規(guī)范化方式把外部數據直接放到原數據集中,以提高查詢效率。缺點也比較明顯,更新審核人數據的時候將會比較麻煩。
4、SQL中的JOIN查詢
SQL中可以使用JOIN表鏈接方式將多個關系數據表中的數據用一條簡單的查詢語句查詢出來。NoSQL暫未提供類似JOIN的查詢方式對多個數據集中的數據做查詢。所以大部分NoSQL使用非規(guī)范化的數據存儲方式存儲數據。
5、數據耦合性
SQL中不允許刪除已經被使用的外部數據,例如審核人表中的"熊三"已經被分配給了借閱人熊大,那么在審核人表中將不允許刪除熊三這條數據,以保證數據完整性。而NoSQL中則沒有這種強耦合的概念,可以隨時刪除任何數據。
6、事務
SQL中如果多張表數據需要同批次被更新,即如果其中一張表更新失敗的話其他表也不能更新成功。這種場景可以通過事務來控制,可以在所有命令完成后再統(tǒng)一提交事務。而NoSQL中沒有事務這個概念,每一個數據集的操作都是原子級的。
7、增刪改查語法
8、查詢性能
在相同水平的系統(tǒng)設計的前提下,因為NoSQL中省略了JOIN查詢的消耗,故理論上性能上是優(yōu)于SQL的。
什么是NoSQL數據庫?從名稱“非SQL”或“非關系型”衍生而來,這些數據庫不使用類似SQL的查詢語言,通常稱為結構化存儲。這些數據庫自1960年就已經存在,但是直到現在一些大公司(例如Google和Facebook)開始使用它們時,這些數據庫才流行起來。該數據庫最明顯的優(yōu)勢是擺脫了一組固定的列、連接和類似SQL的查詢語言的限制。有時,NoSQL這個名稱也可能表示“不僅僅SQL”,來確保它們可能支持SQL。 NoSQL數據庫使用諸如鍵值、寬列、圖形或文檔之類的數據結構,并且可以如JSON之類的不同格式存儲。