主頁 > 資料庫 > B+樹索引

B+樹索引

2020-09-15 22:46:48 資料庫

https://www.iteye.com/blog/zhuyuehua-1872202

 

1.索引結構          1.1 B+樹索引結構         從物理上說,索引通常可以分為:磁區和非磁區索引、常規B樹索引、位圖(bitmap)索引、翻轉 (reverse)索引等,其中,B樹索引屬于最常見的索引

   B樹索引是一個典型的樹結構,其包含的組件主要是:

 

      葉子節點(Leaf node):包含條目直接指向表里的資料行,

 

      分支節點(Branch node):包含的條目指向索引里其他的分支節點或者是葉子節點,

 

      根節點(Root node):一個B樹索引只有一個根節點,它實際就是位于樹的最頂端分支節點,

 

   可以用下圖一來描述B樹索引的結構,其中,B表示分支節點,而L表示葉子節點,

          

 

     對于分支節點塊(包括根節點塊)來說,其所包含的索引條目都是按照順序排列的(預設是升序排列,

 

也可以在創建索引時指定為降序排列),每個索引條目(也可以叫做每條記錄)都具有兩個欄位,第一個字

 

段表示當前該分支節點塊下面所鏈接的索引塊中所包含的最小鍵值;第二個欄位為四個位元組,表示所鏈接的

 

索引塊的地址,該地址指向下面一個索引塊,

 

     在一個分支節點塊中所能容納的記錄行數由資料塊大小以及索引鍵值的長度決定,

 

     對于葉子節點塊來說,其所包含的索引條目與分支節點一樣,都是按照順序排列的(預設是升序排列,

 

也可以在創建索引時指定為降序排列),每個索引條目(也可以叫做每條記錄)也具有兩個欄位,第一個字

 

段表示索引的鍵值,對于單列索引來說是一個值;而對于多列索引來說則是多個值組合在一起的,第二個字

 

段表示鍵值所對應的記錄行的ROWID,該ROWID是記錄行在表里的物理地址,如果索引是創建在非磁區表上或

 

者索引是磁區表上的本地索引的話,則該ROWID占用6個位元組;如果索引是創建在磁區表上的全域索引的話,

 

則該ROWID占用10個位元組,

 

     1.2 估算索引條目

 

對于每個索引塊來說,預設的PCTFREE為10%,也就是說最多只能使用其中的90%,同時9i后,這90%

 

中也不可能用盡,只能使用其中的87%左右,也就是說,8KB的資料塊中能夠實際用來存放索引資料的

 

空間大約為6488(8192×90%×88%)個位元組,

 

假設我們有一個非磁區表,表名為warecountd,其資料行數為130萬行,該表中有一個列,列名為goodid,其

 

型別為char(8),那么也就是說該goodid的長度為固定值:8,同時在該列上創建了一個B樹索引,

 

在葉子節點中,每個索引條目都會在資料塊中占一行空間,每一行用2到3個位元組作為行頭,行頭用來存放標

 

記以及鎖定型別等資訊,同時,在第一個表示索引的鍵值的欄位中,每一個索引列都有1個位元組表示資料長

 

度,后面則是該列具體的值,那么對于本例來說,在葉子節點中的一行所包含的資料大致如下圖二所示:

    

 

從上圖可以看到,在本例的葉子節點中,一個索引條目占18個位元組,同時我們知道8KB的資料塊中真正可以用

 

來存放索引條目的空間為6488位元組,那么在本例中,一個資料塊中大約可以放360(6488/18)個索引條目,

 

而對于我們表中的130萬條記錄來說,則需要大約3611(1300000/360)個葉子節點塊,

 

而對于分支節點里的一個條目(一行)來說,由于它只需保存所鏈接的其他索引塊的地址即可,而不需要保

 

存具體的資料行在哪里,因此它所占用的空間要比葉子節點要少,分支節點的一行中所存放的所鏈接的最小

 

鍵值所需空間與上面所描述的葉子節點相同;而存放的索引塊的地址只需要4個位元組,比葉子節點中所存放

 

