日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

小白看完都会了!mysql面试题sql语句

發(fā)布時(shí)間:2023/12/20 数据库 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小白看完都会了!mysql面试题sql语句 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

開頭

Netty 作為當(dāng)前流行的 NIO 框架,在游戲、大數(shù)據(jù)通訊,云計(jì)算、物聯(lián)網(wǎng)等領(lǐng)域都有廣泛的應(yīng)用,大家熟知的 Dubbo,底層用的就是 Netty。尤其在高性能 RPC 方面,Netty 更是必不可少。然而,想要將 Netty 真正掌握并精通難度卻不小。一些學(xué)習(xí)者可能會(huì)遇到這些問題:

  • 多線程編程、Socket 通信、TCP/IP 協(xié)議棧等知識(shí)掌握不扎實(shí),學(xué)習(xí)過程比較吃力;
  • 學(xué)習(xí)了不少理論知識(shí),但真正跟具體項(xiàng)目結(jié)合在一起,解決實(shí)際問題時(shí),又感覺比較棘手;
  • 調(diào)用過程中遇到問題,不會(huì)定位,基本靠網(wǎng)上搜索,效率很低。

因此,如果沒有一個(gè)好的學(xué)習(xí)方法,抓不住重點(diǎn),只靠閱讀源碼,既耗時(shí)又很難吃透,很容易半途而廢

什么是 CAP

CAP 定理最初是由加州大學(xué)伯克利分校的計(jì)算機(jī)科學(xué)家埃里克·布魯爾(Eric Brewer)在 2000 年的 ACM PODC 上提出的一個(gè)猜想,也因此被叫做布魯爾定理。后來在 2002 年,麻省理工學(xué)院的賽斯·吉爾伯特(Seth Gilbert)和南希·林奇(Nancy Lynch)發(fā)表了 CAP 定理的證明,讓它成為分布式系統(tǒng)領(lǐng)域公認(rèn)的一個(gè)定理。

CAP 定理指出了,在一個(gè)跨區(qū)域網(wǎng)絡(luò)連接,共享數(shù)據(jù)的分布式系統(tǒng)中,一致性(Consistency),可用性(Availability)和分區(qū)容錯(cuò)性(Partition Tolerance) 這三個(gè)約束屬性最終只能同時(shí)滿足二個(gè)。

下面是關(guān)于這三個(gè)屬性的簡(jiǎn)單描述:

  • 一致性:客戶端進(jìn)行讀操作得到的數(shù)據(jù)永遠(yuǎn)是最近一次寫入的數(shù)據(jù),要求了對(duì)數(shù)據(jù)讀寫的強(qiáng)一致性。
  • 可用性:客戶端的請(qǐng)求在限定時(shí)間內(nèi)總能從非故障的系統(tǒng)節(jié)點(diǎn)得到正常的響應(yīng),其中不能有超時(shí),不能出錯(cuò)如 502之類。
  • 分區(qū)容錯(cuò)性:就是出現(xiàn)網(wǎng)絡(luò)分區(qū)現(xiàn)象,即節(jié)點(diǎn)間無(wú)法正常通信,數(shù)據(jù)同步出現(xiàn)延時(shí)等情況時(shí),系統(tǒng)仍能繼續(xù)提供服務(wù)。

需要注意的是,CAP 描述了一個(gè)常規(guī)的分布式系統(tǒng)場(chǎng)景:有網(wǎng)絡(luò)連接,且數(shù)據(jù)跨節(jié)點(diǎn)進(jìn)行共享。如果在整個(gè)系統(tǒng)中,數(shù)據(jù)只有一份,并且其他節(jié)點(diǎn)沒有對(duì)應(yīng)的副本,也不需要進(jìn)行跨節(jié)點(diǎn)的數(shù)據(jù)共享,這樣分布式系統(tǒng)就不是 CAP 關(guān)心的對(duì)象了,也談不上結(jié)合 CAP 定理去設(shè)計(jì)和實(shí)施。

深入認(rèn)識(shí) CAP

了解 CAP 基本概念之后,我們?cè)賮矸謩e對(duì) C,A,P 三個(gè)屬性進(jìn)一步學(xué)習(xí)下,加深對(duì) CAP 的理解。

C:一致性

