真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

nosql歷史,Nosql

大數(shù)據(jù)時(shí)代發(fā)展歷程是什么?

大數(shù)據(jù)技術(shù)發(fā)展史:大數(shù)據(jù)的前世今生

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信平臺(tái)小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了孝昌免費(fèi)建站歡迎大家使用!

今天我們常說(shuō)的大數(shù)據(jù)技術(shù),其實(shí)起源于Google在2004年前后發(fā)表的三篇論文,也就是我們經(jīng)常聽(tīng)到的“三駕馬車(chē)”,分別是分布式文件系統(tǒng)GFS、大數(shù)據(jù)分布式計(jì)算框架MapReduce和NoSQL數(shù)據(jù)庫(kù)系統(tǒng)BigTable。

你知道,搜索引擎主要就做兩件事情,一個(gè)是網(wǎng)頁(yè)抓取,一個(gè)是索引構(gòu)建,而在這個(gè)過(guò)程中,有大量的數(shù)據(jù)需要存儲(chǔ)和計(jì)算。這“三駕馬車(chē)”其實(shí)就是用來(lái)解決這個(gè)問(wèn)題的,你從介紹中也能看出來(lái),一個(gè)文件系統(tǒng)、一個(gè)計(jì)算框架、一個(gè)數(shù)據(jù)庫(kù)系統(tǒng)。

現(xiàn)在你聽(tīng)到分布式、大數(shù)據(jù)之類(lèi)的詞,肯定一點(diǎn)兒也不陌生。但你要知道,在2004年那會(huì)兒,整個(gè)互聯(lián)網(wǎng)還處于懵懂時(shí)代,Google發(fā)布的論文實(shí)在是讓業(yè)界為之一振,大家恍然大悟,原來(lái)還可以這么玩。

因?yàn)槟莻€(gè)時(shí)間段,大多數(shù)公司的關(guān)注點(diǎn)其實(shí)還是聚焦在單機(jī)上,在思考如何提升單機(jī)的性能,尋找更貴更好的服務(wù)器。而Google的思路是部署一個(gè)大規(guī)模的服務(wù)器集群,通過(guò)分布式的方式將海量數(shù)據(jù)存儲(chǔ)在這個(gè)集群上,然后利用集群上的所有機(jī)器進(jìn)行數(shù)據(jù)計(jì)算。 這樣,Google其實(shí)不需要買(mǎi)很多很貴的服務(wù)器,它只要把這些普通的機(jī)器組織到一起,就非常厲害了。

當(dāng)時(shí)的天才程序員,也是Lucene開(kāi)源項(xiàng)目的創(chuàng)始人Doug Cutting正在開(kāi)發(fā)開(kāi)源搜索引擎Nutch,閱讀了Google的論文后,他非常興奮,緊接著就根據(jù)論文原理初步實(shí)現(xiàn)了類(lèi)似GFS和MapReduce的功能。

兩年后的2006年,Doug Cutting將這些大數(shù)據(jù)相關(guān)的功能從Nutch中分離了出來(lái),然后啟動(dòng)了一個(gè)獨(dú)立的項(xiàng)目專門(mén)開(kāi)發(fā)維護(hù)大數(shù)據(jù)技術(shù),這就是后來(lái)赫赫有名的Hadoop,主要包括Hadoop分布式文件系統(tǒng)HDFS和大數(shù)據(jù)計(jì)算引擎MapReduce。

當(dāng)我們回顧軟件開(kāi)發(fā)的歷史,包括我們自己開(kāi)發(fā)的軟件,你會(huì)發(fā)現(xiàn),有的軟件在開(kāi)發(fā)出來(lái)以后無(wú)人問(wèn)津或者寥寥數(shù)人使用,這樣的軟件其實(shí)在所有開(kāi)發(fā)出來(lái)的軟件中占大多數(shù)。而有的軟件則可能會(huì)開(kāi)創(chuàng)一個(gè)行業(yè),每年創(chuàng)造數(shù)百億美元的價(jià)值,創(chuàng)造百萬(wàn)計(jì)的就業(yè)崗位,這些軟件曾經(jīng)是Windows、Linux、Java,而現(xiàn)在這個(gè)名單要加上Hadoop的名字。

如果有時(shí)間,你可以簡(jiǎn)單瀏覽下Hadoop的代碼,這個(gè)純用Java編寫(xiě)的軟件其實(shí)并沒(méi)有什么高深的技術(shù)難點(diǎn),使用的也都是一些最基礎(chǔ)的編程技巧,也沒(méi)有什么出奇之處,但是它卻給社會(huì)帶來(lái)巨大的影響,甚至帶動(dòng)一場(chǎng)深刻的科技革命,推動(dòng)了人工智能的發(fā)展與進(jìn)步。

我覺(jué)得,我們?cè)谧鲕浖_(kāi)發(fā)的時(shí)候,也可以多思考一下,我們所開(kāi)發(fā)軟件的價(jià)值點(diǎn)在哪里?真正需要使用軟件實(shí)現(xiàn)價(jià)值的地方在哪里?你應(yīng)該關(guān)注業(yè)務(wù)、理解業(yè)務(wù),有價(jià)值導(dǎo)向,用自己的技術(shù)為公司創(chuàng)造真正的價(jià)值,進(jìn)而實(shí)現(xiàn)自己的人生價(jià)值。而不是整天埋頭在需求說(shuō)明文檔里,做一個(gè)沒(méi)有思考的代碼機(jī)器人。

Hadoop發(fā)布之后,Yahoo很快就用了起來(lái)。大概又過(guò)了一年到了2007年,百度和阿里巴巴也開(kāi)始使用Hadoop進(jìn)行大數(shù)據(jù)存儲(chǔ)與計(jì)算。

2008年,Hadoop正式成為Apache的頂級(jí)項(xiàng)目,后來(lái)Doug Cutting本人也成為了Apache基金會(huì)的主席。自此,Hadoop作為軟件開(kāi)發(fā)領(lǐng)域的一顆明星冉冉升起。