的ROWID少了2個位元組,少的這2個位元組也就是ROWID中用來描述在資料塊中的行號所需的空間,因此,本例中

 

在分支節點中的一行所包含的資料大致如下圖三所示:

 

 

從上圖可以看到,在本例的分支節點中,一個索引條目占16個位元組,根據上面葉子節點相同的方式,我們可

 

以知道一個分支索引塊可以存放大約405(6488/16)個索引條目,而對于我們所需要的3611個葉子節點來

 

說,則總共需要大約9個分支索引塊,

 

這樣,我們就知道了我們的這個索引有2層,第一層為1個根節點,第二層為9個分支節點,而葉子節點數

 

為3611個,所指向的表的行數為1300000行,但是要注意,在oracle的索引中,層級號是倒過來的,也就是說

 

假設某個索引有N層,則根節點的層級號為N,而根節點下一層的分支節點的層級號為N-1,依此類推,對本例

 

來說,9個分支節點所在的層級號為1,而根節點所在的層級號為2,

 

2. B+樹索引的管理機制


    2.1 B+樹索引對于插入的管理

 

    對于B樹索引的插入情況的描述,可以分為兩種情況:

 

    一種是在一個已經充滿了資料的表上創建索引時,索引是怎么管理的;

 

    另一種則是當一行接著一行向表里插入或更新或洗掉資料時,索引是怎么管理的,

 

對于第一種情況來說,比較簡單,當在一個充滿了資料的表上創建索引(create index命令)時,oracle會

 

先掃描表里的資料并對其進行排序,然后生成葉子節點,生成所有的葉子節點以后,根據葉子節點的數量生

 

成若干層級的分支節點,最后生成根節點,這個程序是很清晰的,

 

當一開始在一個空的表上創建索引的時候,該索引沒有根節點,只有一個葉子節點,

 

隨著資料不斷被插入表里,該葉子節點中的索引條目也不斷增加,當該葉子節點充滿了索引條目而不能再放

 

下新的索引條目時,該索引就必須擴張,必須再獲取一個可用的葉子節點,這時,索引就包含了兩個葉子節

 

點,但是兩個葉子節點不可能單獨存在的,這時它們兩必須有一個上級的分支節點,其實這也就是根節點

 

了,于是,現在,我們的索引應該具有3個索引塊,一個根節點,兩個葉子節點,

 

葉子節點的拆分程序,這個程序需要分成兩種情況,一種是插入的鍵值不是最大值;另一種是插入的鍵值是最大值,

 

對于第一種情況來說,當一個非最大鍵值要進入索引,但是發現所應進入的索引塊不足以容納當前鍵值時:

 

1)從索引可用串列上獲得一個新的索引資料塊,

 

2)將當前充滿了的索引中的索引條目分成兩部分,一部分是具有較小鍵值的,另一部分是具有較大鍵值的,

 

Oracle會將具有較大鍵值的部分移入新的索引資料塊,而較小鍵值的部分保持不動,

 

3)將當前鍵值插入合適的索引塊中,可能是原來空間不足的索引塊,也可能是新的索引塊,

 

4)更新原來空間不足的索引塊的kdxlenxt資訊,使其指向新的索引塊,

 

5)更新位于原來空間不足的索引塊右邊的索引塊里的kdxleprv,使其指向新的索引塊,

 

6)向原來空間不足的索引塊的上一級的分支索引塊中添加一個索引條目,該索引條目中保存新的索引塊里的最小鍵值,以及新的索引塊的地址,

 

從上面有關葉子節點分裂的程序可以看出,其程序是非常復雜的,因此如果發生的是第二種情況,則為了簡

 

化該分裂程序,oracle省略了上面的第二步,而是直接進入第三步,將新的鍵值插入新的索引塊中,

 

 

在上例中,當葉子節點越來越多,導致原來的根節點不足以存放新的索引條目(這些索引條目指向葉子節

 

點)時,則該根節點必須進行分裂,當根節點進行分裂時:

 

1)從索引可用串列上獲得兩個新的索引資料塊,

 

