在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    PHP中高級(jí)面試題 – 第三天

    一、簡(jiǎn)述一下MongoDB的應(yīng)用場(chǎng)景

    mongodb 支持副本集、索引、自動(dòng)分片,可以保證較高的性能可用性。

    更高的寫入負(fù)載

    默認(rèn)情況下,MongoDB 更側(cè)重高數(shù)據(jù)寫入性能,而非事務(wù)安全,MongoDB 很適合業(yè)務(wù)系統(tǒng)中有大量 “低價(jià)值” 數(shù)據(jù)的場(chǎng)景。但是應(yīng)當(dāng)避免在高事務(wù)安全性的系統(tǒng)中使用 MongoDB,除非能從架構(gòu)設(shè)計(jì)上保證事務(wù)安全。

    高可用性

    MongoDB 的復(fù)副集 (Master-Slave) 配置非常簡(jiǎn)潔方便,此外,MongoDB 可以快速響應(yīng)的處理單節(jié)點(diǎn)故障,自動(dòng)、安全地完成故障轉(zhuǎn)移。這些特性使得 MongoDB 能在一個(gè)相對(duì)不穩(wěn)定(如云主機(jī))的環(huán)境中,保持高可用性。

    數(shù)據(jù)量很大或者未來會(huì)變得很大

    依賴數(shù)據(jù)庫(kù) (MySQL) 自身的特性,完成數(shù)據(jù)的擴(kuò)展是較困難的事,在 MySQL 中,當(dāng)一個(gè)單達(dá)表到 5-10GB 時(shí)會(huì)出現(xiàn)明顯的性能降級(jí),此時(shí)需要通過數(shù)據(jù)的水平和垂直拆分、庫(kù)的拆分完成擴(kuò)展,使用 MySQL 通常需要借助驅(qū)動(dòng)層或代理層完成這類需求。而 MongoDB 內(nèi)建了多種數(shù)據(jù)分片的特性,可以很好地適應(yīng)大數(shù)據(jù)量的需求。

    基于位置的數(shù)據(jù)查詢

    MongoDB 支持二維空間索引,因此可以快速及精確地從指定位置獲取數(shù)據(jù)。

    表結(jié)構(gòu)不明確

    在一些傳統(tǒng) RDBMS 中,增加一個(gè)字段會(huì)鎖住整個(gè)數(shù)據(jù)庫(kù) / 表,或者在執(zhí)行一個(gè)重負(fù)載的請(qǐng)求時(shí)會(huì)明顯造成其它請(qǐng)求的性能降級(jí)。通常發(fā)生在數(shù)據(jù)表大于 1G 的時(shí)候(當(dāng)大于 1TB 時(shí)更甚)。 因 MongoDB 是文檔型數(shù)據(jù)庫(kù),為非結(jié)構(gòu)貨的文檔增加一個(gè)新字段是很快速的操作,并且不會(huì)影響到已有數(shù)據(jù)。另外一個(gè)好處當(dāng)業(yè)務(wù)數(shù)據(jù)發(fā)生變化時(shí),是將不再需要由 DBA 修改表結(jié)構(gòu)。

    二、數(shù)據(jù)庫(kù)設(shè)計(jì)經(jīng)驗(yàn),為什么進(jìn)行分表?分庫(kù)?一般多少數(shù)據(jù)量開始分表?分庫(kù)?分庫(kù)分表的目的?

    1、為什么要分表

    當(dāng)一張表的數(shù)據(jù)達(dá)到幾百萬時(shí),你查詢一次所花的時(shí)間會(huì)變多,如果有聯(lián)合查詢的話,有可能會(huì)死在那兒了。分表的目的就在于此,減小數(shù)據(jù)庫(kù)的負(fù)擔(dān),縮短查詢時(shí)間。日常開發(fā)中我們經(jīng)常會(huì)遇到大表的情況,所謂的大表是指存儲(chǔ)了百萬級(jí)乃至千萬級(jí)條記錄的表。這樣的表過于龐大,導(dǎo)致數(shù)據(jù)庫(kù)在查詢和插入的時(shí)候耗時(shí)太長(zhǎng),性能低下,如果涉及聯(lián)合查詢的情況,性能會(huì)更加糟糕。

    分表和表分區(qū)的目的就是減少數(shù)據(jù)庫(kù)的負(fù)擔(dān),提高數(shù)據(jù)庫(kù)的效率,通常點(diǎn)來講就是提高表的增刪改查效率。數(shù)據(jù)庫(kù)中的數(shù)據(jù)量不一定是可控的,在未進(jìn)行分庫(kù)分表的情況下,隨著時(shí)間和業(yè)務(wù)的發(fā)展,庫(kù)中的表會(huì)越來越多,表中的數(shù)據(jù)量也會(huì)越來越大,相應(yīng)地,數(shù)據(jù)操作,增刪改查的開銷也會(huì)越來越大;另外,由于無法進(jìn)行分布式式部署,而一臺(tái)服務(wù)器的資源(CPU、磁盤、內(nèi)存、IO 等)是有限的,最終數(shù)據(jù)庫(kù)所能承載的數(shù)據(jù)量、數(shù)據(jù)處理能力都將遭遇瓶頸。

    2、分表的方案

    做 mysql 集群,有人會(huì)問 mysql 集群,根分表有什么關(guān)系嗎?雖然它不是實(shí)際意義上的分表,但是它啟到了分表的作用,做集群的意義是什么呢?為一個(gè)數(shù)據(jù)庫(kù)減輕負(fù)擔(dān),說白了就是減少 sql 排隊(duì)隊(duì)列中的 sql 的數(shù)量,舉個(gè)例子:有 10 個(gè) sql 請(qǐng)求,如果放在一個(gè)數(shù)據(jù)庫(kù)服務(wù)器的排隊(duì)隊(duì)列中,他要等很長(zhǎng)時(shí)間,如果把這 10 個(gè) sql 請(qǐng)求,分配到 5 個(gè)數(shù)據(jù)庫(kù)服務(wù)器的排隊(duì)隊(duì)列中,一個(gè)數(shù)據(jù)庫(kù)服務(wù)器的隊(duì)列中只有 2 個(gè),這樣等待時(shí)間是不是大大的縮短了呢?

    linux mysql proxy 的安裝,配置,以及讀寫分離

    mysql replication 互為主從的安裝及配置,以及數(shù)據(jù)同步

    優(yōu)點(diǎn):擴(kuò)展性好,沒有多個(gè)分表后的復(fù)雜操作(php 代碼)

    缺點(diǎn):?jiǎn)蝹€(gè)表的數(shù)據(jù)量還是沒有變,一次操作所花的時(shí)間還是那么多,硬件開銷大。

    三、簡(jiǎn)述一下數(shù)據(jù)庫(kù)主從復(fù)制,讀寫分離

    * 什么是主從復(fù)制主從復(fù)制,是用來建立一個(gè)和主數(shù)據(jù)庫(kù)完全一樣的數(shù)據(jù)庫(kù)環(huán)境,稱為從數(shù)據(jù)庫(kù);

    * 主從復(fù)制的原理:1.數(shù)據(jù)庫(kù)有個(gè)bin-log二進(jìn)制文件,記錄了所有的sql語句。2.只需要把主數(shù)據(jù)庫(kù)的bin-log文件中的sql語句復(fù)制。3.讓其從數(shù)據(jù)的relay-log重做日志文件中再執(zhí)行一次這些sql語句即可。

    * 主從復(fù)制的作用1.做數(shù)據(jù)的熱備份,作為后備數(shù)據(jù)庫(kù),主數(shù)據(jù)庫(kù)服務(wù)器故障后,可切換到從數(shù)據(jù)庫(kù)繼續(xù)工作,避免數(shù)據(jù)丟失。2.架構(gòu)的擴(kuò)展。業(yè)務(wù)量越來越大,I/O訪問頻率過高,單機(jī)無法滿足,此時(shí)做多庫(kù)的存儲(chǔ),降低磁盤I/O訪問頻率,提高單機(jī)的I/O性能3.主從復(fù)制是讀寫分離的基礎(chǔ),使數(shù)據(jù)庫(kù)能制成更大 的并發(fā)。例如子報(bào)表中,由于部署報(bào)表的sql語句十分慢,導(dǎo)致鎖表,影響前臺(tái)的服務(wù)。如果前臺(tái)服務(wù)使用master,報(bào)表使用slave,那么報(bào)表sql將不會(huì)造成前臺(tái)所,保證了前臺(tái)的訪問速度。

    * 主從復(fù)制的幾種方式:1.同步復(fù)制:所謂的同步復(fù)制,意思是master的變化,必須等待slave-1,slave-2,…,slave-n完成后才能返回。2.異步復(fù)制:如同AJAX請(qǐng)求一樣。master只需要完成自己的數(shù)據(jù)庫(kù)操作即可。至于slaves是否收到二進(jìn)制日志,是否完成操作,不用關(guān)心。MYSQL的默認(rèn)設(shè)置。3.半同步復(fù)制:master只保證slaves中的一個(gè)操作成功,就返回,其他slave不管。這個(gè)功能,是由google為MYSQL引入的。

    * 關(guān)于讀寫分離在完成主從復(fù)制時(shí),由于slave是需要同步master的。所以對(duì)于insert/delete/update這些更新數(shù)據(jù)庫(kù)的操作,應(yīng)該在master中完成。而select的查詢操作,則落下到slave中。

    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
    上一篇 2022年6月12日 18:10
    下一篇 2022年6月12日 18:10

    相關(guān)推薦

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息