同年,專門(mén)運(yùn)營(yíng)Hadoop的商業(yè)公司Cloudera成立,Hadoop得到進(jìn)一步的商業(yè)支持。

這個(gè)時(shí)候,Yahoo的一些人覺(jué)得用MapReduce進(jìn)行大數(shù)據(jù)編程太麻煩了,于是便開(kāi)發(fā)了Pig。Pig是一種腳本語(yǔ)言,使用類(lèi)SQL的語(yǔ)法,開(kāi)發(fā)者可以用Pig腳本描述要對(duì)大數(shù)據(jù)集上進(jìn)行的操作,Pig經(jīng)過(guò)編譯后會(huì)生成MapReduce程序,然后在Hadoop上運(yùn)行。

編寫(xiě)Pig腳本雖然比直接MapReduce編程容易,但是依然需要學(xué)習(xí)新的腳本語(yǔ)法。于是Facebook又發(fā)布了Hive。Hive支持使用SQL語(yǔ)法來(lái)進(jìn)行大數(shù)據(jù)計(jì)算,比如說(shuō)你可以寫(xiě)個(gè)Select語(yǔ)句進(jìn)行數(shù)據(jù)查詢,然后Hive會(huì)把SQL語(yǔ)句轉(zhuǎn)化成MapReduce的計(jì)算程序。

這樣,熟悉數(shù)據(jù)庫(kù)的數(shù)據(jù)分析師和工程師便可以無(wú)門(mén)檻地使用大數(shù)據(jù)進(jìn)行數(shù)據(jù)分析和處理了。Hive出現(xiàn)后極大程度地降低了Hadoop的使用難度,迅速得到開(kāi)發(fā)者和企業(yè)的追捧。據(jù)說(shuō),2011年的時(shí)候,F(xiàn)acebook大數(shù)據(jù)平臺(tái)上運(yùn)行的作業(yè)90%都來(lái)源于Hive。

隨后,眾多Hadoop周邊產(chǎn)品開(kāi)始出現(xiàn),大數(shù)據(jù)生態(tài)體系逐漸形成,其中包括:專門(mén)將關(guān)系數(shù)據(jù)庫(kù)中的數(shù)據(jù)導(dǎo)入導(dǎo)出到Hadoop平臺(tái)的Sqoop;針對(duì)大規(guī)模日志進(jìn)行分布式收集、聚合和傳輸?shù)腇lume;MapReduce工作流調(diào)度引擎Oozie等。

在Hadoop早期,MapReduce既是一個(gè)執(zhí)行引擎,又是一個(gè)資源調(diào)度框架,服務(wù)器集群的資源調(diào)度管理由MapReduce自己完成。但是這樣不利于資源復(fù)用,也使得MapReduce非常臃腫。于是一個(gè)新項(xiàng)目啟動(dòng)了,將MapReduce執(zhí)行引擎和資源調(diào)度分離開(kāi)來(lái),這就是Yarn。2012年,Yarn成為一個(gè)獨(dú)立的項(xiàng)目開(kāi)始運(yùn)營(yíng),隨后被各類(lèi)大數(shù)據(jù)產(chǎn)品支持,成為大數(shù)據(jù)平臺(tái)上最主流的資源調(diào)度系統(tǒng)。

同樣是在2012年,UC伯克利AMP實(shí)驗(yàn)室(Algorithms、Machine和People的縮寫(xiě))開(kāi)發(fā)的Spark開(kāi)始嶄露頭角。當(dāng)時(shí)AMP實(shí)驗(yàn)室的馬鐵博士發(fā)現(xiàn)使用MapReduce進(jìn)行機(jī)器學(xué)習(xí)計(jì)算的時(shí)候性能非常差,因?yàn)闄C(jī)器學(xué)習(xí)算法通常需要進(jìn)行很多次的迭代計(jì)算,而MapReduce每執(zhí)行一次Map和Reduce計(jì)算都需要重新啟動(dòng)一次作業(yè),帶來(lái)大量的無(wú)謂消耗。還有一點(diǎn)就是MapReduce主要使用磁盤(pán)作為存儲(chǔ)介質(zhì),而2012年的時(shí)候,內(nèi)存已經(jīng)突破容量和成本限制,成為數(shù)據(jù)運(yùn)行過(guò)程中主要的存儲(chǔ)介質(zhì)。Spark一經(jīng)推出,立即受到業(yè)界的追捧,并逐步替代MapReduce在企業(yè)應(yīng)用中的地位。

一般說(shuō)來(lái),像MapReduce、Spark這類(lèi)計(jì)算框架處理的業(yè)務(wù)場(chǎng)景都被稱作批處理計(jì)算,因?yàn)樗鼈兺ǔa槍?duì)以“天”為單位產(chǎn)生的數(shù)據(jù)進(jìn)行一次計(jì)算,然后得到需要的結(jié)果,這中間計(jì)算需要花費(fèi)的時(shí)間大概是幾十分鐘甚至更長(zhǎng)的時(shí)間。因?yàn)橛?jì)算的數(shù)據(jù)是非在線得到的實(shí)時(shí)數(shù)據(jù),而是歷史數(shù)據(jù),所以這類(lèi)計(jì)算也被稱為大數(shù)據(jù)離線計(jì)算。

而在大數(shù)據(jù)領(lǐng)域,還有另外一類(lèi)應(yīng)用場(chǎng)景,它們需要對(duì)實(shí)時(shí)產(chǎn)生的大量數(shù)據(jù)進(jìn)行即時(shí)計(jì)算,比如對(duì)于遍布城市的監(jiān)控?cái)z像頭進(jìn)行人臉識(shí)別和嫌犯追蹤。這類(lèi)計(jì)算稱為大數(shù)據(jù)流計(jì)算,相應(yīng)地,有Storm、Flink、Spark Streaming等流計(jì)算框架來(lái)滿足此類(lèi)大數(shù)據(jù)應(yīng)用的場(chǎng)景。 流式計(jì)算要處理的數(shù)據(jù)是實(shí)時(shí)在線產(chǎn)生的數(shù)據(jù),所以這類(lèi)計(jì)算也被稱為大數(shù)據(jù)實(shí)時(shí)計(jì)算。