這里的一致性從不同角度有著各自的描述方式,在分布式系統(tǒng)中表現(xiàn)是每個(gè)節(jié)點(diǎn)的數(shù)據(jù)是相同;而對(duì)于客戶端,表現(xiàn)是讀操作所得到的結(jié)果永遠(yuǎn)是最新寫入的。其中需要明確的是,對(duì)于分布式系統(tǒng)節(jié)點(diǎn)來說,是可能出現(xiàn)某個(gè)時(shí)刻擁有不同的數(shù)據(jù)的情況:如果在某個(gè)節(jié)點(diǎn)執(zhí)行原子性操作時(shí),對(duì)于執(zhí)行過程中的節(jié)點(diǎn)數(shù)據(jù)跟其他節(jié)點(diǎn)就并不完全一致,只有原子性操作執(zhí)行完成后,節(jié)點(diǎn)的數(shù)據(jù)才會(huì)繼續(xù)保持同步。比如常見的事務(wù)操作,只有事務(wù)提交后,客戶端才能讀取到事務(wù)寫入的數(shù)據(jù),失敗則回滾為舊的數(shù)據(jù),不會(huì)出現(xiàn)讀取事務(wù)中間寫入數(shù)據(jù)的情況。

一致性要求了在分布式環(huán)境下的操作要就像在單機(jī)上完成的一樣,當(dāng)客戶端發(fā)起寫請(qǐng)求時(shí),收到寫請(qǐng)求的節(jié)點(diǎn)會(huì)及時(shí)響應(yīng),并將更新的數(shù)據(jù)同步到另一個(gè)節(jié)點(diǎn),保證數(shù)據(jù)一致性。具體的工作流程,如下所示:

  • 客戶端向節(jié)點(diǎn) 1 發(fā)送寫操作,將數(shù)據(jù) X 更新為 1 ,
  • 更新操作成功,系統(tǒng)將更新的數(shù)據(jù)從節(jié)點(diǎn) 1 同步到節(jié)點(diǎn) 2,將節(jié)點(diǎn) 2 的舊數(shù)據(jù) X 也更新為 1。
  • 客戶端再向節(jié)點(diǎn) 2 發(fā)送讀操作獲取數(shù)據(jù) X 時(shí),就會(huì)得到 X 最新的值:1。
  • 一致性強(qiáng)調(diào)了數(shù)據(jù)的強(qiáng)一致,這一點(diǎn)要求對(duì)于一些系統(tǒng)可以說是十分重要的。比如電商系統(tǒng)的庫(kù)存扣減,金融系統(tǒng)的轉(zhuǎn)賬扣款等場(chǎng)景,任何出現(xiàn)一致性的問題,都可能會(huì)造成很嚴(yán)重的后果。

    A:可用性

    介紹完一致性,再來看下可用性,雖然可用性概念相對(duì)簡(jiǎn)單,但重要程度跟一致性一樣。要讓系統(tǒng)滿足可用性,就是要保證無(wú)論除了所有節(jié)點(diǎn)出現(xiàn)故障的情況外,系統(tǒng)都能返回有效的響應(yīng),允許響應(yīng)給客戶端是舊的數(shù)據(jù),但不能出現(xiàn)響應(yīng)失敗,超時(shí)的情況。

    可用性強(qiáng)調(diào)的是服務(wù)可用,但不保證數(shù)據(jù)的正確性。用一個(gè)簡(jiǎn)單的例子來描述分布式系統(tǒng)的可用性如下:允許客戶端向節(jié)點(diǎn) 1 或者節(jié)點(diǎn) 2 發(fā)起讀操作,當(dāng)其中某一個(gè)節(jié)點(diǎn)故障了,不管節(jié)點(diǎn)間數(shù)據(jù)是否一致,只要有節(jié)點(diǎn)服務(wù)能收到請(qǐng)求,就響應(yīng) X 的值,這樣就說明這兩個(gè)節(jié)點(diǎn)服務(wù)是滿足可用性。

    在可用性的描述,還值得一提的是關(guān)于什么算有效的響應(yīng)。要返回有效的響應(yīng),不能超時(shí),也不能出錯(cuò),結(jié)果不一定是正確的,比如返回了舊數(shù)據(jù),但是客戶端接收到后是能進(jìn)行正常業(yè)務(wù)處理的。

    P:分區(qū)容錯(cuò)性

    講完 C 和 A 之后,最后再講一下 P: 分區(qū)容錯(cuò)性。由于分布式系統(tǒng)多個(gè)節(jié)點(diǎn)往往部署在多個(gè)網(wǎng)絡(luò)環(huán)境下進(jìn)行相互通信,就難免出現(xiàn)一些網(wǎng)絡(luò)故障,如網(wǎng)絡(luò)丟包,網(wǎng)絡(luò)消息延遲,網(wǎng)絡(luò)中斷等情況,會(huì)導(dǎo)致節(jié)點(diǎn)間的通信出現(xiàn)問題,數(shù)據(jù)同步操作無(wú)法完成,分區(qū)容錯(cuò)性就要求了系統(tǒng)即使在網(wǎng)絡(luò)分區(qū)出現(xiàn)的情況下,能仍繼續(xù)對(duì)客戶端提供服務(wù)。

    因?yàn)榉植际较到y(tǒng)與單機(jī)不同,它涉及到了多節(jié)點(diǎn)間的通信和數(shù)據(jù)交互,避免不了網(wǎng)絡(luò)問題,如果沒有分區(qū)容錯(cuò)性,就意味著系統(tǒng)不允許出現(xiàn)節(jié)點(diǎn)間的通信出現(xiàn)任何錯(cuò)誤,錯(cuò)誤就意味著系統(tǒng)不可用,這在絕大數(shù)系統(tǒng)中無(wú)法接受的。因此對(duì)節(jié)點(diǎn)間的分區(qū)故障容錯(cuò)是必須要考慮的,也是 CAP 定理中分區(qū)容錯(cuò)性通常首先要保證的原因。

    如何應(yīng)用 CAP 定理

    了解完 CAP 定理的一致性(C),可用性(A)和分區(qū)容錯(cuò)性(P)之后,我們?cè)賮砜聪氯绾问褂眠@個(gè)定理。CAP 定理指明了 C,A,P三個(gè)屬性無(wú)法同時(shí)滿足,而在必有網(wǎng)絡(luò)交互和數(shù)據(jù)同步的情況下,就一定會(huì)有延遲和數(shù)據(jù)丟失的情況,對(duì)于這種情況我們又必須接受且保證系統(tǒng)不能掛掉。所以分區(qū)容錯(cuò)性是必須要保證的,剩下的就是在一致性 (C)和可用性(A)之間做選擇了。選擇了一致性,保證數(shù)據(jù)正確性,但也意味系統(tǒng)可能存在不可用的情況;而選擇可用性,保證服務(wù)的高可用,但也意味數(shù)據(jù)可能出現(xiàn)不一致性的情況。接下來就探討下應(yīng)用采用 CP 架構(gòu),AP 架構(gòu)所各自的特點(diǎn),以及如何根據(jù)不同的分布式場(chǎng)景選擇適合的架構(gòu)策略。

    CP

    對(duì)于 CP 架構(gòu)的分布式系統(tǒng)來說,為了保證一致性,當(dāng)出現(xiàn)網(wǎng)絡(luò)分區(qū)后,如果節(jié)點(diǎn) 1 上數(shù)據(jù) X 已經(jīng)更新為 2,但由于節(jié)點(diǎn) 間數(shù)據(jù)同步的通道已經(jīng)中斷,節(jié)點(diǎn) 1 數(shù)據(jù)無(wú)法同步到節(jié)點(diǎn) 2,節(jié)點(diǎn) 2 上的數(shù)據(jù) X 還是 1。此時(shí)如果客戶端訪問節(jié)點(diǎn) 2 的數(shù)據(jù) X,節(jié)點(diǎn) 2 就需要返回錯(cuò)誤,提示系統(tǒng)發(fā)生了錯(cuò)誤,直到節(jié)點(diǎn)間的數(shù)據(jù)保持同步。當(dāng)然這樣的處理方式明顯違背了可用性的要求,因此在 CAP 定理只能滿足 CP。

    如果一個(gè)分布式場(chǎng)景需要很強(qiáng)的一致性,或者能容忍系統(tǒng)長(zhǎng)時(shí)間無(wú)響應(yīng)但是數(shù)據(jù)要保持一致的情況,就比較適合使用 CP 架構(gòu)設(shè)計(jì)對(duì)應(yīng)的分布式系統(tǒng)。這樣的系統(tǒng)一旦發(fā)生網(wǎng)絡(luò)分區(qū)會(huì)導(dǎo)致數(shù)據(jù)無(wú)法同步情況,就要犧牲系統(tǒng)的可用性,直到節(jié)點(diǎn)數(shù)據(jù)達(dá)到一致后再響應(yīng)。在開源社區(qū)中采用 CP 架構(gòu)的應(yīng)用不少,比如 Redis,HBase,MongoDB,ZooKeeper,Etcd,Consul 等都是放棄了一定可用性而選擇 CP 屬性。

    AP

    如果采用 AP 架構(gòu)設(shè)計(jì)的分布式系統(tǒng),為了保證可用性,當(dāng)網(wǎng)絡(luò)分區(qū)發(fā)生后,同樣節(jié)點(diǎn) 1 上數(shù)據(jù) X 已經(jīng)更新為 2,但由于節(jié)點(diǎn)間數(shù)據(jù)同步的通道已經(jīng)中斷,節(jié)點(diǎn) 1 數(shù)據(jù)無(wú)法同步到節(jié)點(diǎn) 2,節(jié)點(diǎn) 2 上的數(shù)據(jù) X 還是 1。這是客戶端訪問節(jié)點(diǎn) 2 獲取數(shù)據(jù) X 時(shí),收到是正常的響應(yīng),舊數(shù)據(jù) X = 1,而實(shí)際上當(dāng)前最新的數(shù)據(jù) X 已經(jīng)是 2 了,這里就不滿足一致性的要求了,因此在 CAP 定理只能滿足 AP。

    同樣適合 AP 的場(chǎng)景有很多,比如一些查詢系統(tǒng),電商系統(tǒng)的商品查詢等,大多數(shù)為了保證系統(tǒng)的可用性,而犧牲一定的數(shù)據(jù)一致性,這樣也保證了用戶體驗(yàn),在開源界中采用 AP 模型的典型應(yīng)用有 Eurka,Cassandra。

    必須三選二嗎

    提到了 CAP 定理,大多數(shù)人都認(rèn)為無(wú)論什么情況,分布式系統(tǒng)只能在 C 和 A 中選擇一個(gè)。但這里的前提是系統(tǒng)發(fā)生了網(wǎng)絡(luò)分區(qū)情況,如果系統(tǒng)沒有發(fā)生網(wǎng)絡(luò)分區(qū)的情況,也就是說 P 不存在的時(shí)候,我們就沒有必要放棄 C 或者 A,因此進(jìn)行架構(gòu)設(shè)計(jì)時(shí)也應(yīng)該考慮沒有分區(qū)情況下如何保證 CA。除此之外,一個(gè)分布式系統(tǒng)不一定只能從 AP 與 CP 中做選擇,內(nèi)部不同模塊所應(yīng)對(duì)的場(chǎng)景也不同,完全有可能是一個(gè)模塊采用 AP 架構(gòu),另一個(gè)模塊采用 CP 架構(gòu)。作為優(yōu)秀的架構(gòu)師,不應(yīng)該受到大多數(shù)人對(duì) CAP 定理所認(rèn)識(shí)的局限,設(shè)計(jì)出符合自身業(yè)務(wù)場(chǎng)景的分布式系統(tǒng)才是重中之重。

    總結(jié)

    雖然我個(gè)人也經(jīng)常自嘲,十年之后要去成為外賣專員,但實(shí)際上依靠自身的努力,是能夠減少三十五歲之后的焦慮的,畢竟好的架構(gòu)師并不多。

    架構(gòu)師,是我們大部分技術(shù)人的職業(yè)目標(biāo),一名好的架構(gòu)師來源于機(jī)遇(公司)、個(gè)人努力(吃得苦、肯鉆研)、天分(真的熱愛)的三者協(xié)作的結(jié)果,實(shí)踐+機(jī)遇+努力才能助你成為優(yōu)秀的架構(gòu)師。

    如果你也想成為一名好的架構(gòu)師,那或許這份Java成長(zhǎng)筆記你需要閱讀閱讀,希望能夠?qū)δ愕穆殬I(yè)發(fā)展有所幫助。

    資料領(lǐng)取方式:戳這里免費(fèi)下載

    式:戳這里免費(fèi)下載](https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB)**

    [外鏈圖片轉(zhuǎn)存中…(img-huZBUXj0-1621922401473)]

    總結(jié)

    以上是生活随笔為你收集整理的小白看完都会了!mysql面试题sql语句的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。