nosql是個什麼東西?
NoSQL(NoSQL = Not Only SQL ),意即「不只僅是SQL」,是一項全新的數據庫革命性運動,早期就有人提出,發展至2009年趨勢愈加高漲。NoSQL的擁護者們提倡運用非關係型的數據存儲,相對於鋪天蓋地的關係型數據庫運用,這一律念無疑是一種全新的思惟的注入。簡單來講就是是一項全新的數據庫革命性運動。如今聽得比較多的NoSQL數據庫有Redis、MongoDB、HBase等。mysql
nosql爲何會出現?
平時你們見到或聽到的數據庫類型如MySQL、Oracle 都是關係型數據庫,那麼提出 NoSQL這個非關係型數據庫固然就是爲了彌補關係型數據庫的一些缺點。
web
那麼關係型數據庫到底有那些缺點呢?
①High performance - 高併發時的性能問題,當數據庫處於高負荷運轉時,關係型數據庫的性能會遇到瓶頸,這個時候的數據庫操做會變得更加的費時,雖然可使用memcached解決,可是也會帶來hash不一致等問題.例如:web2.0網站要根據用戶個性化信息來實時生成動態頁面和提供動態信息,因此基本上沒法使用動態頁面靜態化技術,所以數據庫併發負載很是高,每每要達到每秒上萬次讀寫請求。關係數據庫應付上萬次SQL查詢還勉強頂得住,可是應付上萬次SQL寫數據請求,硬盤IO就已經沒法承受了。其實對於普通的BBS網站,每每也存在對高併發寫請求的需求。
②二、Huge Storage - 對海量數據的高效率存儲和訪問的需求。對於大型的SNS網站,天天用戶產生海量的用戶動態,以國外的Friendfeed爲例,一個月就達到了2.5億條用戶動態,對於關係數據庫來講,在一張2.5億條記錄的表裏面進行SQL查詢,效率是極其低下乃至不可忍受的。再例如大型web網站的用戶登陸系統
③High Scalability && High Availability- 對數據庫的高可擴展性和高可用性的需求。在基於web的架構當中,數據庫是最難進行橫向擴展的,當一個應用系統的用戶量和訪問量與日俱增的時候,你的數據庫卻沒有辦法像web server和app server那樣簡單的經過添加更多的硬件和服務節點來擴展性能和負載能力。對於不少須要提供24小時不間斷服務的網站來講,對數據庫系統進行升級和擴展是很是痛苦的事情,每每須要停機維護和數據遷移.
那麼非關係型數據庫到底有那些優點呢?
NoSQL的優點就在於解決以上問題,首先當數據之間解除關係依賴後,NoSQL的數據庫能夠輕易地部署在分佈式系統上,這樣經過多臺機器能夠分擔單一機器的高負荷,解決高負荷下的性能瓶頸問題。同時,因爲數據之間無關係,因此能夠隨時增長或刪除字段。還有,就是由於結構簡單,它的反應能力比關係型數據庫快多了。
總的來講,NoSQL有着高擴展性、分佈式計算、低成本、架構的靈活性、半結構化數據等特色。好比在存儲微博信息這種場景下,就是很是適合使用NoSQL數據庫。
sql
NoSQL 沒毛病,爲何 MySQL 仍是「王」?
NoSQL 出現時,許多人認爲關係型數據庫已進入死亡倒計時,MySQL 將退出舞臺。然而,在目前的各類數據庫榜單中,MySQL 依然保持着領先地位。更使人驚訝的是,雖然甲骨文的受歡迎程度在不斷降低,但 MySQL 保持着穩定。 爲何?並且前面看了一些阿里的講座,阿里的技術大佬說阿里用的就是MySQL數據庫。並且相關可靠數據顯示目前國內的科技公司幾乎都在使用MySQL。
不過 MongoDB 並無推翻 MySQL,也沒有擠垮 Apache Cassandra 或 Apache Hadoop,它們各自有拿得出手的專屬使用案例。部分緣由源於當今大多數大數據的性質:本質上仍然是事務性的。
這偏偏也是 MySQL 受歡迎的核心:它是最適合普遍數據庫從業人員技能的數據庫。他們甚至能夠利用從 Oracle、IBM DB2 和 Microsoft SQL Server 學習到的東西,將其應用到這個無處不在、免費和開源的數據庫。
Morgan所說:「NoSQL負責縮放,像咱們的生活同樣,有時會大吃一頓,有時卻要節食減肥,因此只有嚴格的紀律和謹慎的管理才能適用。」其次,擁有足夠多的用例,開發人員纔有動力嘗試,社區對於DBA來講也是很大的影響因素。Server Density CEO David Mytton 強調:咱們都想要RDS這樣的服務,Aurora解決了MySQL的不少痛點。
這也就是爲何MySQL在面世21年後(1996年MySQL 1.0發佈)成爲地球上最受歡迎的數據庫。它沒有像Oracle同樣貼上「企業級」的標籤,也沒有像NoSQL以「定製化」爲標籤來進行營銷,但它就是成爲了現代開發者的首選數據庫。
「免費」、「強大」、「成熟」數據庫
這三點就足以使得MySQL站在數據庫領域的頂峯,笑傲江湖。編程
分佈式系統介紹:
分佈式系統的核心理念是讓多臺服務器協同工做,完成單臺服務器沒法處理的任務,尤爲是高併發或者大數據量的任務。分佈式是NoSQL數據庫的必要條件。
分佈式系統由獨立的服務器經過網絡鬆散耦合組成的。每一個服務器都是一臺獨立的PC機,服務器之間經過內部網絡鏈接,內部網絡速度通常比較快。由於分佈式集羣裏的服務器是經過內部網絡鬆散耦合,各節點之間的通信有必定的網絡開銷,所以分佈式系統在設計上儘量減小節點間通信。此外,由於網絡傳輸瓶頸,單個節點的性能高低對分佈式系統總體性能影響不大。好比,對分佈式應用來講,採用不一樣編程語言開發帶來的單個應用服務的性能差別,跟網絡開銷比起來均可以忽略不計。
所以,分佈式系統每一個節點通常不採用高性能的服務器,而是使用性能相對通常的普通PC服務器。提高分佈式系統的總體性能是經過橫向擴展(增長更多的服務器),而不是縱向擴展(提高每一個節點的服務器性能)實現。
分佈式系統最大的特色是可擴展性,它可以適應需求變化而擴展。企業級應用需求常常隨時間而不斷變化,這也對企業級應用平臺提出了很高的要求。企業級應用平臺必需要能適應需求的變化,即具備可擴展性。好比移動互聯網2C應用,隨着互聯網企業的業務規模不斷增大,業務變得愈來愈複雜,併發用戶請求愈來愈多,要處理的數據也愈來愈多,這個時候企業級應用平臺必須可以適應這些變化,支持高併發訪問和海量數據處理。分佈式系統有良好的可擴展性,能夠經過增長服務器數量來加強分佈式系統總體的處理能力,以應對企業的業務增加帶來的計算需求增長。服務器