在典型的大數(shù)據(jù)的業(yè)務(wù)場(chǎng)景下,數(shù)據(jù)業(yè)務(wù)最通用的做法是,采用批處理的技術(shù)處理歷史全量數(shù)據(jù),采用流式計(jì)算處理實(shí)時(shí)新增數(shù)據(jù)。而像Flink這樣的計(jì)算引擎,可以同時(shí)支持流式計(jì)算和批處理計(jì)算。

除了大數(shù)據(jù)批處理和流處理,NoSQL系統(tǒng)處理的主要也是大規(guī)模海量數(shù)據(jù)的存儲(chǔ)與訪問(wèn),所以也被歸為大數(shù)據(jù)技術(shù)。 NoSQL曾經(jīng)在2011年左右非?;鸨楷F(xiàn)出HBase、Cassandra等許多優(yōu)秀的產(chǎn)品,其中HBase是從Hadoop中分離出來(lái)的、基于HDFS的NoSQL系統(tǒng)。

我們回顧軟件發(fā)展的歷史會(huì)發(fā)現(xiàn),差不多類(lèi)似功能的軟件,它們出現(xiàn)的時(shí)間都非常接近,比如Linux和Windows都是在90年代初出現(xiàn),Java開(kāi)發(fā)中的各類(lèi)MVC框架也基本都是同期出現(xiàn),Android和iOS也是前腳后腳問(wèn)世。2011年前后,各種NoSQL數(shù)據(jù)庫(kù)也是層出不群,我也是在那個(gè)時(shí)候參與開(kāi)發(fā)了阿里巴巴自己的NoSQL系統(tǒng)。

事物發(fā)展有自己的潮流和規(guī)律,當(dāng)你身處潮流之中的時(shí)候,要緊緊抓住潮流的機(jī)會(huì),想辦法脫穎而出,即使沒(méi)有成功,也會(huì)更加洞悉時(shí)代的脈搏,收獲珍貴的知識(shí)和經(jīng)驗(yàn)。而如果潮流已經(jīng)退去,這個(gè)時(shí)候再去往這個(gè)方向上努力,只會(huì)收獲迷茫與壓抑,對(duì)時(shí)代、對(duì)自己都沒(méi)有什么幫助。

但是時(shí)代的浪潮猶如海灘上的浪花,總是一浪接著一浪,只要你站在海邊,身處這個(gè)行業(yè)之中,下一個(gè)浪潮很快又會(huì)到來(lái)。你需要敏感而又深刻地去觀察,略去那些浮躁的泡沫,抓住真正潮流的機(jī)會(huì),奮力一搏,不管成敗,都不會(huì)遺憾。

正所謂在歷史前進(jìn)的邏輯中前進(jìn),在時(shí)代發(fā)展的潮流中發(fā)展。通俗的說(shuō),就是要在風(fēng)口中飛翔。

上面我講的這些基本上都可以歸類(lèi)為大數(shù)據(jù)引擎或者大數(shù)據(jù)框架。而大數(shù)據(jù)處理的主要應(yīng)用場(chǎng)景包括數(shù)據(jù)分析、數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)。數(shù)據(jù)分析主要使用Hive、Spark SQL等SQL引擎完成;數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)則有專門(mén)的機(jī)器學(xué)習(xí)框架TensorFlow、Mahout以及MLlib等,內(nèi)置了主要的機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘算法。

此外,大數(shù)據(jù)要存入分布式文件系統(tǒng)(HDFS),要有序調(diào)度MapReduce和Spark作業(yè)執(zhí)行,并能把執(zhí)行結(jié)果寫(xiě)入到各個(gè)應(yīng)用系統(tǒng)的數(shù)據(jù)庫(kù)中,還需要有一個(gè)大數(shù)據(jù)平臺(tái)整合所有這些大數(shù)據(jù)組件和企業(yè)應(yīng)用系統(tǒng)。

圖中的所有這些框架、平臺(tái)以及相關(guān)的算法共同構(gòu)成了大數(shù)據(jù)的技術(shù)體系,我將會(huì)在專欄后面逐個(gè)分析,幫你能夠?qū)Υ髷?shù)據(jù)技術(shù)原理和應(yīng)用算法構(gòu)建起完整的知識(shí)體系,進(jìn)可以專職從事大數(shù)據(jù)開(kāi)發(fā),退可以在自己的應(yīng)用開(kāi)發(fā)中更好地和大數(shù)據(jù)集成,掌控自己的項(xiàng)目。

希望對(duì)您有所幫助!~

NoSQL 數(shù)據(jù)庫(kù):何時(shí)使用 NoSQL 與 SQL?

NoSQL 數(shù)據(jù)庫(kù)因其功能性、易于開(kāi)發(fā)性和可擴(kuò)展性而廣受認(rèn)可,它們?cè)絹?lái)越多地用于大數(shù)據(jù)和實(shí)時(shí) Web 應(yīng)用程序,在本文中,我們通過(guò)示例討論 NoSQL、何時(shí)使用 NoSQL 與 SQL 及其用例。

NoSQL是一種下一代數(shù)據(jù)庫(kù)管理系統(tǒng) (DBMS)。NoSQL 數(shù)據(jù)庫(kù)具有靈活的模式,可用于構(gòu)建具有大量數(shù)據(jù)和高負(fù)載的現(xiàn)代應(yīng)用程序。

“NoSQL”一詞最初是由 Carlo Strozzi 在 1998 年創(chuàng)造的,盡管自 1960 年代后期以來(lái)就已經(jīng)存在類(lèi)似的數(shù)據(jù)庫(kù)。然而,NoSQL 的發(fā)展始于 2009 年初,并且發(fā)展迅速。

