NoSQL简单介绍
nosql是個(gè)什么東西?
NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,是一項(xiàng)全新的數(shù)據(jù)庫(kù)革命性運(yùn)動(dòng),早期就有人提出,發(fā)展至2009年趨勢(shì)越發(fā)高漲。NoSQL的擁護(hù)者們提倡運(yùn)用非關(guān)系型的數(shù)據(jù)存儲(chǔ),相對(duì)于鋪天蓋地的關(guān)系型數(shù)據(jù)庫(kù)運(yùn)用,這一概念無(wú)疑是一種全新的思維的注入。簡(jiǎn)單來(lái)說(shuō)就是是一項(xiàng)全新的數(shù)據(jù)庫(kù)革命性運(yùn)動(dòng)。現(xiàn)在聽(tīng)得比較多的NoSQL數(shù)據(jù)庫(kù)有Redis、MongoDB、HBase等。
nosql為什么會(huì)出現(xiàn)?
平時(shí)大家見(jiàn)到或聽(tīng)到的數(shù)據(jù)庫(kù)類(lèi)型如MySQL、Oracle 都是關(guān)系型數(shù)據(jù)庫(kù),那么提出 NoSQL這個(gè)非關(guān)系型數(shù)據(jù)庫(kù)當(dāng)然就是為了彌補(bǔ)關(guān)系型數(shù)據(jù)庫(kù)的一些缺點(diǎn)。
那么關(guān)系型數(shù)據(jù)庫(kù)到底有那些缺點(diǎn)呢?
①High performance - 高并發(fā)時(shí)的性能問(wèn)題,當(dāng)數(shù)據(jù)庫(kù)處于高負(fù)荷運(yùn)轉(zhuǎn)時(shí),關(guān)系型數(shù)據(jù)庫(kù)的性能會(huì)遇到瓶頸,這個(gè)時(shí)候的數(shù)據(jù)庫(kù)操作會(huì)變得更加的費(fèi)時(shí),雖然可以使用memcached解決,但是也會(huì)帶來(lái)hash不一致等問(wèn)題.例如:web2.0網(wǎng)站要根據(jù)用戶個(gè)性化信息來(lái)實(shí)時(shí)生成動(dòng)態(tài)頁(yè)面和提供動(dòng)態(tài)信息,所以基本上無(wú)法使用動(dòng)態(tài)頁(yè)面靜態(tài)化技術(shù),因此數(shù)據(jù)庫(kù)并發(fā)負(fù)載非常高,往往要達(dá)到每秒上萬(wàn)次讀寫(xiě)請(qǐng)求。關(guān)系數(shù)據(jù)庫(kù)應(yīng)付上萬(wàn)次SQL查詢還勉強(qiáng)頂?shù)米?#xff0c;但是應(yīng)付上萬(wàn)次SQL寫(xiě)數(shù)據(jù)請(qǐng)求,硬盤(pán)IO就已經(jīng)無(wú)法承受了。其實(shí)對(duì)于普通的BBS網(wǎng)站,往往也存在對(duì)高并發(fā)寫(xiě)請(qǐng)求的需求。
②2、Huge Storage - 對(duì)海量數(shù)據(jù)的高效率存儲(chǔ)和訪問(wèn)的需求。對(duì)于大型的SNS網(wǎng)站,每天用戶產(chǎn)生海量的用戶動(dòng)態(tài),以國(guó)外的Friendfeed為例,一個(gè)月就達(dá)到了2.5億條用戶動(dòng)態(tài),對(duì)于關(guān)系數(shù)據(jù)庫(kù)來(lái)說(shuō),在一張2.5億條記錄的表里面進(jìn)行SQL查詢,效率是極其低下乃至不可忍受的。再例如大型web網(wǎng)站的用戶登錄系統(tǒng)
③High Scalability && High Availability- 對(duì)數(shù)據(jù)庫(kù)的高可擴(kuò)展性和高可用性的需求。在基于web的架構(gòu)當(dāng)中,數(shù)據(jù)庫(kù)是最難進(jìn)行橫向擴(kuò)展的,當(dāng)一個(gè)應(yīng)用系統(tǒng)的用戶量和訪問(wèn)量與日俱增的時(shí)候,你的數(shù)據(jù)庫(kù)卻沒(méi)有辦法像web server和app server那樣簡(jiǎn)單的通過(guò)添加更多的硬件和服務(wù)節(jié)點(diǎn)來(lái)擴(kuò)展性能和負(fù)載能力。對(duì)于很多需要提供24小時(shí)不間斷服務(wù)的網(wǎng)站來(lái)說(shuō),對(duì)數(shù)據(jù)庫(kù)系統(tǒng)進(jìn)行升級(jí)和擴(kuò)展是非常痛苦的事情,往往需要停機(jī)維護(hù)和數(shù)據(jù)遷移.
那么非關(guān)系型數(shù)據(jù)庫(kù)到底有那些優(yōu)勢(shì)呢?
NoSQL的優(yōu)勢(shì)就在于解決以上問(wèn)題,首先當(dāng)數(shù)據(jù)之間解除關(guān)系依賴后,NoSQL的數(shù)據(jù)庫(kù)可以輕易地部署在分布式系統(tǒng)上,這樣通過(guò)多臺(tái)機(jī)器可以分擔(dān)單一機(jī)器的高負(fù)荷,解決高負(fù)荷下的性能瓶頸問(wèn)題。同時(shí),由于數(shù)據(jù)之間無(wú)關(guān)系,所以可以隨時(shí)增加或刪除字段。還有,就是因?yàn)榻Y(jié)構(gòu)簡(jiǎn)單,它的反應(yīng)能力比關(guān)系型數(shù)據(jù)庫(kù)快多了。
總的來(lái)說(shuō),NoSQL有著高擴(kuò)展性、分布式計(jì)算、低成本、架構(gòu)的靈活性、半結(jié)構(gòu)化數(shù)據(jù)等特點(diǎn)。比如在存儲(chǔ)微博信息這種場(chǎng)景下,就是非常適合使用NoSQL數(shù)據(jù)庫(kù)。
NoSQL 沒(méi)毛病,為什么 MySQL 還是“王”?
NoSQL 出現(xiàn)時(shí),許多人認(rèn)為關(guān)系型數(shù)據(jù)庫(kù)已進(jìn)入死亡倒計(jì)時(shí),MySQL 將退出舞臺(tái)。然而,在目前的各種數(shù)據(jù)庫(kù)榜單中,MySQL 依然保持著領(lǐng)先地位。更令人驚訝的是,雖然甲骨文的受歡迎程度在不斷下降,但 MySQL 保持著穩(wěn)定。 為什么?而且前面看了一些阿里的講座,阿里的技術(shù)大佬說(shuō)阿里用的就是MySQL數(shù)據(jù)庫(kù)。而且相關(guān)可靠數(shù)據(jù)顯示目前國(guó)內(nèi)的科技公司幾乎都在使用MySQL。
不過(guò) MongoDB 并沒(méi)有推翻 MySQL,也沒(méi)有擠垮 Apache Cassandra 或 Apache Hadoop,它們各自有拿得出手的專屬使用案例。部分原因源于當(dāng)今大多數(shù)大數(shù)據(jù)的性質(zhì):本質(zhì)上仍然是事務(wù)性的。
這恰恰也是 MySQL 受歡迎的核心:它是最適合廣泛數(shù)據(jù)庫(kù)從業(yè)人員技能的數(shù)據(jù)庫(kù)。他們甚至可以利用從 Oracle、IBM DB2 和 Microsoft SQL Server 學(xué)習(xí)到的東西,將其應(yīng)用到這個(gè)無(wú)處不在、免費(fèi)和開(kāi)源的數(shù)據(jù)庫(kù)。
Morgan所說(shuō):“NoSQL負(fù)責(zé)縮放,像我們的生活一樣,有時(shí)會(huì)大吃一頓,有時(shí)卻要節(jié)食減肥,所以只有嚴(yán)格的紀(jì)律和謹(jǐn)慎的管理才能適用。”其次,擁有足夠多的用例,開(kāi)發(fā)人員才有動(dòng)力嘗試,社區(qū)對(duì)于DBA來(lái)說(shuō)也是很大的影響因素。Server Density CEO David Mytton 強(qiáng)調(diào):我們都想要RDS這樣的服務(wù),Aurora解決了MySQL的很多痛點(diǎn)。
這也就是為什么MySQL在面世21年后(1996年MySQL 1.0發(fā)布)成為地球上最受歡迎的數(shù)據(jù)庫(kù)。它沒(méi)有像Oracle一樣貼上“企業(yè)級(jí)”的標(biāo)簽,也沒(méi)有像NoSQL以“定制化”為標(biāo)簽來(lái)進(jìn)行營(yíng)銷(xiāo),但它就是成為了現(xiàn)代開(kāi)發(fā)者的首選數(shù)據(jù)庫(kù)。
“免費(fèi)”、“強(qiáng)大”、“成熟”
這三點(diǎn)就足以使得MySQL站在數(shù)據(jù)庫(kù)領(lǐng)域的頂峰,笑傲江湖。
分布式系統(tǒng)介紹:
分布式系統(tǒng)的核心理念是讓多臺(tái)服務(wù)器協(xié)同工作,完成單臺(tái)服務(wù)器無(wú)法處理的任務(wù),尤其是高并發(fā)或者大數(shù)據(jù)量的任務(wù)。分布式是NoSQL數(shù)據(jù)庫(kù)的必要條件。
分布式系統(tǒng)由獨(dú)立的服務(wù)器通過(guò)網(wǎng)絡(luò)松散耦合組成的。每個(gè)服務(wù)器都是一臺(tái)獨(dú)立的PC機(jī),服務(wù)器之間通過(guò)內(nèi)部網(wǎng)絡(luò)連接,內(nèi)部網(wǎng)絡(luò)速度一般比較快。因?yàn)榉植际郊豪锏姆?wù)器是通過(guò)內(nèi)部網(wǎng)絡(luò)松散耦合,各節(jié)點(diǎn)之間的通訊有一定的網(wǎng)絡(luò)開(kāi)銷(xiāo),因此分布式系統(tǒng)在設(shè)計(jì)上盡可能減少節(jié)點(diǎn)間通訊。此外,因?yàn)榫W(wǎng)絡(luò)傳輸瓶頸,單個(gè)節(jié)點(diǎn)的性能高低對(duì)分布式系統(tǒng)整體性能影響不大。比如,對(duì)分布式應(yīng)用來(lái)說(shuō),采用不同編程語(yǔ)言開(kāi)發(fā)帶來(lái)的單個(gè)應(yīng)用服務(wù)的性能差異,跟網(wǎng)絡(luò)開(kāi)銷(xiāo)比起來(lái)都可以忽略不計(jì)。
因此,分布式系統(tǒng)每個(gè)節(jié)點(diǎn)一般不采用高性能的服務(wù)器,而是使用性能相對(duì)一般的普通PC服務(wù)器。提升分布式系統(tǒng)的整體性能是通過(guò)橫向擴(kuò)展(增加更多的服務(wù)器),而不是縱向擴(kuò)展(提升每個(gè)節(jié)點(diǎn)的服務(wù)器性能)實(shí)現(xiàn)。
分布式系統(tǒng)最大的特點(diǎn)是可擴(kuò)展性,它能夠適應(yīng)需求變化而擴(kuò)展。企業(yè)級(jí)應(yīng)用需求經(jīng)常隨時(shí)間而不斷變化,這也對(duì)企業(yè)級(jí)應(yīng)用平臺(tái)提出了很高的要求。企業(yè)級(jí)應(yīng)用平臺(tái)必須要能適應(yīng)需求的變化,即具有可擴(kuò)展性。比如移動(dòng)互聯(lián)網(wǎng)2C應(yīng)用,隨著互聯(lián)網(wǎng)企業(yè)的業(yè)務(wù)規(guī)模不斷增大,業(yè)務(wù)變得越來(lái)越復(fù)雜,并發(fā)用戶請(qǐng)求越來(lái)越多,要處理的數(shù)據(jù)也越來(lái)越多,這個(gè)時(shí)候企業(yè)級(jí)應(yīng)用平臺(tái)必須能夠適應(yīng)這些變化,支持高并發(fā)訪問(wèn)和海量數(shù)據(jù)處理。分布式系統(tǒng)有良好的可擴(kuò)展性,可以通過(guò)增加服務(wù)器數(shù)量來(lái)增強(qiáng)分布式系統(tǒng)整體的處理能力,以應(yīng)對(duì)企業(yè)的業(yè)務(wù)增長(zhǎng)帶來(lái)的計(jì)算需求增加。
轉(zhuǎn)載于:https://www.cnblogs.com/snailclimb/p/9086505.html
總結(jié)
- 上一篇: 二分查找、upper_bound、low
- 下一篇: oracle创建数据库步骤