為什么用mongodb而不用MySQL 考研計(jì)算機(jī)b 樹數(shù)據(jù)庫(kù)索引,一張數(shù)據(jù)頁能存儲(chǔ)多少個(gè)索引節(jié)點(diǎn)?
考研計(jì)算機(jī)b 樹數(shù)據(jù)庫(kù)索引,一張數(shù)據(jù)頁能存儲(chǔ)多少個(gè)索引節(jié)點(diǎn)?首先,從數(shù)據(jù)結(jié)構(gòu)的角度。B-tree和B-tree之間最重要的區(qū)別之一是B-tree只有葉節(jié)點(diǎn)來存儲(chǔ)數(shù)據(jù),其他節(jié)點(diǎn)用于索引。B樹意味著每個(gè)索
考研計(jì)算機(jī)b 樹數(shù)據(jù)庫(kù)索引,一張數(shù)據(jù)頁能存儲(chǔ)多少個(gè)索引節(jié)點(diǎn)?
首先,從數(shù)據(jù)結(jié)構(gòu)的角度。
B-tree和B-tree之間最重要的區(qū)別之一是B-tree只有葉節(jié)點(diǎn)來存儲(chǔ)數(shù)據(jù),其他節(jié)點(diǎn)用于索引。B樹意味著每個(gè)索引節(jié)點(diǎn)都有一個(gè)數(shù)據(jù)字段。這就決定了B-tree更適合存儲(chǔ)外部數(shù)據(jù),即所謂的磁盤數(shù)據(jù)。從MySQL(inoodb)的角度來看,使用B-tree作為索引。一般來說,索引量很大,尤其是關(guān)系數(shù)據(jù)庫(kù),數(shù)據(jù)量大,可以達(dá)到1億級(jí)。因此,為了減少對(duì)內(nèi)存的占用,索引也會(huì)存儲(chǔ)在磁盤上。那么MySQL是如何衡量查詢效率的呢?磁盤IO次數(shù)。B樹(class-B-tree)的特點(diǎn)是每一層都有大量的節(jié)點(diǎn)和少量的層。其目的是減少磁盤IO時(shí)間。在查詢數(shù)據(jù)時(shí),最好的方法是快速找到目標(biāo)索引,讀取數(shù)據(jù),使用B-tree樹可以很好地完成這一目的,但是B-tree的每個(gè)節(jié)點(diǎn)都有一個(gè)數(shù)據(jù)字段(指針),這無疑增加了節(jié)點(diǎn)的大小。換言之,它增加了磁盤IO的數(shù)量(磁盤IO讀取的數(shù)據(jù)量是固定的,單個(gè)數(shù)據(jù)變大,每次讀取的數(shù)據(jù)數(shù)量變少,IO的數(shù)量增加,一個(gè)IO更耗時(shí)!)在B樹中,除了葉節(jié)點(diǎn)外,其他節(jié)點(diǎn)不存儲(chǔ)數(shù)據(jù)。如果節(jié)點(diǎn)較小,則磁盤IO的數(shù)量較少。這是優(yōu)點(diǎn)之一。另一個(gè)優(yōu)點(diǎn)是B樹的所有數(shù)據(jù)字段都在葉節(jié)點(diǎn)中。一般來說,進(jìn)行優(yōu)化,即所有葉節(jié)點(diǎn)都用指針連接。這樣,所有的數(shù)據(jù)都可以通過遍歷葉節(jié)點(diǎn)獲得,從而可以進(jìn)行間隔訪問。至于mongodb為什么使用B-tree而不是B-tree,我們可以從設(shè)計(jì)的角度來考慮。它不是傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù),而是以JSON格式存儲(chǔ)的NoSQL,具有高性能、高可用性和易于擴(kuò)展的特點(diǎn)。首先,它擺脫了關(guān)系模型。上面提到的優(yōu)勢(shì)2并不那么強(qiáng)大。其次,MySQL使用B樹,數(shù)據(jù)都在葉子節(jié)點(diǎn)上,每個(gè)查詢都需要訪問葉子節(jié)點(diǎn)。Mongodb使用B樹,所有節(jié)點(diǎn)都有數(shù)據(jù)字段,只要找到指定的索引就可以訪問。毫無疑問,單次查詢的平均速度要比MySQL快(但從側(cè)面看,至少M(fèi)ySQL的平均查詢時(shí)差不大)。一般來說,MySQL選擇B-tree,mongodb根據(jù)自己的需要選擇B-tree。