在處理大量數(shù)據(jù)時(shí),任何關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng) (RDBMS) 的響應(yīng)時(shí)間都會(huì)變慢。為了解決這個(gè)問(wèn)題,我們可以通過(guò)升級(jí)現(xiàn)有硬件來(lái)“擴(kuò)大”信息系統(tǒng),這非常昂貴。但是,NoSQL 可以更好地橫向擴(kuò)展并且更具成本效益。

NoSQL 對(duì)于非結(jié)構(gòu)化或非常大的數(shù)據(jù)對(duì)象(例如聊天日志數(shù)據(jù)、視頻或圖像)非常有用,這就是為什么 NoSQL 在微軟、谷歌、亞馬遜、Meta (Facebook) 等互聯(lián)網(wǎng)巨頭中特別受歡迎的原因。

一些流行的 NoSQL 數(shù)據(jù)庫(kù)包括:

隨著企業(yè)更快地積累更大的數(shù)據(jù)集,結(jié)構(gòu)化數(shù)據(jù)和關(guān)系模式并不總是適合。有必要使用非結(jié)構(gòu)化數(shù)據(jù)和大型對(duì)象來(lái)更好地捕獲這些信息。

傳統(tǒng)的 RDBMS 使用 SQL(結(jié)構(gòu)化查詢語(yǔ)言)語(yǔ)法來(lái)存儲(chǔ)和檢索結(jié)構(gòu)化數(shù)據(jù),相反,NoSQL 數(shù)據(jù)庫(kù)包含廣泛的功能,可以存儲(chǔ)和檢索結(jié)構(gòu)化、半結(jié)構(gòu)化、非結(jié)構(gòu)化和多態(tài)數(shù)據(jù)。

有時(shí),NoSQL 也被稱為“ 不僅僅是 SQL ”,強(qiáng)調(diào)它可能支持類(lèi)似 SQL 的語(yǔ)言或與 SQL 數(shù)據(jù)庫(kù)并列。SQL 和 NoSQL DBMS 之間的一個(gè)區(qū)別是 JOIN 功能。SQL 數(shù)據(jù)庫(kù)使用 JOIN 子句來(lái)組合來(lái)自兩個(gè)或多個(gè)表的行,因?yàn)?NoSQL 數(shù)據(jù)庫(kù)本質(zhì)上不是表格的,所以這個(gè)功能并不總是可行或相關(guān)的。

但是,一些 NoSQL DBMS 可以執(zhí)行類(lèi)似于 JOIN的操作——就像 MongoDB 一樣。這并不意味著不再需要 SQL DBMS,相反,NoSQL 和 SQL 數(shù)據(jù)庫(kù)傾向于以不同的方式解決類(lèi)似的問(wèn)題。

一般來(lái)說(shuō),在以下情況下,NoSQL 比 SQL 更可?。?/p>

許多行業(yè)都在采用 NoSQL,取代關(guān)系數(shù)據(jù)庫(kù),從而為某些業(yè)務(wù)應(yīng)用程序提供更高的靈活性和可擴(kuò)展性,下面給出了 NoSQL 數(shù)據(jù)庫(kù)的一些企業(yè)用例。

內(nèi)容管理是一組用于收集、管理、傳遞、檢索和發(fā)布任何格式的信息的過(guò)程,包括文本、圖像、音頻和視頻。NoSQL 數(shù)據(jù)庫(kù)可以通過(guò)其靈活和開(kāi)放的數(shù)據(jù)模型為存儲(chǔ)多媒體內(nèi)容提供更好的選擇。

例如,福布斯在短短幾個(gè)月內(nèi)就構(gòu)建了一個(gè)基于 MongoDB 的定制內(nèi)容管理系統(tǒng),以更低的成本為他們提供了更大的敏捷性。

大數(shù)據(jù)是指太大而無(wú)法通過(guò)傳統(tǒng)處理系統(tǒng)處理的數(shù)據(jù)集,實(shí)時(shí)存儲(chǔ)和檢索大數(shù)據(jù)的系統(tǒng)在分析 歷史 數(shù)據(jù)的同時(shí)使用流處理來(lái)攝取新數(shù)據(jù),這是一系列非常適合 NoSQL 數(shù)據(jù)庫(kù)的功能。

Zoom使用 DynamoDB(按需模式)使其數(shù)據(jù)能夠在沒(méi)有性能問(wèn)題的情況下進(jìn)行擴(kuò)展,即使該服務(wù)在 COVID-19 大流行的早期使用量激增。

物聯(lián)網(wǎng)設(shè)備具有連接到互聯(lián)網(wǎng)或通信網(wǎng)絡(luò)的嵌入式軟件和傳感器,能夠在無(wú)需人工干預(yù)的情況下收集和共享數(shù)據(jù)。隨著數(shù)十億臺(tái)設(shè)備生成數(shù)不清的數(shù)據(jù),IoT NoSQL 數(shù)據(jù)庫(kù)為 IoT 服務(wù)提供商提供了可擴(kuò)展性和更靈活的架構(gòu)。

Freshub就是這樣的一項(xiàng)服務(wù),它從 MySQL 切換到 MongoDB,以更好地處理其大型、動(dòng)態(tài)、非統(tǒng)一的數(shù)據(jù)集。

擁有數(shù)十億智能手機(jī)用戶,可擴(kuò)展性正成為在移動(dòng)設(shè)備上提供服務(wù)的企業(yè)面臨的最大挑戰(zhàn)。具有更靈活數(shù)據(jù)模型的 NoSQL DBMS 通常是完美的解決方案。

例如,The Weather Channel使用 MongoDB 數(shù)據(jù)庫(kù)每分鐘處理數(shù)百萬(wàn)個(gè)請(qǐng)求,同時(shí)還處理用戶數(shù)據(jù)并提供天氣更新。

nosql數(shù)據(jù)庫(kù)是什么 具有代表性以key-value的形式存儲(chǔ)的

什么是NoSQL