2)將根節點中的索引條目分成兩部分,這兩部分分別放入兩個新的索引塊,從而形成兩個新的分支節點,

 

3)更新原來的根節點的索引條目,使其分別指向這兩個新的索引塊,

 

因此,這時的索引層次就變成了2層,同時可以看出,根節點索引塊在物理上始終都是同一個索引塊,而隨著

 

資料量的不斷增加,導致分支節點又要進行分裂,分支節點的分裂程序與根節點類似(實際上根節點分裂其

 

實是分支節點分裂的一個特例而已):

 

1)從索引可用串列上獲得一個新的索引資料塊,

 

2)將當前滿了的分支節點里的索引條目分成兩部分,較小鍵值的部分不動,而較大鍵值的部分移入新的索引塊,

3)將新的索引條目插入合適的分支索引塊,

 

4)在上層分支索引塊中添加一個新的索引條目,使其指向新加的分支索引塊,

 

當資料量再次不斷增加,導致原來的根節點不足以存放新的索引條目(這些索引條目指向分支節點)時,再

 

次引起根節點的分裂,其分裂程序與前面所說的由于葉子節點的增加而導致的根節點分裂的程序是一樣的,

 

 

同時,根節點分裂以后,索引的層級再次遞增,由此可以看出,根據B樹索引的分裂機制,一個B樹索引始終

 

都是平衡的,注意,這里的平衡是指每個葉子節點與根節點的距離都是相同的,同時,從索引的分裂機制可

 

以看出,當插入的鍵值始終都是增大的時候,索引總是向右擴展;而當插入的鍵值始終都是減小的時候,索

 

引則總是向左擴展,

 

 

圖解B+數的插入:

 

    例1

    往下圖的3階B+樹中插入關鍵字9



 

    首先查找9應插入的葉節點(最左下角的那一個),插入發現沒有破壞B+樹的性質,完畢,插完如下圖所示:

 

 

    例2

    往下圖的3階B+樹插入20



 

    首先查找20應插入的葉節點(第二個葉子節點),插入,如下圖



 

    發現第二個葉子節點已經破壞了B+樹的性質,則把之分解成[20 21], [37 44]兩個,并把21往父節點移,如下圖



 

    發現父節點也破壞了B+樹的性質,則把之再分解成[15 21], [44 59]兩個,并把21往其父節點移,如下圖



 

    這次沒有破壞B+樹的性質(如果還是不滿足B+樹的性質,可以遞回上去,直到滿足為至),插入完畢,

 

     3

    往下圖的3階B+樹插入100



 

首先查找100應插入的葉節點(最后一個節點), 插入,如下圖



 

修改其所有父輩節點的鍵值為100(只有插入比當前樹的最大數大的數時要做此步),如下圖



 

然后重復Eg.2的方法拆分節點,最后得

 

 

2.2 B+樹索引對于洗掉的管理

 

1)當洗掉表里的一條記錄時,其對應于索引里的索引條目并不會被物理的洗掉,只是做了一個洗掉標記,

 

2)當一個新的索引條目進入一個索引葉子節點的時候,oracle會檢查該葉子節點里是否存在被標記為洗掉的

 

索引條目,如果存在,則會將所有具有洗掉標記的索引條目從該葉子節點里物理的洗掉,

 

3)當一個新的索引條目進入索引時,oracle會將當前所有被清空的葉子節點(該葉子節點中所有的索引條目

 

都被設定為洗掉標記)識訓,從而再次成為可用索引塊,

 

盡管被洗掉的索引條目所占用的空間大部分情況下都能夠被重用,但仍然存在一些情況可能導致索引空間被

 

浪費,并造成索引資料塊很多但是索引條目很少的后果,這時該索引可以認為出現碎片,而導致索引出現碎

 

片的情況主要包括:

 

1)不合理的、較高的PCTFREE,很明顯,這將導致索引塊的可用空間減少,

 

2)索引鍵值持續增加(比如采用sequence生成序列號的鍵值),同時對索引鍵值按照順序連續洗掉,這時可

 

能導致索引碎片的發生,因為前面我們知道,某個索引塊中洗掉了部分的索引條目,只有當有鍵值進入該索

 

