1、可能會問nosql和關(guān)系型數(shù)據(jù)庫的區(qū)別:

邵武網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,邵武網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為邵武1000多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的邵武做網(wǎng)站的公司定做!
優(yōu)點:
1)成本:nosql數(shù)據(jù)庫簡單易部署,基本都是開源軟件,不需要像使用Oracle那樣花費大量成本購買使用,相比關(guān)系型數(shù)據(jù)庫價格便宜
2)查詢速度:nosql數(shù)據(jù)庫將數(shù)據(jù)存儲于緩存之中,關(guān)系型數(shù)據(jù)庫將數(shù)據(jù)存儲在硬盤中,自然查詢速度遠(yuǎn)不及nosql數(shù)據(jù)庫
3)存儲數(shù)據(jù)的格式:nosql的存儲格式是key,value形式、文檔形式、圖片形式等等,所以可以存儲基礎(chǔ)類型以及對象或者是集合等各種格式,而數(shù)據(jù)庫則只支持基礎(chǔ)類型
4)擴(kuò)展性:關(guān)系型數(shù)據(jù)庫有類似join這樣的多表查詢機(jī)制的限制導(dǎo)致擴(kuò)展很艱難
缺點:
1)維護(hù)的工具和資料有限,因為nosql是屬于新的技術(shù),不能和關(guān)系型數(shù)據(jù)庫10幾年的技術(shù)同日而語。
2)不提供對sql的支持,如果不支持sql這樣的工業(yè)標(biāo)準(zhǔn),將產(chǎn)生一定用戶的學(xué)習(xí)和使用成本
3)不提供關(guān)系型數(shù)據(jù)庫對事物的處理
2、介紹下redis和mongodb:
自行g(shù)oogle。
3、應(yīng)用場景:
redis:
a.主要是做熱點數(shù)據(jù)緩存。
b.數(shù)據(jù)過期處理。
c.消息隊列等功能。
d.計數(shù),例如投票等。
mongodb:
mongodb的主要目標(biāo)是在鍵/值存儲方式(提供了高性能和高度伸縮性)以及傳統(tǒng)的RDBMS系統(tǒng)(豐富的功能)架起一座橋梁,集兩者的優(yōu)勢于一身。mongo適用于以下場景:
a.網(wǎng)站數(shù)據(jù):mongo非常適合實時的插入,更新與查詢,并具備網(wǎng)站實時數(shù)據(jù)存儲所需的復(fù)制及高度伸縮性。
b.緩存:由于性能很高,mongo也適合作為信息基礎(chǔ)設(shè)施的緩存層。在系統(tǒng)重啟之后,由mongo搭建的持久化緩存可以避免下層的數(shù)據(jù)源過載。
c.大尺寸、低價值的數(shù)據(jù):使用傳統(tǒng)的關(guān)系數(shù)據(jù)庫存儲一些數(shù)據(jù)時可能會比較貴,在此之前,很多程序員往往會選擇傳統(tǒng)的文件進(jìn)行存儲。
d.高伸縮性的場景:mongo非常適合由數(shù)十或者數(shù)百臺服務(wù)器組成的數(shù)據(jù)庫。
e.用于對象及JSON數(shù)據(jù)的存儲:mongo的BSON數(shù)據(jù)格式非常適合文檔格式化的存儲及查詢。
4、支持的數(shù)據(jù)類型:
內(nèi)容比較多,自行將網(wǎng)上的信息整理一下。
這次的NoSQL專欄系列將先整體介紹NoSQL,然后介紹如何把NoSQL運用到自己的項目中合適的場景中,還會適當(dāng)?shù)胤治鲆恍┏晒Π咐M谐晒κ褂肗oSQL經(jīng)驗的朋友給我提供一些線索和信息。
NoSQL概念隨著web2.0的快速發(fā)展,非關(guān)系型、分布式數(shù)據(jù)存儲得到了快速的發(fā)展,它們不保證關(guān)系數(shù)據(jù)的ACID特性。NoSQL概念在2009年被提了出來。NoSQL最常見的解釋是“non-relational”,“Not Only SQL”也被很多人接受。(“NoSQL”一詞最早于1998年被用于一個輕量級的關(guān)系數(shù)據(jù)庫的名字。)
NoSQL被我們用得最多的當(dāng)數(shù)key-value存儲,當(dāng)然還有其他的文檔型的、列存儲、圖型數(shù)據(jù)庫、xml數(shù)據(jù)庫等。在NoSQL概念提出之前,這些數(shù)據(jù)庫就被用于各種系統(tǒng)當(dāng)中,但是卻很少用于web互聯(lián)網(wǎng)應(yīng)用。比如cdb、qdbm、bdb數(shù)據(jù)庫。
傳統(tǒng)關(guān)系數(shù)據(jù)庫的瓶頸
傳統(tǒng)的關(guān)系數(shù)據(jù)庫具有不錯的性能,高穩(wěn)定型,久經(jīng)歷史考驗,而且使用簡單,功能強(qiáng)大,同時也積累了大量的成功案例。在互聯(lián)網(wǎng)領(lǐng)域,MySQL成為了絕對靠前的王者,毫不夸張的說,MySQL為互聯(lián)網(wǎng)的發(fā)展做出了卓越的貢獻(xiàn)。
在90年代,一個網(wǎng)站的訪問量一般都不大,用單個數(shù)據(jù)庫完全可以輕松應(yīng)付。在那個時候,更多的都是靜態(tài)網(wǎng)頁,動態(tài)交互類型的網(wǎng)站不多。
到了最近10年,網(wǎng)站開始快速發(fā)展。火爆的論壇、博客、sns、微博逐漸引領(lǐng)web領(lǐng)域的潮流。在初期,論壇的流量其實也不大,如果你接觸網(wǎng)絡(luò)比較早,你可能還記得那個時候還有文本型存儲的論壇程序,可以想象一般的論壇的流量有多大。
Memcached+MySQL
后來,隨著訪問量的上升,幾乎大部分使用MySQL架構(gòu)的網(wǎng)站在數(shù)據(jù)庫上都開始出現(xiàn)了性能問題,web程序不再僅僅專注在功能上,同時也在追求性能。程序員們開始大量的使用緩存技術(shù)來緩解數(shù)據(jù)庫的壓力,優(yōu)化數(shù)據(jù)庫的結(jié)構(gòu)和索引。開始比較流行的是通過文件緩存來緩解數(shù)據(jù)庫壓力,但是當(dāng)訪問量繼續(xù)增大的時候,多臺web機(jī)器通過文件緩存不能共享,大量的小文件緩存也帶了了比較高的IO壓力。在這個時候,Memcached就自然的成為一個非常時尚的技術(shù)產(chǎn)品。
Memcached作為一個獨立的分布式的緩存服務(wù)器,為多個web服務(wù)器提供了一個共享的高性能緩存服務(wù),在Memcached服務(wù)器上,又發(fā)展了根據(jù)hash算法來進(jìn)行多臺Memcached緩存服務(wù)的擴(kuò)展,然后又出現(xiàn)了一致性hash來解決增加或減少緩存服務(wù)器導(dǎo)致重新hash帶來的大量緩存失效的弊端。當(dāng)時,如果你去面試,你說你有Memcached經(jīng)驗,肯定會加分的。
Mysql主從讀寫分離
由于數(shù)據(jù)庫的寫入壓力增加,Memcached只能緩解數(shù)據(jù)庫的讀取壓力。讀寫集中在一個數(shù)據(jù)庫上讓數(shù)據(jù)庫不堪重負(fù),大部分網(wǎng)站開始使用主從復(fù)制技術(shù)來達(dá)到讀寫分離,以提高讀寫性能和讀庫的可擴(kuò)展性。Mysql的master-slave模式成為這個時候的網(wǎng)站標(biāo)配了。
分表分庫隨著web2.0的繼續(xù)高速發(fā)展,在Memcached的高速緩存,MySQL的主從復(fù)制,讀寫分離的基礎(chǔ)之上,這時MySQL主庫的寫壓力開始出現(xiàn)瓶頸,而數(shù)據(jù)量的持續(xù)猛增,由于MyISAM使用表鎖,在高并發(fā)下會出現(xiàn)嚴(yán)重的鎖問題,大量的高并發(fā)MySQL應(yīng)用開始使用InnoDB引擎代替MyISAM。同時,開始流行使用分表分庫來緩解寫壓力和數(shù)據(jù)增長的擴(kuò)展問題。這個時候,分表分庫成了一個熱門技術(shù),是面試的熱門問題也是業(yè)界討論的熱門技術(shù)問題。也就在這個時候,MySQL推出了還不太穩(wěn)定的表分區(qū),這也給技術(shù)實力一般的公司帶來了希望。雖然MySQL推出了MySQL Cluster集群,但是由于在互聯(lián)網(wǎng)幾乎沒有成功案例,性能也不能滿足互聯(lián)網(wǎng)的要求,只是在高可靠性上提供了非常大的保證。
MySQL的擴(kuò)展性瓶頸
在互聯(lián)網(wǎng),大部分的MySQL都應(yīng)該是IO密集型的,事實上,如果你的MySQL是個CPU密集型的話,那么很可能你的MySQL設(shè)計得有性能問題,需要優(yōu)化了。大數(shù)據(jù)量高并發(fā)環(huán)境下的MySQL應(yīng)用開發(fā)越來越復(fù)雜,也越來越具有技術(shù)挑戰(zhàn)性。分表分庫的規(guī)則把握都是需要經(jīng)驗的。雖然有像淘寶這樣技術(shù)實力強(qiáng)大的公司開發(fā)了透明的中間件層來屏蔽開發(fā)者的復(fù)雜性,但是避免不了整個架構(gòu)的復(fù)雜性。分庫分表的子庫到一定階段又面臨擴(kuò)展問題。還有就是需求的變更,可能又需要一種新的分庫方式。
MySQL數(shù)據(jù)庫也經(jīng)常存儲一些大文本字段,導(dǎo)致數(shù)據(jù)庫表非常的大,在做數(shù)據(jù)庫恢復(fù)的時候就導(dǎo)致非常的慢,不容易快速恢復(fù)數(shù)據(jù)庫。比如1000萬4KB大小的文本就接近40GB的大小,如果能把這些數(shù)據(jù)從MySQL省去,MySQL將變得非常的小。
關(guān)系數(shù)據(jù)庫很強(qiáng)大,但是它并不能很好的應(yīng)付所有的應(yīng)用場景。MySQL的擴(kuò)展性差(需要復(fù)雜的技術(shù)來實現(xiàn)),大數(shù)據(jù)下IO壓力大,表結(jié)構(gòu)更改困難,正是當(dāng)前使用MySQL的開發(fā)人員面臨的問題。
NOSQL的優(yōu)勢易擴(kuò)展NoSQL數(shù)據(jù)庫種類繁多,但是一個共同的特點都是去掉關(guān)系數(shù)據(jù)庫的關(guān)系型特性。數(shù)據(jù)之間無關(guān)系,這樣就非常容易擴(kuò)展。也無形之間,在架構(gòu)的層面上帶來了可擴(kuò)展的能力。
大數(shù)據(jù)量,高性能
NoSQL數(shù)據(jù)庫都具有非常高的讀寫性能,尤其在大數(shù)據(jù)量下,同樣表現(xiàn)優(yōu)秀。這得益于它的無關(guān)系性,數(shù)據(jù)庫的結(jié)構(gòu)簡單。一般MySQL使用Query Cache,每次表的更新Cache就失效,是一種大粒度的Cache,在針對web2.0的交互頻繁的應(yīng)用,Cache性能不高。而NoSQL的Cache是記錄級的,是一種細(xì)粒度的Cache,所以NoSQL在這個層面上來說就要性能高很多了。
靈活的數(shù)據(jù)模型
NoSQL無需事先為要存儲的數(shù)據(jù)建立字段,隨時可以存儲自定義的數(shù)據(jù)格式。而在關(guān)系數(shù)據(jù)庫里,增刪字段是一件非常麻煩的事情。如果是非常大數(shù)據(jù)量的表,增加字段簡直就是一個噩夢。這點在大數(shù)據(jù)量的web2.0時代尤其明顯。
高可用NoSQL在不太影響性能的情況,就可以方便的實現(xiàn)高可用的架構(gòu)。比如Cassandra,HBase模型,通過復(fù)制模型也能實現(xiàn)高可用。
總結(jié)NoSQL數(shù)據(jù)庫的出現(xiàn),彌補(bǔ)了關(guān)系數(shù)據(jù)(比如MySQL)在某些方面的不足,在某些方面能極大的節(jié)省開發(fā)成本和維護(hù)成本。
MySQL和NoSQL都有各自的特點和使用的應(yīng)用場景,兩者的緊密結(jié)合將會給web2.0的數(shù)據(jù)庫發(fā)展帶來新的思路。
自學(xué)方法:
1、作為一個初學(xué)者,你必須明確系統(tǒng)的學(xué)習(xí)方案,我建議一定有一個指導(dǎo)的人,全靠自己學(xué),放棄的幾率非常大,在你對于web前端還沒有任何概念的時候,需要一個人領(lǐng)進(jìn)門,之后就都靠自己鉆研,第一步就是確定web前端都需要哪些內(nèi)容,并且在多少時間內(nèi)學(xué)完,建議時間6個月保底。
2、視頻為主,書為輔。很多初學(xué)者在學(xué)習(xí)前端的時候非常喜歡去買書,但是最后的結(jié)果是什么?看來看去什么都不會寫,所以在這里給大家提醒,書可以看,但是是在建立于你已經(jīng)對于某個知識點有了具體操作的執(zhí)行后,在用書去鞏固概念,這樣更加利于你對于知識的理解。
3、對于學(xué)習(xí)技術(shù)來講,掌握一個學(xué)習(xí)方法是非常重要的,其實對于學(xué)習(xí)web前端來講,學(xué)習(xí)方法確實很多都是相通的,一旦學(xué)習(xí)方法不對,可能就會造成“方法不對,努力白費”。其實關(guān)于這方面還是很多的,我就簡單說個例子,有的人邊聽課邊跟著敲代碼,這樣就不對,聽課的時候就專心聽,做題的時候就專心做題,這都是過來人的經(jīng)驗,一定要聽。根據(jù)每個人的不同,可能學(xué)習(xí)方法也會有所出路,找到適合你自己的學(xué)習(xí)法方法是學(xué)習(xí)的前提。
4、不建議自己一個人瞎學(xué),在我了解學(xué)習(xí)編程的這些人來看,從零基礎(chǔ)開始學(xué)并且最后成功做這份工作的其實并沒有幾個,我覺得大部分原因就是因為他們都不了解web前端是干什么的,學(xué)什么的,就盲目的買書看,到處找視頻看,最后看著看著就放棄了,所以我建議初學(xué)者在沒有具體概念之前,還是找有經(jīng)驗的人請教一下,聊過之后你就會知道web前端具體是干什么的,該怎么學(xué),這是我個人的小建議,可以不采納。
自學(xué)路線:
第1階段:前端頁面重構(gòu)(4周)
內(nèi)容包含了:(PC端網(wǎng)站布局項目、HTML5+CSS3基礎(chǔ)項目、WebApp頁面布局項目)
第2階段:JavaScript高級程序設(shè)計(5周)
內(nèi)容包含:(原生JavaScript交互功能開發(fā)項目、面向?qū)ο筮M(jìn)階與ES5/ES6應(yīng)用項目、JavaScript工具庫自主研發(fā)項目)
第3階段:PC端全棧項目開發(fā)(3周)
內(nèi)容包含:(jQuery經(jīng)典交互特效開發(fā)、HTTP協(xié)議、Ajax進(jìn)階與PHP/JAVA開發(fā)項目、前端工程化與模塊化應(yīng)用項目、PC端網(wǎng)站開發(fā)項目、PC端管理信息系統(tǒng)前端開發(fā)項目)
第4階段:移動端項目開發(fā)(6周)
內(nèi)容包含:(Touch端項目、微信場景項目、應(yīng)用Angular+Ionic開發(fā)WebApp項目、應(yīng)用Vue.js開發(fā)WebApp項目、應(yīng)用React.js開發(fā)WebApp項目)
第5階段:混合(Hybrid,ReactNative)開發(fā)(1周)
內(nèi)容包含:(微信小程序開發(fā)、ReactNative、各類混合應(yīng)用開發(fā))
第6階段:NodeJS全棧開發(fā)(1周)
內(nèi)容包括:(WebApp后端系統(tǒng)開發(fā)、一、NodeJS基礎(chǔ)與NodeJS核心模塊二、Express三、noSQL數(shù)據(jù)庫)
基礎(chǔ)書籍:
1、《Head First HTML與CSS(第2版)》,入門真的是經(jīng)典書籍,手把手教學(xué),豐富的案例讓你從 0 開始學(xué)前端。
2、《CSS權(quán)威指南(第三版)》,這本書作為 CSS 的經(jīng)典著作,把原理講得非常的通透,除了 w3c 標(biāo)準(zhǔn),算最權(quán)威的一本了,畢竟權(quán)威指南。
3、《CSS揭秘》神書,47 個 css 技巧讓你在面對各種 css 問題的時候游刃有余。是 css 書籍中評分最高的了,css 進(jìn)階必備。
4、《javascript語言精粹》,這本書可以在入門之前了解一下基本語法,以及在學(xué)習(xí)之前可以了解下 JS 里面的精粹以及糟粕,雖然這本書很薄很薄,但是值得反復(fù)去讀的一本書。
5、《JavaScript DOM編程藝術(shù)(第2版)》,本書在簡潔明快地講述JavaScript和DOM的基本知識之后,通過幾個實例演示了專業(yè)水準(zhǔn)的網(wǎng)頁開發(fā)技術(shù),透徹闡述了平穩(wěn)退化等一批至關(guān)重要的 JavaScript編程原則和最佳實踐。
6、《JavaScript權(quán)威指南》:犀牛書是每個FE都繞不過的一本書,可以先大致通讀幾遍,也可以把其當(dāng)作工具書,時時翻閱。
視頻教程:
網(wǎng)頁鏈接
Java的技術(shù)體系是非常龐大的,需要我們學(xué)習(xí)的技術(shù)非常多,往往很多初學(xué)的人,通過互聯(lián)網(wǎng)查閱了一個龐大的學(xué)習(xí)列表,然后不知道如何下手。網(wǎng)上很多大牛列的技術(shù)不是不重要,但是掌握住企業(yè)應(yīng)用的Java的核心技術(shù),快速上手,是一種高效的學(xué)習(xí)手段。結(jié)合本人十余年的項目研發(fā)和帶人經(jīng)驗,整理出如下方面。
首先JavaSE是核心,這是初學(xué)Java人員應(yīng)最先接觸學(xué)習(xí)的部分。Java的運行原理,jdk的配置,與jre的區(qū)別,基本數(shù)據(jù)類型,流程控制(順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)),數(shù)組、集合框架,異常處理等,這些都是比較容易學(xué)習(xí)的,需要多練習(xí),在練習(xí)過程中加強(qiáng)理解。面向?qū)ο蟛糠质荍ava初學(xué)者,尤其是沒有任何編程語言基礎(chǔ)的學(xué)起來有些難度,類、對象、繼承、封裝、多態(tài)等技術(shù)點需要多參照些現(xiàn)有的設(shè)計模型,學(xué)習(xí)設(shè)計的思路。諸如工廠模式、觀察者模式、代理模式等重要的設(shè)計模式也是需要學(xué)習(xí)的,否則在將來應(yīng)用框架時就會只知其然,不知其所以然。IO流、多線程也一定需要學(xué)習(xí),尤其是XML、JSON等文件格式一定要掌握,這在數(shù)據(jù)交互時常用。
其次是數(shù)據(jù)庫知識,作為初級Java程序員必須要掌握一種常用的關(guān)系型書庫的應(yīng)用,如MySQL或oracle等,數(shù)據(jù)庫對象諸如表、視圖等的創(chuàng)建、增刪改查語句,尤其是查詢,在企業(yè)中經(jīng)常需要從十幾張表、或幾十張表中查詢數(shù)據(jù),所以對于如何進(jìn)行內(nèi)連接、外連接、以及聯(lián)合查詢等一定要掌握,另外對于索引、事務(wù)等也要掌握。
第三是Java Web部分,由于Java主要做web開發(fā),一些前端技術(shù)HTML3、CSS5,javaScript,jQuery等這些不見得要學(xué)得有多深入,但是必須要掌握,tomcat、jsp,以及和數(shù)據(jù)庫的交互這些都是必須要掌握的。
第四是框架部分,主流的ORM框架有Mybatis、hibernate,MVC框架有Spring MVC、Struts2等,可以優(yōu)先掌握主流的SSM框架組合,框架的學(xué)習(xí)有人認(rèn)為很簡單,就按照規(guī)定、規(guī)范調(diào)用、使用唄,初學(xué)者可以先學(xué)習(xí)如何使用這些框架,然后慢慢的探究內(nèi)部原理,因為框架是技術(shù)封裝、簡化的產(chǎn)物。
這里面有些同類型的技術(shù)比如hibernate,如果會使用Mybatis了,那么上手就會很容易,同理如果Spring MVC框架應(yīng)用熟練了,那么Struts2框架其實就可以現(xiàn)學(xué)現(xiàn)賣了。
一個web程序包含的模塊很多,不一定包括所有模塊。
系統(tǒng)模塊:Windows、Linux系統(tǒng)等。
存儲模塊:這里既包括關(guān)系型數(shù)據(jù)庫MySQL、oracle等,也包括內(nèi)存數(shù)據(jù)庫redis、memcached等。
程序模塊:還可以細(xì)化成持久化模塊、業(yè)務(wù)邏輯模塊、表現(xiàn)層模塊,MVC框架的實現(xiàn)。
搜索模塊:應(yīng)用solr或Elasticsearch等。
服務(wù)器模塊:tomcat、weblogic、Resion等
中間件模塊:nginx、MQ消息隊列技術(shù)等。
在這里額外說一下技術(shù)和技能的區(qū)別,初學(xué)者學(xué)一個技術(shù)可能很容易,但是這個技術(shù)如何在企業(yè)開發(fā)環(huán)境中應(yīng)用這就是技能了,所以在學(xué)習(xí)的同時,要多應(yīng)用,最好通過一些案例項目來學(xué)習(xí),這樣既高效,學(xué)習(xí)的還扎實。
補(bǔ)充一點,現(xiàn)在的應(yīng)用級別越來越大,海量數(shù)據(jù)、高并發(fā)是處理的重點,單應(yīng)用的程序已經(jīng)無法滿足要求,分布式是趨勢,Dubbo、Zookeeper、Docker、SpringBoot、SpringCloud、MyCat等技術(shù),包括上面系統(tǒng)模塊里提到的一些技術(shù)都要學(xué)習(xí)的。
像MongoDB, Cassandra, HBase, DynamoDB, 和
Riak這些NoSQL缺乏傳統(tǒng)的原子事務(wù)機(jī)制,所謂原子事務(wù)機(jī)制是可以保證一系列寫操作要么全部完成,要么全部不會完成,不會發(fā)生只完成一系列中一兩個
寫操作;因為數(shù)據(jù)庫不提供這種事務(wù)機(jī)制支持,開發(fā)者需要自己編寫代碼來確保一系列寫操作的事務(wù)機(jī)制,比較復(fù)雜和測試。
這些NoSQL數(shù)據(jù)庫不提供事務(wù)機(jī)制原因在于其分布式特點,一系列寫操作中訪問的數(shù)據(jù)可能位于不同的分區(qū)服務(wù)器,這樣的事務(wù)就變成分布式事務(wù),在分
布式事務(wù)中實現(xiàn)原子性需要彼此協(xié)調(diào),而協(xié)調(diào)是耗費時間的,每臺機(jī)器在一個大事務(wù)過程中必須依次確認(rèn),這就需要一種協(xié)議確保一個事務(wù)中沒有任何一臺機(jī)器寫操
作失敗。
這種協(xié)調(diào)是昂貴的,會增加延遲時間,關(guān)鍵問題是,當(dāng)協(xié)調(diào)沒有完成時,其他操作是不能讀取事務(wù)中寫操作結(jié)果的,這是因為事務(wù)的all-or-
nothing原理導(dǎo)致,萬一協(xié)調(diào)過程發(fā)現(xiàn)某個寫操作不能完成,那么需要將其他寫操作成功的進(jìn)行回滾。針對分布式事務(wù)的分布式協(xié)調(diào)對整體數(shù)據(jù)庫性能有嚴(yán)重
影響,不只是吞吐量還包括延遲時間,這樣大部分NoSQL數(shù)據(jù)庫因為性能問題就選擇不提供分布式事務(wù)。
MongoDB, Riak, HBase, 和 Cassandra提供基于單一鍵的事務(wù),這是因為所有信息都和一個鍵key有關(guān),這個鍵是存儲在單個服務(wù)器上,這樣基于單鍵的事務(wù)不會帶來復(fù)雜的分布式協(xié)調(diào)。
那么看來擴(kuò)展性性能和分布式事務(wù)是一對矛盾,總要有取舍?實際上是不完全是,現(xiàn)在完全有可能提供高擴(kuò)展的性能同時提供分布式原子事務(wù)。
FIT是這樣一個在分布式系統(tǒng)提供原子事務(wù)的策略,在fairness公平性, isolation隔離性, 和throughput吞吐量(簡稱FIT)可以權(quán)衡。
一個支持分布式事務(wù)的可伸縮分布式系統(tǒng)能夠完成這三個屬性中兩個,公平是事務(wù)之間不會相互影響造成延遲;隔離性提供一種幻覺好像整個數(shù)據(jù)庫只有它自
己一個事務(wù),隔離性保證當(dāng)任何同時發(fā)生的事務(wù)發(fā)生沖突時,能夠保證彼此能看到彼此的寫操作結(jié)果,因此減輕了程序員為避免事務(wù)讀寫沖突的強(qiáng)邏輯推理要求;吞
吐量是指每單元時間數(shù)據(jù)庫能夠并發(fā)處理多少事務(wù)。
FIT是如下進(jìn)行權(quán)衡:
保證公平性fairness 和隔離性isolation, 但是犧牲吞吐量
保證公平性fairness和吞吐量, 犧牲隔離性isolation
保證隔離性isolation和吞吐量throughput, 但是犧牲公平性fairness.
犧牲公平性:放棄公平性,數(shù)據(jù)庫能有更多機(jī)會降低分布式事務(wù)的成本,主要成本是分布式協(xié)調(diào)帶來的,也就是說,不需要在每個事務(wù)過程內(nèi)對每個機(jī)器都依
次確認(rèn)事務(wù)完成,這樣排隊式的確認(rèn)commit事務(wù)是很浪費時間的,放棄公平性,意味著可以在事務(wù)外面進(jìn)行協(xié)調(diào),這樣就只是增加了協(xié)調(diào)時間,不會增加互相
沖突事務(wù)因為彼此沖突而不能運行所耽擱的時間,當(dāng)系統(tǒng)不需要公平性時,需要根據(jù)事務(wù)的優(yōu)先級或延遲等標(biāo)準(zhǔn)進(jìn)行指定先后執(zhí)行順序,這樣就能夠獲得很好的吞吐
量。
G-Store是一種放棄公平性的 Isolation-Throughput
的分布式key-value存儲,支持多鍵事務(wù)(multi-key transactions),MongoDB 和
HBase在鍵key在同樣分區(qū)上也支持多鍵事務(wù),但是不支持跨分區(qū)的事務(wù)。
總之:傳統(tǒng)分布式事務(wù)性能不佳的原因是確保原子性(分布式協(xié)調(diào))和隔離性同時重疊,創(chuàng)建一個高吞吐量分布式事務(wù)的關(guān)鍵是分離這兩種關(guān)注,這種分離原
子性和隔離性的視角將導(dǎo)致兩種類型的系統(tǒng),第一種選擇是弱隔離性能讓沖突事務(wù)并行執(zhí)行和確認(rèn)提交;第二個選擇重新排序原子性和隔離性機(jī)制保證它們不會某個
時間重疊,這是一種放棄公平的事務(wù)執(zhí)行,所謂放棄公平就是不再同時照顧原子性和隔離性了,有所傾斜,放棄高標(biāo)準(zhǔn)道德要求就會帶來高自由高效率。
當(dāng)前名稱:程序員nosql,程序員培訓(xùn)班要多少錢
文章源于:http://chinadenli.net/article49/dsgpchh.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊、營銷型網(wǎng)站建設(shè)、云服務(wù)器、軟件開發(fā)、外貿(mào)建站、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)