偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

數(shù)據(jù)庫(kù)索引只能用 B 樹(shù)嗎?

數(shù)據(jù)庫(kù) 其他數(shù)據(jù)庫(kù)
B 樹(shù)/B+ 樹(shù)作為最流行的數(shù)據(jù)庫(kù)索引數(shù)據(jù)結(jié)構(gòu),是基于磁盤的解決方案,其讀/寫性能穩(wěn)定。不同于傳統(tǒng)的二叉樹(shù),B 樹(shù)的單個(gè)節(jié)點(diǎn)中可以存儲(chǔ)大量的鍵值,這樣樹(shù)的高度較低,可以加快搜索和插入元素的速度,減少磁盤的 I/O 操作。B 樹(shù)的時(shí)間復(fù)雜度為 O(logN)。


今天我們來(lái)聊聊數(shù)據(jù)庫(kù)索引。

無(wú)論數(shù)據(jù)存儲(chǔ)于磁盤還是內(nèi)存,我們都需要有一種高效的數(shù)據(jù)結(jié)構(gòu)來(lái)訪問(wèn)和獲取數(shù)據(jù)。

那么我們應(yīng)該選用哪一種索引結(jié)構(gòu)呢?我們需要考慮如下幾個(gè)因素:

  • 數(shù)據(jù)存儲(chǔ)于內(nèi)存還是磁盤?
  • 數(shù)據(jù)格式和結(jié)構(gòu)是怎樣的?是字符串,數(shù)字,還是地理坐標(biāo)?
  • 搜索時(shí)是否需要精確匹配?是否需要容忍一定的輸入錯(cuò)誤?
  • 系統(tǒng)是讀操作多還是寫操作多?

我們來(lái)看看 8 種常用的數(shù)據(jù)庫(kù)索引結(jié)構(gòu)。

圖片圖片

B 樹(shù)

B 樹(shù)/B+ 樹(shù)作為最流行的數(shù)據(jù)庫(kù)索引數(shù)據(jù)結(jié)構(gòu),是基于磁盤的解決方案,其讀/寫性能穩(wěn)定。不同于傳統(tǒng)的二叉樹(shù),B 樹(shù)的單個(gè)節(jié)點(diǎn)中可以存儲(chǔ)大量的鍵值,這樣樹(shù)的高度較低,可以加快搜索和插入元素的速度,減少磁盤的 I/O 操作。B 樹(shù)的時(shí)間復(fù)雜度為 O(logN)。

Hash Index(哈希索引)

Map 數(shù)據(jù)結(jié)構(gòu)的常用實(shí)現(xiàn)。哈希值映射到存儲(chǔ)桶,該存儲(chǔ)桶存儲(chǔ)數(shù)據(jù)的偏移值。這樣我們可以根據(jù)鍵值很快地查找數(shù)據(jù)。

Skiplist(跳表)

一種常見(jiàn)的內(nèi)存索引類型,在 Redis SortedSet 中使用。跳表解決了鏈表搜索效率低下的問(wèn)題。每個(gè)節(jié)點(diǎn)都包含幾個(gè)前向指針,因此我們不被遍歷過(guò)程中的步長(zhǎng)所限制,可以跳過(guò)一些節(jié)點(diǎn)來(lái)加快搜索速度。

SSTable(Sorted String Table)

SSTable 是 Apache Cassandra 和其他 NoSQL 數(shù)據(jù)庫(kù)使用的一種持久性文件格式。它可以對(duì) memtable 里的內(nèi)存數(shù)據(jù)進(jìn)行排序以便快速訪問(wèn),并將其存儲(chǔ)在磁盤上的持久有序、不可變的一組文件中。不可變意味著 SSTables 永遠(yuǎn)不會(huì)被修改。它們稍后會(huì)合并到新的 SSTables 中,或者隨著數(shù)據(jù)的更新而被刪除。SSTable 與 LSM Tree 一起使用。與 B 樹(shù)相比,這種結(jié)構(gòu)對(duì)于寫入量大、快速增長(zhǎng)的超大數(shù)據(jù)集效率更高。

LSM 樹(shù)(Log-Structured Merge Tree)

LSM Tree 在 SSTable 的基礎(chǔ)上提供一整套存儲(chǔ)解決方案。它由兩層結(jié)構(gòu)組成:memtable (內(nèi)存)和 SSTable(磁盤)。新數(shù)據(jù)先寫入 memtable 中,如果 memtable 過(guò)大,那就會(huì) flush 到磁盤的 SSTable 上。各個(gè) SSTable 上會(huì)有重復(fù)的鍵值,在一段時(shí)間后會(huì)進(jìn)行合并壓縮。我們可以看到,每個(gè)寫入請(qǐng)求實(shí)際上都只在內(nèi)存中進(jìn)行,所以 LSM Tree 的寫入吞吐量明顯高于 B Tree。

Suffix Tree(后綴樹(shù))

后綴樹(shù)通常用于存儲(chǔ)字符串列表。它也被稱為 Trie 的壓縮版本。后綴樹(shù)常用于字符串的搜索和匹配,比如容忍一定輸入錯(cuò)誤的字符搜索,正則表達(dá)式匹配,最長(zhǎng)子串問(wèn)題等。

Inverted Index(倒排索引)

用于高效的文檔索引,比如 Lucene。在倒排索引中,索引按單詞進(jìn)行組織,每個(gè)單詞都指向包含該單詞的文檔列表。

R 樹(shù)

用于多維信息的搜索,包含地理坐標(biāo)、矩形、多邊形等。我們可以借助這種索引來(lái)搜索附近的餐館,找到最近的加油站,檢索附近所有路段等。

責(zé)任編輯:武曉燕 來(lái)源: ByteByteGo
相關(guān)推薦

2021-11-30 21:10:19

數(shù)據(jù)庫(kù)B樹(shù)索引

2019-03-14 09:51:50

MySQL存儲(chǔ)邏輯架構(gòu)

2021-11-12 05:00:00

數(shù)據(jù)庫(kù)索引技術(shù)

2019-07-03 09:16:30

數(shù)據(jù)庫(kù)原理二叉樹(shù)

2020-04-01 18:08:57

MySQL B-樹(shù)B+樹(shù)

2019-08-29 10:46:22

MySQL索引數(shù)據(jù)庫(kù)

2020-03-18 09:33:47

數(shù)據(jù)庫(kù)程序員數(shù)組

2011-03-16 08:54:45

Oracle數(shù)據(jù)庫(kù)索引

2022-12-07 09:17:33

數(shù)據(jù)庫(kù)openZFS

2019-09-24 09:33:53

MySQLB+樹(shù)InnoDB

2011-04-12 10:21:24

Oracle數(shù)據(jù)庫(kù)索引樹(shù)

2009-11-20 17:10:43

Oracle B樹(shù)索引

2019-01-29 19:43:10

MySQL索引數(shù)據(jù)庫(kù)

2021-02-16 16:38:41

MySQLB+樹(shù)索引

2021-11-01 23:57:03

數(shù)據(jù)庫(kù)哈希索引

2021-03-27 11:05:24

數(shù)據(jù)庫(kù)索引MySQL

2021-04-09 08:21:25

數(shù)據(jù)庫(kù)索引數(shù)據(jù)

2023-12-20 12:49:05

索引數(shù)據(jù)檢索數(shù)據(jù)庫(kù)

2019-05-15 10:55:07

機(jī)器學(xué)習(xí)數(shù)據(jù)庫(kù)索引

2017-02-08 11:00:50

數(shù)據(jù)庫(kù)索引類型
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)