引塊時才能將空間識訓,而持續增加的索引鍵值永遠只會向插入排在前面的索引塊中,因此這種索引里的空

 

間幾乎不能識訓,而只有其所含的索引條目全部洗掉時,該索引塊才能被重新利用,

 

3)經常被洗掉或更新的鍵值,以后幾乎不再會被插入時,這種情況與上面的情況類似,

 

對于如何判斷索引是否出現碎片,方法非常簡單:直接運行ANALYZE INDEX … VALIDATE STRUCTURE命令,然

 

后檢查index_stats視圖的pct_used欄位,如果該欄位過低(低于50%),則說明存在碎片,

 

 

圖解B+數的洗掉:

 

    例1

    洗掉下圖3階B+樹的關鍵字91



 

首先找到91所在葉節點(最后一個節點),洗掉之,如下圖



 

沒有破壞B+樹的性質,洗掉完畢

 

    例2

    洗掉下圖3階B+樹的關鍵字97



 

    首先找到97所在葉節點(最后一個節點),洗掉之,然后修改該節點的父輩的鍵字為91(只有洗掉樹中最大數時要做此步),如下圖

 

 

    例3

    洗掉下圖3階B+樹的關鍵字51



 

首先找到51所在節點(第三個節點),洗掉之,如下圖



 

破壞了B+樹的性質,從該節點的兄弟節點(左邊或右邊)借節點44,并修改相應鍵值,判斷沒有破壞B+樹,完畢,如下圖

 

 

    例4

    洗掉下圖3階B+樹的關鍵字59



 

首先找到59所在葉節點(第三個節點),洗掉之,如下圖



 

破壞B+樹性質,嘗試借節點,無效(因為左兄弟節點被借也會破壞B+樹性質),合并第二第三葉節點并調整鍵值,如下圖



 

完畢,

 

     5

    洗掉下圖3階B+樹的關鍵字63



 

首先找到63所在葉節點(第四個節點),洗掉之,如下圖



 

合并第四五葉節點并調整鍵值,如下圖



 

發現第二層的第二個節點不滿足B+樹性質,從第二層的第一個節點借59,并調整鍵值,如下圖



 

 

2.3 B+樹索引對于更新的管理

而對于值被更新對于索引條目的影響,則可以認為是洗掉和插入的組合,也就是將被更新的舊值對應的索引

 

條目設定為D(洗掉)標記,同時將更新后的值按照順序插入合適的索引塊中,這里就不重復討論了,

 

3. 重建索引

 

3.1 如何重建索引

 

    ALTER INDEX … REBUILD

 

3.2 重建索引的好處

 

當我們重建索引以后,在物理上所能獲得的好處就是能夠減少索引所占的空間大小(特別是能夠減少葉子節

 

點的數量),而索引大小減小以后,又能帶來以下若干好處:

 

1)CBO對于索引的使用可能會產生一個較小的成本值,從而在執行計劃中選擇使用索引,

 

2)使用索引掃描的查詢掃描的物理索引塊會減少,從而提高效率,

 

3)由于需要快取的索引塊減少了,從而讓出了記憶體以供其他組件使用,

 

盡管重建索引具有一定的好處,但是盲目的認為重建索引能夠解決很多問題也是不正確的,比如我見過一個

 

生產系統,每隔一個月就要重建所有的索引(而且我相信,很多生產系統可能都會這么做),其中包括一些

 

100GB的大表,為了完成重建所有的索引,往往需要把這些作業分散到多個晚上進行,事實上,這是一個

 

7×24的系統,僅重建索引一項任務就消耗了非常多的系統資源,但是每隔一段時間就重建索引有意義嗎?這

 

里就有一些關于重建索引的很流行的說法,主要包括:

 

1)如果索引的層級超過X(X通常是3)級以后需要通過重建索引來降低其級別,

 

2)如果經常洗掉索引鍵值,則需要定時重建索引來識訓這些被洗掉的空間,

 

3)如果索引的clustering_factor很高,則需要重建索引來降低該值,

 