大家有沒(méi)有聽(tīng)說(shuō)過(guò)“NoSQL”呢?近年,這個(gè)詞極受關(guān)注??吹健癗oSQL”這個(gè)詞,大家可能會(huì)誤以為是“No!SQL”的縮寫(xiě),并深感憤怒:“SQL怎么會(huì)沒(méi)有必要了呢?”但實(shí)際上,它是“Not Only SQL”的縮寫(xiě)。它的意義是:適用關(guān)系型數(shù)據(jù)庫(kù)的時(shí)候就使用關(guān)系型數(shù)據(jù)庫(kù),不適用的時(shí)候也沒(méi)有必要非使用關(guān)系型數(shù)據(jù)庫(kù)不可,可以考慮使用更加合適的數(shù)據(jù)存儲(chǔ)。

為彌補(bǔ)關(guān)系型數(shù)據(jù)庫(kù)的不足,各種各樣的NoSQL數(shù)據(jù)庫(kù)應(yīng)運(yùn)而生。

為了更好地了解本書(shū)所介紹的NoSQL數(shù)據(jù)庫(kù),對(duì)關(guān)系型數(shù)據(jù)庫(kù)的理解是必不可少的。那么,就讓我們先來(lái)看一看關(guān)系型數(shù)據(jù)庫(kù)的歷史、分類(lèi)和特征吧。

關(guān)系型數(shù)據(jù)庫(kù)簡(jiǎn)史

1969年,埃德加?6?1弗蘭克?6?1科德(Edgar Frank Codd)發(fā)表了劃時(shí)代的論文,首次提出了關(guān)系數(shù)據(jù)模型的概念。但可惜的是,刊登論文的《IBM Research Report》只是IBM公司的內(nèi)部刊物,因此論文反響平平。1970年,他再次在刊物《Communication of the ACM》上發(fā)表了題為“A Relational Model of Data for Large Shared Data banks”(大型共享數(shù)據(jù)庫(kù)的關(guān)系模型)的論文,終于引起了大家的關(guān)注。

科德所提出的關(guān)系數(shù)據(jù)模型的概念成為了現(xiàn)今關(guān)系型數(shù)據(jù)庫(kù)的基礎(chǔ)。當(dāng)時(shí)的關(guān)系型數(shù)據(jù)庫(kù)由于硬件性能低劣、處理速度過(guò)慢而遲遲沒(méi)有得到實(shí)際應(yīng)用。但之后隨著硬件性能的提升,加之使用簡(jiǎn)單、性能優(yōu)越等優(yōu)點(diǎn),關(guān)系型數(shù)據(jù)庫(kù)得到了廣泛的應(yīng)用。

通用性及高性能

雖然本書(shū)是講解NoSQL數(shù)據(jù)庫(kù)的,但有一個(gè)重要的大前提,請(qǐng)大家一定不要誤解。這個(gè)大前提就是“關(guān)系型數(shù)據(jù)庫(kù)的性能絕對(duì)不低,它具有非常好的通用性和非常高的性能”。毫無(wú)疑問(wèn),對(duì)于絕大多數(shù)的應(yīng)用來(lái)說(shuō)它都是最有效的解決方案。

突出的優(yōu)勢(shì)

關(guān)系型數(shù)據(jù)庫(kù)作為應(yīng)用廣泛的通用型數(shù)據(jù)庫(kù),它的突出優(yōu)勢(shì)主要有以下幾點(diǎn):

保持?jǐn)?shù)據(jù)的一致性(事務(wù)處理)

由于以標(biāo)準(zhǔn)化為前提,數(shù)據(jù)更新的開(kāi)銷(xiāo)很小(相同的字段基本上都只有一處)

可以進(jìn)行JOIN等復(fù)雜查詢

存在很多實(shí)際成果和專業(yè)技術(shù)信息(成熟的技術(shù))

這其中,能夠保持?jǐn)?shù)據(jù)的一致性是關(guān)系型數(shù)據(jù)庫(kù)的最大優(yōu)勢(shì)。在需要嚴(yán)格保證數(shù)據(jù)一致性和處理完整性的情況下,用關(guān)系型數(shù)據(jù)庫(kù)是肯定沒(méi)有錯(cuò)的。但是有些情況不需要JOIN,對(duì)上述關(guān)系型數(shù)據(jù)庫(kù)的優(yōu)點(diǎn)也沒(méi)有什么特別需要,這時(shí)似乎也就沒(méi)有必要拘泥于關(guān)系型數(shù)據(jù)庫(kù)了。

關(guān)系型數(shù)據(jù)庫(kù)的不足

不擅長(zhǎng)的處理

就像之前提到的那樣,關(guān)系型數(shù)據(jù)庫(kù)的性能非常高。但是它畢竟是一個(gè)通用型的數(shù)據(jù)庫(kù),并不能完全適應(yīng)所有的用途。具體來(lái)說(shuō)它并不擅長(zhǎng)以下處理:

大量數(shù)據(jù)的寫(xiě)入處理

為有數(shù)據(jù)更新的表做索引或表結(jié)構(gòu)(schema)變更

字段不固定時(shí)應(yīng)用

對(duì)簡(jiǎn)單查詢需要快速返回結(jié)果的處理

。。。。。。

NoSQL數(shù)據(jù)庫(kù)

為了彌補(bǔ)關(guān)系型數(shù)據(jù)庫(kù)的不足(特別是最近幾年),NoSQL數(shù)據(jù)庫(kù)出現(xiàn)了。關(guān)系型數(shù)據(jù)庫(kù)應(yīng)用廣泛,能進(jìn)行事務(wù)處理和JOIN等復(fù)雜處理。相對(duì)地,NoSQL數(shù)據(jù)庫(kù)只應(yīng)用在特定領(lǐng)域,基本上不進(jìn)行復(fù)雜的處理,但它恰恰彌補(bǔ)了之前所列舉的關(guān)系型數(shù)據(jù)庫(kù)的不足之處。

易于數(shù)據(jù)的分散

