天天看點

NoSQL簡單介紹nosql是個什麼東西?nosql為什麼會出現?NoSQL 沒毛病,為什麼 MySQL 還是“王”?分布式系統介紹:

   nosql(nosql = not only sql ),意即“不僅僅是sql”,是一項全新的資料庫革命性運動,早期就有人提出,發展至2009年趨勢越發高漲。nosql的擁護者們提倡運用非關系型的資料存儲,相對于鋪天蓋地的關系型資料庫運用,這一概念無疑是一種全新的思維的注入。簡單來說就是是一項全新的資料庫革命性運動。現在聽得比較多的nosql資料庫有redis、mongodb、hbase等。

  平時大家見到或聽到的資料庫類型如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 将退出舞台。然而,在目前的各種資料庫榜單中,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應用,随着網際網路企業的業務規模不斷增大,業務變得越來越複雜,并發使用者請求越來越多,要處理的資料也越來越多,這個時候企業級應用平台必須能夠适應這些變化,支援高并發通路和海量資料處理。分布式系統有良好的可擴充性,可以通過增加伺服器數量來增強分布式系統整體的處理能力,以應對企業的業務增長帶來的計算需求增加。