NoSQL简单介绍
nosql是個什么東西?
NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,是一項全新的數據庫革命性運動,早期就有人提出,發展至2009年趨勢越發高漲。NoSQL的擁護者們提倡運用非關系型的數據存儲,相對于鋪天蓋地的關系型數據庫運用,這一概念無疑是一種全新的思維的注入。簡單來說就是是一項全新的數據庫革命性運動。現在聽得比較多的NoSQL數據庫有Redis、MongoDB、HBase等。
nosql為什么會出現?
平時大家見到或聽到的數據庫類型如MySQL、Oracle 都是關系型數據庫,那么提出 NoSQL這個非關系型數據庫當然就是為了彌補關系型數據庫的一些缺點。
那么關系型數據庫到底有那些缺點呢?
①High performance - 高并發時的性能問題,當數據庫處于高負荷運轉時,關系型數據庫的性能會遇到瓶頸,這個時候的數據庫操作會變得更加的費時,雖然可以使用memcached解決,但是也會帶來hash不一致等問題.例如:web2.0網站要根據用戶個性化信息來實時生成動態頁面和提供動態信息,所以基本上無法使用動態頁面靜態化技術,因此數據庫并發負載非常高,往往要達到每秒上萬次讀寫請求。關系數據庫應付上萬次SQL查詢還勉強頂得住,但是應付上萬次SQL寫數據請求,硬盤IO就已經無法承受了。其實對于普通的BBS網站,往往也存在對高并發寫請求的需求。
②2、Huge Storage - 對海量數據的高效率存儲和訪問的需求。對于大型的SNS網站,每天用戶產生海量的用戶動態,以國外的Friendfeed為例,一個月就達到了2.5億條用戶動態,對于關系數據庫來說,在一張2.5億條記錄的表里面進行SQL查詢,效率是極其低下乃至不可忍受的。再例如大型web網站的用戶登錄系統
③High Scalability && High Availability- 對數據庫的高可擴展性和高可用性的需求。在基于web的架構當中,數據庫是最難進行橫向擴展的,當一個應用系統的用戶量和訪問量與日俱增的時候,你的數據庫卻沒有辦法像web server和app server那樣簡單的通過添加更多的硬件和服務節點來擴展性能和負載能力。對于很多需要提供24小時不間斷服務的網站來說,對數據庫系統進行升級和擴展是非常痛苦的事情,往往需要停機維護和數據遷移.
那么非關系型數據庫到底有那些優勢呢?
NoSQL的優勢就在于解決以上問題,首先當數據之間解除關系依賴后,NoSQL的數據庫可以輕易地部署在分布式系統上,這樣通過多臺機器可以分擔單一機器的高負荷,解決高負荷下的性能瓶頸問題。同時,由于數據之間無關系,所以可以隨時增加或刪除字段。還有,就是因為結構簡單,它的反應能力比關系型數據庫快多了。
總的來說,NoSQL有著高擴展性、分布式計算、低成本、架構的靈活性、半結構化數據等特點。比如在存儲微博信息這種場景下,就是非常適合使用NoSQL數據庫。
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應用,隨著互聯網企業的業務規模不斷增大,業務變得越來越復雜,并發用戶請求越來越多,要處理的數據也越來越多,這個時候企業級應用平臺必須能夠適應這些變化,支持高并發訪問和海量數據處理。分布式系統有良好的可擴展性,可以通過增加服務器數量來增強分布式系統整體的處理能力,以應對企業的業務增長帶來的計算需求增加。
轉載于:https://www.cnblogs.com/snailclimb/p/9086505.html
總結
- 上一篇: 二分查找、upper_bound、low
- 下一篇: BZOJ 1968 [Ahoi2005]