如前所述,關(guān)系型數(shù)據(jù)庫(kù)并不擅長(zhǎng)大量數(shù)據(jù)的寫(xiě)入處理。原本關(guān)系型數(shù)據(jù)庫(kù)就是以JOIN為前提的,就是說(shuō),各個(gè)數(shù)據(jù)之間存在關(guān)聯(lián)是關(guān)系型數(shù)據(jù)庫(kù)得名的主要原因。為了進(jìn)行JOIN處理,關(guān)系型數(shù)據(jù)庫(kù)不得不把數(shù)據(jù)存儲(chǔ)在同一個(gè)服務(wù)器內(nèi),這不利于數(shù)據(jù)的分散。相反,NoSQL數(shù)據(jù)庫(kù)原本就不支持JOIN處理,各個(gè)數(shù)據(jù)都是獨(dú)立設(shè)計(jì)的,很容易把數(shù)據(jù)分散到多個(gè)服務(wù)器上。由于數(shù)據(jù)被分散到了多個(gè)服務(wù)器上,減少了每個(gè)服務(wù)器上的數(shù)據(jù)量,即使要進(jìn)行大量數(shù)據(jù)的寫(xiě)入操作,處理起來(lái)也更加容易。同理,數(shù)據(jù)的讀入操作當(dāng)然也同樣容易。

提升性能和增大規(guī)模

下面說(shuō)一點(diǎn)題外話,如果想要使服務(wù)器能夠輕松地處理更大量的數(shù)據(jù),那么只有兩個(gè)選擇:一是提升性能,二是增大規(guī)模。下面我們來(lái)整理一下這兩者的不同。

首先,提升性能指的就是通過(guò)提升現(xiàn)行服務(wù)器自身的性能來(lái)提高處理能力。這是非常簡(jiǎn)單的方法,程序方面也不需要進(jìn)行變更,但需要一些費(fèi)用。若要購(gòu)買(mǎi)性能翻倍的服務(wù)器,需要花費(fèi)的資金往往不只是原來(lái)的2倍,可能需要多達(dá)5到10倍。這種方法雖然簡(jiǎn)單,但是成本較高。

另一方面,增大規(guī)模指的是使用多臺(tái)廉價(jià)的服務(wù)器來(lái)提高處理能力。它需要對(duì)程序進(jìn)行變更,但由于使用廉價(jià)的服務(wù)器,可以控制成本。另外,以后只要依葫蘆畫(huà)瓢增加廉價(jià)服務(wù)器的數(shù)量就可以了。

不對(duì)大量數(shù)據(jù)進(jìn)行處理的話就沒(méi)有使用的必要嗎?

NoSQL數(shù)據(jù)庫(kù)基本上來(lái)說(shuō)為了“使大量數(shù)據(jù)的寫(xiě)入處理更加容易(讓增加服務(wù)器數(shù)量更容易)”而設(shè)計(jì)的。但如果不是對(duì)大量數(shù)據(jù)進(jìn)行操作的話,NoSQL數(shù)據(jù)庫(kù)的應(yīng)用就沒(méi)有意義嗎?

答案是否定的。的確,它在處理大量數(shù)據(jù)方面很有優(yōu)勢(shì)。但實(shí)際上NoSQL數(shù)據(jù)庫(kù)還有各種各樣的特點(diǎn),如果能夠恰當(dāng)?shù)乩眠@些特點(diǎn)將會(huì)是非常有幫助。具體的例子將會(huì)在第2章和第3章進(jìn)行介紹,這些用途將會(huì)讓你感受到利用NoSQL的好處。

希望順暢地對(duì)數(shù)據(jù)進(jìn)行緩存(Cache)處理

希望對(duì)數(shù)組類(lèi)型的數(shù)據(jù)進(jìn)行高速處理

希望進(jìn)行全部保存

多樣的NoSQL數(shù)據(jù)庫(kù)

NoSQL數(shù)據(jù)庫(kù)存在著“key-value存儲(chǔ)”、“文檔型數(shù)據(jù)庫(kù)”、“列存儲(chǔ)數(shù)據(jù)庫(kù)”等各種各樣的種類(lèi),每種數(shù)據(jù)庫(kù)又包含各自的特點(diǎn)。下一節(jié)讓我們一起來(lái)了解一下NoSQL數(shù)據(jù)庫(kù)的種類(lèi)和特點(diǎn)。

NoSQL數(shù)據(jù)庫(kù)是什么

NoSQL說(shuō)起來(lái)簡(jiǎn)單,但實(shí)際上到底有多少種呢?我在提筆的時(shí)候,到NoSQL的官方網(wǎng)站上確認(rèn)了一下,竟然已經(jīng)有122種了。另外官方網(wǎng)站上也介紹了本書(shū)沒(méi)有涉及到的圖形數(shù)據(jù)庫(kù)和對(duì)象數(shù)據(jù)庫(kù)等各個(gè)類(lèi)別。不知不覺(jué)間,原來(lái)已經(jīng)出現(xiàn)了這么多的NoSQL數(shù)據(jù)庫(kù)啊。

本節(jié)將為大家介紹具有代表性的NoSQL數(shù)據(jù)庫(kù)。

key-value存儲(chǔ)

這是最常見(jiàn)的NoSQL數(shù)據(jù)庫(kù),它的數(shù)據(jù)是以key-value的形式存儲(chǔ)的。雖然它的處理速度非???,但是基本上只能通過(guò)key的完全一致查詢獲取數(shù)據(jù)。根據(jù)數(shù)據(jù)的保存方式可以分為臨時(shí)性、永久性和兩者兼具三種。

臨時(shí)性

memcached屬于這種類(lèi)型。所謂臨時(shí)性就是 “數(shù)據(jù)有可能丟失”的意思。memcached把所有數(shù)據(jù)都保存在內(nèi)存中,這樣保存和讀取的速度非???,但是當(dāng)memcached停止的時(shí)候,數(shù)據(jù)就不存在了。由于數(shù)據(jù)保存在內(nèi)存中,所以無(wú)法操作超出內(nèi)存容量的數(shù)據(jù)(舊數(shù)據(jù)會(huì)丟失)。

在內(nèi)存中保存數(shù)據(jù)