4)定期重建索引能夠提高性能,

 

對于第一點來說,我們在前面已經知道,B樹索引是一棵在高度上平衡的樹,所以重建索引基本不可能降低其

 

級別,除非是極特殊的情況導致該索引有非常大量的碎片,導致B樹索引“虛高”,那么這實際又來到第二點

 

上(因為碎片通常都是由于洗掉引起的),實際上,對于第一和第二點,我們應該通過運行ALTER INDEX …

 

REBUILD命令以后檢查indest_stats.pct_used欄位來判斷是否有必要重建索引,

 

clustering_factor是通過oracle的索引得到表資料塊的一個因子,實際上表示index列的排列順序和表中   index這個列的排列順序的關系,索引的重建并不能減少clustering_factor,因為重建index不能改變表中數 據存放的順序,同樣,洗掉后再創建index也不能降低clustering_factor,降低clustering_factor的關鍵在 于重建表里的資料,只有將表里的資料按照索引列排序以后,才能切實有效的降低clustering_factor,但是 如果某個表存在多個索引的時候,需要仔細決定應該選擇哪一個索引列來重建表(因為這樣的索引一個表只 有一個),   需要注意的是,clustering_factor主要影響index range scan,比如當一個表有1000條資料,200個資料塊 時,當通過索引去讀取這個表時,需要讀取1000個資料塊,你也許覺得奇怪這個表一共才200個資料塊,怎 么會需要讀1000個塊呢? 這是因為由于資料的存放順序是按object_name來存放的,通過index通過 object_id的順序來讀取表必然導致oracle多次重復讀取一個塊,   當然,在oracle 920 開始,對于cluster_factor 比較接近表塊數量的根據索引的大范圍查詢做了特別的處理, 不再是讀一個索引記錄去搜索一個表記錄了,而是成批處理(通過索引塊一批rowid一次去表塊中獲得一批記 錄),這樣就大大節約了讀的成本,   關于第四點,建議是不要定期重建索引,可以是定期檢查索引,只在需要時重建索引,   3.3 重建索引對性能的影響   最后我們來看一下重建索引對于性能的提高到底會有什么作用,假設我們有一個表,該表具有1百萬條記錄, 占用了100000個資料塊,而在該表上存在一個索引,在重建之前的pct_used為50%,高度為3,分支節點塊數 為40個,再加一個根節點塊,葉子節點數為10000個;重建該索引以后,pct_used為90%,高度為3,分支節點 塊數下降到20個,再加一個根節點塊,而葉子節點數下降到5000個,那么從理論上說:   1)如果通過索引獲取單獨1條記錄來說:   重建之前的成本:1個根+1個分支+1個葉子+1個表塊=4個邏輯讀   重建之后的成本:1個根+1個分支+1個葉子+1個表塊=4個邏輯讀   性能提高百分比:0   2)如果通過索引獲取100條記錄(占總記錄數的0.01%)來說,分兩種情況:   最差的clustering_factor(即該值等于表的資料行數):   重建之前的成本:1個根+1個分支+0.0001*10000(1個葉子)+100個表塊=103個邏輯讀   重建之后的成本:1個根+1個分支+0.0001*5000(1個葉子)+100個表塊=102.5個邏輯讀   性能提高百分比:0.5%(也就是減少了0.5個邏輯讀)   最好clustering_factor(即該值等于表的資料塊):   重建之前的成本:1個根+1個分支+0.0001*10000(1個葉子)+0.0001*100000(10個表塊)=13個邏輯讀   重建之后的成本:1個根+1個分支+0.0001*5000(1個葉子)+0.0001*100000(10個表塊)=12.5個邏輯讀   性能提高百分比:3.8%(也就是減少了0.5個邏輯讀)   3)如果通過索引獲取10000條記錄(占總記錄數的1%)來說,分兩種情況:   最差的clustering_factor(即該值等于表的資料行數):   重建之前的成本:1

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/50664.html

標籤:MySQL

上一篇:Hbase入門(四)——表結構設計-RowKey

下一篇:查看MySQL資料庫版本

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more