可以進(jìn)行非常快速的保存和讀取處理

數(shù)據(jù)有可能丟失

永久性

Tokyo Tyrant、Flare、ROMA等屬于這種類(lèi)型。和臨時(shí)性相反,所謂永久性就是“數(shù)據(jù)不會(huì)丟失”的意思。這里的key-value存儲(chǔ)不像memcached那樣在內(nèi)存中保存數(shù)據(jù),而是把數(shù)據(jù)保存在硬盤(pán)上。與memcached在內(nèi)存中處理數(shù)據(jù)比起來(lái),由于必然要發(fā)生對(duì)硬盤(pán)的IO操作,所以性能上還是有差距的。但數(shù)據(jù)不會(huì)丟失是它最大的優(yōu)勢(shì)。

在硬盤(pán)上保存數(shù)據(jù)

可以進(jìn)行非??焖俚谋4婧妥x取處理(但無(wú)法與memcached相比)

數(shù)據(jù)不會(huì)丟失

兩者兼具

Redis屬于這種類(lèi)型。Redis有些特殊,臨時(shí)性和永久性兼具,且集合了臨時(shí)性key-value存儲(chǔ)和永久性key-value存儲(chǔ)的優(yōu)點(diǎn)。Redis首先把數(shù)據(jù)保存到內(nèi)存中,在滿足特定條件(默認(rèn)是15分鐘一次以上,5分鐘內(nèi)10個(gè)以上,1分鐘內(nèi)10000個(gè)以上的key發(fā)生變更)的時(shí)候?qū)?shù)據(jù)寫(xiě)入到硬盤(pán)中。這樣既確保了內(nèi)存中數(shù)據(jù)的處理速度,又可以通過(guò)寫(xiě)入硬盤(pán)來(lái)保證數(shù)據(jù)的永久性。這種類(lèi)型的數(shù)據(jù)庫(kù)特別適合于處理數(shù)組類(lèi)型的數(shù)據(jù)。

同時(shí)在內(nèi)存和硬盤(pán)上保存數(shù)據(jù)

可以進(jìn)行非??焖俚谋4婧妥x取處理

保存在硬盤(pán)上的數(shù)據(jù)不會(huì)消失(可以恢復(fù))

適合于處理數(shù)組類(lèi)型的數(shù)據(jù)

面向文檔的數(shù)據(jù)庫(kù)

MongoDB、CouchDB屬于這種類(lèi)型。它們屬于NoSQL數(shù)據(jù)庫(kù),但與key-value存儲(chǔ)相異。

不定義表結(jié)構(gòu)

面向文檔的數(shù)據(jù)庫(kù)具有以下特征:即使不定義表結(jié)構(gòu),也可以像定義了表結(jié)構(gòu)一樣使用。關(guān)系型數(shù)據(jù)庫(kù)在變更表結(jié)構(gòu)時(shí)比較費(fèi)事,而且為了保持一致性還需修改程序。然而NoSQL數(shù)據(jù)庫(kù)則可省去這些麻煩(通常程序都是正確的),確實(shí)是方便快捷。

可以使用復(fù)雜的查詢條件

跟key-value存儲(chǔ)不同的是,面向文檔的數(shù)據(jù)庫(kù)可以通過(guò)復(fù)雜的查詢條件來(lái)獲取數(shù)據(jù)。雖然不具備事務(wù)處理和JOIN這些關(guān)系型數(shù)據(jù)庫(kù)所具有的處理能力,但除此以外的其他處理基本上都能實(shí)現(xiàn)。這是非常容易使用的NoSQL數(shù)據(jù)庫(kù)。

不需要定義表結(jié)構(gòu)

可以利用復(fù)雜的查詢條件

面向列的數(shù)據(jù)庫(kù)

Cassandra、Hbase、HyperTable屬于這種類(lèi)型。由于近年來(lái)數(shù)據(jù)量出現(xiàn)爆發(fā)性增長(zhǎng),這種類(lèi)型的NoSQL數(shù)據(jù)庫(kù)尤其引人注目。

面向行的數(shù)據(jù)庫(kù)和面向列的數(shù)據(jù)庫(kù)

普通的關(guān)系型數(shù)據(jù)庫(kù)都是以行為單位來(lái)存儲(chǔ)數(shù)據(jù)的,擅長(zhǎng)進(jìn)行以行為單位的讀入處理,比如特定條件數(shù)據(jù)的獲取。因此,關(guān)系型數(shù)據(jù)庫(kù)也被稱為面向行的數(shù)據(jù)庫(kù)。相反,面向列的數(shù)據(jù)庫(kù)是以列為單位來(lái)存儲(chǔ)數(shù)據(jù)的,擅長(zhǎng)以列為單位讀入數(shù)據(jù)。

高擴(kuò)展性

面向列的數(shù)據(jù)庫(kù)具有高擴(kuò)展性,即使數(shù)據(jù)增加也不會(huì)降低相應(yīng)的處理速度(特別是寫(xiě)入速度),所以它主要應(yīng)用于需要處理大量數(shù)據(jù)的情況。另外,利用面向列的數(shù)據(jù)庫(kù)的優(yōu)勢(shì),把它作為批處理程序的存儲(chǔ)器來(lái)對(duì)大量數(shù)據(jù)進(jìn)行更新也是非常有用的。但由于面向列的數(shù)據(jù)庫(kù)跟現(xiàn)行數(shù)據(jù)庫(kù)存儲(chǔ)的思維方式有很大不同,應(yīng)用起來(lái)十分困難。

高擴(kuò)展性(特別是寫(xiě)入處理)

應(yīng)用十分困難

最近,像Twitter和Facebook這樣需要對(duì)大量數(shù)據(jù)進(jìn)行更新和查詢的網(wǎng)絡(luò)服務(wù)不斷增加,面向列的數(shù)據(jù)庫(kù)的優(yōu)勢(shì)對(duì)其中一些服務(wù)是非常有用的,但是由于這與本書(shū)所要介紹的內(nèi)容關(guān)系不大,就不進(jìn)行詳細(xì)介紹了。

總結(jié):

NoSQL并不是No-SQL,而是指Not Only SQL。

NoSQL的出現(xiàn)是為了彌補(bǔ)SQL數(shù)據(jù)庫(kù)因?yàn)槭聞?wù)等機(jī)制帶來(lái)的對(duì)海量數(shù)據(jù)、高并發(fā)請(qǐng)求的處理的性能上的欠缺。

NoSQL不是為了替代SQL而出現(xiàn)的,它是一種替補(bǔ)方案,而不是解決方案的首選。

絕大多數(shù)的NoSQL產(chǎn)品都是基于大內(nèi)存和高性能隨機(jī)讀寫(xiě)的(比如具有更高性能的固態(tài)硬盤(pán)陣列),一般的小型企業(yè)在選擇NoSQL時(shí)一定要慎重!不要為了NoSQL而NoSQL,可能會(huì)導(dǎo)致花了冤枉錢(qián)又耽擱了項(xiàng)目進(jìn)程。

NoSQL不是萬(wàn)能的,但在大型項(xiàng)目中,你往往需要它!

什么是New SQL?分析NewSQL是如何融合NoSQL和RDBMS兩者的優(yōu)勢(shì)

NewSQL是對(duì)一類(lèi)現(xiàn)代關(guān)系型數(shù)據(jù)庫(kù)的統(tǒng)稱,這類(lèi)數(shù)據(jù)庫(kù)對(duì)于一般的OLTP讀寫(xiě)請(qǐng)求提供可橫向擴(kuò)展的性能,同時(shí)支持事務(wù)的ACID保證。這些系統(tǒng)既擁有NoSQL數(shù)據(jù)庫(kù)的擴(kuò)展性,又保持傳統(tǒng)數(shù)據(jù)庫(kù)的事務(wù)特性。NewSQL重新將“應(yīng)用程序邏輯與數(shù)據(jù)操作邏輯應(yīng)該分離”的理念帶回到現(xiàn)代數(shù)據(jù)庫(kù)的世界,這也驗(yàn)證了歷史的發(fā)展總是呈現(xiàn)出螺旋上升的形式。

在21世紀(jì)00年代中,出現(xiàn)了許多數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng) (如 Vertica,Greeplum 和AsterData),這些以處理OLAP 請(qǐng)求為設(shè)計(jì)目標(biāo)的系統(tǒng)并不在本文定義的NewSQL范圍內(nèi)。OLAP 數(shù)據(jù)庫(kù)更關(guān)注針對(duì)海量數(shù)據(jù)的大型、復(fù)雜、只讀的查詢,查詢時(shí)間可能持續(xù)秒級(jí)、分鐘級(jí)甚至更長(zhǎng)。

NoSQL的擁躉普遍認(rèn)為阻礙傳統(tǒng)數(shù)據(jù)庫(kù)橫向擴(kuò)容、提高可用性的原因在于ACID保證和關(guān)系模型,因此NoSQL運(yùn)動(dòng)的核心就是放棄事務(wù)強(qiáng)一致性以及關(guān)系模型,擁抱最終一致性和其它數(shù)據(jù)模型?(如 key/value,graphs 和Documents)。

兩個(gè)最著名的NoSQL數(shù)據(jù)庫(kù)就是Google的BigTable和Amazon的Dynamo,由于二者都未開(kāi)源,其它組織就開(kāi)始推出類(lèi)似的開(kāi)源替代項(xiàng)目,包括Facebook的 Cassandra (基于BigTable和Dynamo)、PowerSet的 Hbase(基于BigTable)。有一些創(chuàng)業(yè)公司也加入到這場(chǎng)NoSQL運(yùn)動(dòng)中,它們不一定是受BigTable和Dynamo的啟發(fā),但都響應(yīng)了NoSQL的哲學(xué),其中最出名的就是MongoDB。

在21世紀(jì)00年代末,市面上已經(jīng)有許多供用戶選擇的分布式數(shù)據(jù)庫(kù)產(chǎn)品。使用NoSQL的優(yōu)勢(shì)在于應(yīng)用開(kāi)發(fā)者可以更關(guān)注應(yīng)用邏輯本身,而非數(shù)據(jù)庫(kù)的擴(kuò)展性問(wèn)題;但與此同時(shí)許多應(yīng)用,如金融系統(tǒng)、訂單處理系統(tǒng),由于無(wú)法放棄事務(wù)的一致性要求被拒之門(mén)外。

一些組織,如Google,已經(jīng)發(fā)現(xiàn)他們的許多工程師將過(guò)多的精力放在處理數(shù)據(jù)一致性上,這既暴露了數(shù)據(jù)庫(kù)的抽象、又提高了代碼的復(fù)雜度,這時(shí)候要么選擇回到傳統(tǒng)DBMS時(shí)代,用更高的機(jī)器配置縱向擴(kuò)容,要么選擇回到中間件時(shí)代,開(kāi)發(fā)支持分布式事務(wù)的中間件。這兩種方案成本都很高,于是NewSQL運(yùn)動(dòng)開(kāi)始醞釀。

NewSQL數(shù)據(jù)庫(kù)設(shè)計(jì)針對(duì)的讀寫(xiě)事務(wù)有以下特點(diǎn):

1、耗時(shí)短。

2、使用索引查詢,涉及少量數(shù)據(jù)。

3、重復(fù)度高,通常使用相同的查詢語(yǔ)句和不同的查詢參考。

也有一些學(xué)者認(rèn)為NewSQL系統(tǒng)是特指實(shí)現(xiàn)上使用Lock-free并發(fā)控制技術(shù)和share-nothing架構(gòu)的數(shù)據(jù)庫(kù)。所有我們認(rèn)為是NewSQL的數(shù)據(jù)庫(kù)系統(tǒng)確實(shí)都有這樣的特點(diǎn)。


本文題目:nosql歷史,Nosql
網(wǎng)頁(yè)URL:http://weahome.cn/article/hdpced.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部