0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)和ES的差別

Android編程精選 ? 來(lái)源:掘金 ? 作者:Richard_Yi ? 2021-10-12 10:49 ? 次閱讀

https://juejin.cn/post/6889020742366920712

本文不會(huì)關(guān)注 ES 里面的分布式技術(shù)、相關(guān) API 的使用,而是專(zhuān)注分享下“ES 如何快速檢索”這個(gè)主題上面。這個(gè)也是我在學(xué)習(xí)之前對(duì) ES 最感興趣的部分。

本文大致包括以下內(nèi)容:

關(guān)于搜索:傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)和 ES 的差別

索引擎原理

細(xì)究倒排索引:

倒排索引具體是個(gè)什么樣子的(posting list→term dic→term index)

關(guān)于 postings list 的一些巧技(FOR、Roaring Bitmaps)

如何快速做聯(lián)合查詢(xún)?

關(guān)于搜索

先設(shè)想一個(gè)關(guān)于搜索的場(chǎng)景,假設(shè)我們要搜索一首詩(shī)句內(nèi)容中帶“前”字的古詩(shī)。

用傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)和 ES 實(shí)現(xiàn)會(huì)有什么差別?如果用像 MySQL 這樣的 RDBMS 來(lái)存儲(chǔ)古詩(shī)的話,我們應(yīng)該會(huì)去使用這樣的 SQL 去查詢(xún):

select name from poems where content like “%前%”;

這種我們稱(chēng)為順序掃描法,需要遍歷所有的記錄進(jìn)行匹配。不但效率低,而且不符合我們搜索時(shí)的期望。

比如我們?cè)谒阉鳌癆BCD“這樣的關(guān)鍵詞時(shí),通常還希望看到”A“,”AB“,”CD“,“ABC”的搜索結(jié)果。于是乎就有了專(zhuān)業(yè)的搜索引擎,比如我們今天的主角 ES。

搜索引擎原理

搜索引擎的搜索原理簡(jiǎn)單概括的話可以分為這么幾步:

內(nèi)容爬取,停頓詞過(guò)濾,比如一些無(wú)用的像”的“,“了”之類(lèi)的語(yǔ)氣詞/連接詞

內(nèi)容分詞,提取關(guān)鍵詞

根據(jù)關(guān)鍵詞建立倒排索引

用戶輸入關(guān)鍵詞進(jìn)行搜索

這里我們就引出了一個(gè)概念,也是我們今天的要剖析的重點(diǎn)倒排索引。也是 ES 的核心知識(shí)點(diǎn)。

如果你了解 ES 應(yīng)該知道,ES 可以說(shuō)是對(duì) Lucene 的一個(gè)封裝,里面關(guān)于倒排索引的實(shí)現(xiàn)就是通過(guò) lucene 這個(gè) jar 包提供的 API 實(shí)現(xiàn)的,所以下面講的關(guān)于倒排索引的內(nèi)容實(shí)際上都是 lucene 里面的內(nèi)容。

倒排索引

首先我們還不能忘了我們之前提的搜索需求,先看下建立倒排索引之后,我們上述的查詢(xún)需求會(huì)變成什么樣子。

這樣我們一輸入“前”,借助倒排索引就可以直接定位到符合查詢(xún)條件的古詩(shī)。

當(dāng)然這只是一個(gè)很大白話的形式來(lái)描述倒排索引的簡(jiǎn)要工作原理。在 ES 中,這個(gè)倒排索引是具體是個(gè)什么樣的,怎么存儲(chǔ)的等等,這些才是倒排索引的精華內(nèi)容。

①幾個(gè)概念

在進(jìn)入下文之前,先描述幾個(gè)前置概念。

term:關(guān)鍵詞這個(gè)東西是我自己的講法,在 ES 中,關(guān)鍵詞被稱(chēng)為 term。

postings list:還是用上面的例子,{靜夜思,望廬山瀑布}是 ”前“ 這個(gè) term 所對(duì)應(yīng)列表。在 ES 中,這些被描述為所有包含特定 term 文檔的 id 的集合。

由于整型數(shù)字 integer 可以被高效壓縮的特質(zhì),integer 是最適合放在 postings list 作為文檔的唯一標(biāo)識(shí)的,ES 會(huì)對(duì)這些存入的文檔進(jìn)行處理,轉(zhuǎn)化成一個(gè)唯一的整型 id。

再說(shuō)下這個(gè) id 的范圍,在存儲(chǔ)數(shù)據(jù)的時(shí)候,在每一個(gè) shard 里面,ES 會(huì)將數(shù)據(jù)存入不同的 segment,這是一個(gè)比 shard 更小的分片單位,這些 segment 會(huì)定期合并。

在每一個(gè) segment 里面都會(huì)保存最多 2^31 個(gè)文檔,每個(gè)文檔被分配一個(gè)唯一的 id,從 0 到 (2^31)-1。相關(guān)的名詞都是 ES 官方文檔給的描述,后面參考材料中都可以找到出處。

②索引內(nèi)部結(jié)構(gòu)

上面所描述的倒排索引,僅僅是一個(gè)很粗糙的模型。真的要在實(shí)際生產(chǎn)中使用,當(dāng)然還差的很遠(yuǎn)。

在實(shí)際生產(chǎn)場(chǎng)景中,比如 ES 最常用的日志分析,日志內(nèi)容進(jìn)行分詞之后,可以得到多少的 term?

那么如何快速的在海量 term 中查詢(xún)到對(duì)應(yīng)的 term 呢?遍歷一遍顯然是不現(xiàn)實(shí)的。

term dictionary:于是乎就有了 term dictionary,ES 為了能快速查找到 term,將所有的 term 排了一個(gè)序,二分法查找。

是不是感覺(jué)有點(diǎn)眼熟,這不就是 MySQL 的索引方式的,直接用 B+樹(shù)建立索引詞典指向被索引的數(shù)據(jù)。

term index:但是問(wèn)題又來(lái)了,你覺(jué)得 Term Dictionary 應(yīng)該放在哪里?肯定是放在內(nèi)存里面吧?磁盤(pán) io 那么慢。就像 MySQL 索引就是存在內(nèi)存里面了。

但是如果把整個(gè) term dictionary 放在內(nèi)存里面會(huì)有什么后果呢??jī)?nèi)存爆了。..

別忘了,ES 默認(rèn)可是會(huì)對(duì)全部 text 字段進(jìn)行索引,必然會(huì)消耗巨大的內(nèi)存,為此 ES 針對(duì)索引進(jìn)行了深度的優(yōu)化。

在保證執(zhí)行效率的同時(shí),盡量縮減內(nèi)存空間的占用。于是乎就有了 term index。

Term index:從數(shù)據(jù)結(jié)構(gòu)上分類(lèi)算是一個(gè)“Trie 樹(shù)”,也就是我們常說(shuō)的字典樹(shù)。

這是一種專(zhuān)門(mén)處理字符串匹配的數(shù)據(jù)結(jié)構(gòu),用來(lái)解決在一組字符串集合中快速查找某個(gè)字符串的問(wèn)題。

這棵樹(shù)不會(huì)包含所有的 term,它包含的是 term 的一些前綴(這也是字典樹(shù)的使用場(chǎng)景,公共前綴)。

通過(guò) term index 可以快速地定位到 term dictionary 的某個(gè) offset,然后從這個(gè)位置再往后順序查找。就想右邊這個(gè)圖所表示的。

怎么樣,像不像我們查英文字典,我們定位 S 開(kāi)頭的第一個(gè)單詞,或者定位到 Sh 開(kāi)頭的第一個(gè)單詞,然后再往后順序查詢(xún)?

lucene 在這里還做了兩點(diǎn)優(yōu)化,一是 term dictionary 在磁盤(pán)上面是分 block 保存的,一個(gè) block 內(nèi)部利用公共前綴壓縮,比如都是 Ab 開(kāi)頭的單詞就可以把 Ab 省去。

二是 term index 在內(nèi)存中是以 FST(finite state transducers)的數(shù)據(jù)結(jié)構(gòu)保存的。

FST 有兩個(gè)優(yōu)點(diǎn):

空間占用?。和ㄟ^(guò)對(duì)詞典中單詞前綴和后綴的重復(fù)利用,壓縮了存儲(chǔ)空間。

查詢(xún)速度快:O(len(str)) 的查詢(xún)時(shí)間復(fù)雜度。

FST 的理論比較復(fù)雜,本文不細(xì)講,延伸閱讀:

https://www.shenyanchao.cn/blog/2018/12/04/lucene-fst/

OK,現(xiàn)在我們能得到 lucene 倒排索引大致是個(gè)什么樣子的了。

關(guān)于 postings list 的一些巧技

在實(shí)際使用中,postings list 還需要解決幾個(gè)痛點(diǎn):

postings list 如果不進(jìn)行壓縮,會(huì)非常占用磁盤(pán)空間。

聯(lián)合查詢(xún)下,如何快速求交并集(intersections and unions)。

對(duì)于如何壓縮,可能會(huì)有人覺(jué)得沒(méi)有必要,”posting list 不是已經(jīng)只存儲(chǔ)文檔 id 了嗎?還需要壓縮?”,但是如果在 posting list 有百萬(wàn)個(gè) doc id 的情況,壓縮就顯得很有必要了。

比如按照朝代查詢(xún)古詩(shī),至于為啥需要求交并集,ES 是專(zhuān)門(mén)用來(lái)搜索的,肯定會(huì)有很多聯(lián)合查詢(xún)的需求吧 (AND、OR)。按照上面的思路,我們先將如何壓縮。

①壓縮

Frame of Reference:在 lucene 中,要求 postings lists 都要是有序的整形數(shù)組。

這樣就帶來(lái)了一個(gè)很好的好處,可以通過(guò) 增量編碼(delta-encode)這種方式進(jìn)行壓縮。

比如現(xiàn)在有 id 列表 [73, 300, 302, 332, 343, 372],轉(zhuǎn)化成每一個(gè) id 相對(duì)于前一個(gè) id 的增量值(第一個(gè) id 的前一個(gè) id 默認(rèn)是 0,增量就是它自己)列表是 [73, 227, 2, 30, 11, 29]。

在這個(gè)新的列表里面,所有的 id 都是小于 255 的,所以每個(gè) id 只需要一個(gè)字節(jié)存儲(chǔ)。

實(shí)際上 ES 會(huì)做的更加精細(xì):

它會(huì)把所有的文檔分成很多個(gè) block,每個(gè) block 正好包含 256 個(gè)文檔,然后單獨(dú)對(duì)每個(gè)文檔進(jìn)行增量編碼。

計(jì)算出存儲(chǔ)這個(gè) block 里面所有文檔最多需要多少位來(lái)保存每個(gè) id,并且把這個(gè)位數(shù)作為頭信息(header)放在每個(gè) block 的前面。這個(gè)技術(shù)叫 Frame of Reference。

上圖也是來(lái)自于 ES 官方博客中的一個(gè)示例(假設(shè)每個(gè) block 只有 3 個(gè)文件而不是 256)。

FOR 的步驟可以總結(jié)為:

進(jìn)過(guò)最后的位壓縮之后,整型數(shù)組的類(lèi)型從固定大?。?,16,32,64 位)4 種類(lèi)型,擴(kuò)展到了 [1-64] 位共 64 種類(lèi)型。

通過(guò)以上的方式可以極大的節(jié)省 posting list 的空間消耗,提高查詢(xún)性能。不過(guò) ES 為了提高 filter 過(guò)濾器查詢(xún)的性能,還做了更多的工作,那就是緩存。

Roaring Bitmaps (for filter cache):在 ES 中,可以使用 filters 來(lái)優(yōu)化查詢(xún),filter 查詢(xún)只處理文檔是否匹配與否,不涉及文檔評(píng)分操作,查詢(xún)的結(jié)果可以被緩存。

對(duì)于 filter 查詢(xún),es 提供了 filter cache 這種特殊的緩存,filter cache 用來(lái)存儲(chǔ) filters 得到的結(jié)果集。

緩存 filters 不需要太多的內(nèi)存,它只保留一種信息,即哪些文檔與 filter 相匹配。同時(shí)它可以由其它的查詢(xún)復(fù)用,極大地提升了查詢(xún)的性能。

我們上面提到的 Frame Of Reference 壓縮算法對(duì)于 postings list 來(lái)說(shuō)效果很好,但對(duì)于需要存儲(chǔ)在內(nèi)存中的 filter cache 等不太合適。

filter cache 會(huì)存儲(chǔ)那些經(jīng)常使用的數(shù)據(jù),針對(duì) filter 的緩存就是為了加速處理效率,對(duì)壓縮算法要求更高。

對(duì)于這類(lèi) postings list,ES 采用不一樣的壓縮方式。那么讓我們一步步來(lái)。首先我們知道 postings list 是 Integer 數(shù)組,具有壓縮空間。

假設(shè)有這么一個(gè)數(shù)組,我們第一個(gè)壓縮的思路是什么?用位的方式來(lái)表示,每個(gè)文檔對(duì)應(yīng)其中的一位,也就是我們常說(shuō)的位圖,bitmap。

它經(jīng)常被作為索引用在數(shù)據(jù)庫(kù)、查詢(xún)引擎和搜索引擎中,并且位操作(如 and 求交集、or 求并集)之間可以并行,效率更好。

但是,位圖有個(gè)很明顯的缺點(diǎn),不管業(yè)務(wù)中實(shí)際的元素基數(shù)有多少,它占用的內(nèi)存空間都恒定不變。

也就是說(shuō)不適用于稀疏存儲(chǔ)。業(yè)內(nèi)對(duì)于稀疏位圖也有很多成熟的壓縮方案,lucene 采用的就是 roaring bitmaps。

我這里用簡(jiǎn)單的方式描述一下這個(gè)壓縮過(guò)程是怎么樣:

將 doc id 拆成高 16 位,低 16 位。對(duì)高位進(jìn)行聚合 (以高位做 key,value 為有相同高位的所有低位數(shù)組),根據(jù)低位的數(shù)據(jù)量 (不同高位聚合出的低位數(shù)組長(zhǎng)度不相同),使用不同的 container(數(shù)據(jù)結(jié)構(gòu)) 存儲(chǔ)。

len《4096 ArrayContainer 直接存值

len》=4096 BitmapContainer 使用 bitmap 存儲(chǔ)

分界線的來(lái)源:value 的最大總數(shù)是為2^16=65536. 假設(shè)以 bitmap 方式存儲(chǔ)需要 65536bit=8kb,而直接存值的方式,一個(gè)值 2 byte,4K 個(gè)總共需要2byte*4K=8kb。

所以當(dāng) value 總量 《4k 時(shí),使用直接存值的方式更節(jié)省空間。

空間壓縮主要體現(xiàn)在:

高位聚合(假設(shè)數(shù)據(jù)中有 100w 個(gè)高位相同的值,原先需要 100w2byte,現(xiàn)在只要 12byte)

低位壓縮

缺點(diǎn)就在于位操作的速度相對(duì)于原生的 bitmap 會(huì)有影響。這就是 trade-off 呀。平衡的藝術(shù)。

②聯(lián)合查詢(xún)

講完了壓縮,我們?cè)賮?lái)講講聯(lián)合查詢(xún)。先講簡(jiǎn)單的,如果查詢(xún)有 filter cache,那就是直接拿 filter cache 來(lái)做計(jì)算,也就是說(shuō)位圖來(lái)做 AND 或者 OR 的計(jì)算。

如果查詢(xún)的 filter 沒(méi)有緩存,那么就用 skip list 的方式去遍歷磁盤(pán)上的 postings list。

以上是三個(gè) posting list。我們現(xiàn)在需要把它們用 AND 的關(guān)系合并,得出 posting list 的交集。

首先選擇最短的 posting list,逐個(gè)在另外兩個(gè) posting list 中查找看是否存在,最后得到交集的結(jié)果。

遍歷的過(guò)程可以跳過(guò)一些元素,比如我們遍歷到綠色的 13 的時(shí)候,就可以跳過(guò)藍(lán)色的 3 了,因?yàn)?3 比 13 要小。

用 skip list 還會(huì)帶來(lái)一個(gè)好處,還記得前面說(shuō)的嗎,postings list 在磁盤(pán)里面是采用 FOR 的編碼方式存儲(chǔ)的。

會(huì)把所有的文檔分成很多個(gè) block,每個(gè) block 正好包含 256 個(gè)文檔,然后單獨(dú)對(duì)每個(gè)文檔進(jìn)行增量編碼,計(jì)算出存儲(chǔ)這個(gè) block 里面所有文檔最多需要多少位來(lái)保存每個(gè) id,并且把這個(gè)位數(shù)作為頭信息(header)放在每個(gè) block 的前面。

因?yàn)檫@個(gè) FOR 的編碼是有解壓縮成本的。利用 skip list,除了跳過(guò)了遍歷的成本,也跳過(guò)了解壓縮這些壓縮過(guò)的 block 的過(guò)程,從而節(jié)省了 cpu

總結(jié)

下面我們來(lái)做一個(gè)技術(shù)總結(jié):

①為了能夠快速定位到目標(biāo)文檔,ES 使用倒排索引技術(shù)來(lái)優(yōu)化搜索速度,雖然空間消耗比較大,但是搜索性能提高十分顯著。

②為了能夠在數(shù)量巨大的 terms 中快速定位到某一個(gè) term,同時(shí)節(jié)約對(duì)內(nèi)存的使用和減少磁盤(pán) io 的讀取。

lucene 使用 ”term index→term dictionary→postings list“ 的倒排索引結(jié)構(gòu),通過(guò) FST 壓縮放入內(nèi)存,進(jìn)一步提高搜索效率。

③為了減少 postings list 的磁盤(pán)消耗,lucene 使用了 FOR(Frame of Reference)技術(shù)壓縮,帶來(lái)的壓縮效果十分明顯。

④ES 的 filter 語(yǔ)句采用了 Roaring Bitmap 技術(shù)來(lái)緩存搜索結(jié)果,保證高頻 filter 查詢(xún)速度的同時(shí)降低存儲(chǔ)空間消耗。

⑤在聯(lián)合查詢(xún)時(shí),在有 filter cache 的情況下,會(huì)直接利用位圖的原生特性快速求交并集得到聯(lián)合查詢(xún)結(jié)果,否則使用 skip list 對(duì)多個(gè) postings list 求交并集,跳過(guò)遍歷成本并且節(jié)省部分?jǐn)?shù)據(jù)的解壓縮 cpu 成本。

Elasticsearch 的索引思路

將磁盤(pán)里的東西盡量搬進(jìn)內(nèi)存,減少磁盤(pán)隨機(jī)讀取次數(shù) (同時(shí)也利用磁盤(pán)順序讀特性),結(jié)合各種壓縮算法,用及其苛刻的態(tài)度使用內(nèi)存。

所以,對(duì)于使用 Elasticsearch 進(jìn)行索引時(shí)需要注意:

不需要索引的字段,一定要明確定義出來(lái),因?yàn)槟J(rèn)是自動(dòng)建索引的。

同樣的道理,對(duì)于 String 類(lèi)型的字段,不需要 analysis 的也需要明確定義出來(lái),因?yàn)槟J(rèn)也是會(huì) analysis 的。

選擇有規(guī)律的 ID 很重要,隨機(jī)性太大的 ID(比如 Java 的 UUID) 不利于查詢(xún)。

最后說(shuō)一下,技術(shù)選型永遠(yuǎn)伴隨著業(yè)務(wù)場(chǎng)景的考量,每種數(shù)據(jù)庫(kù)都有自己要解決的問(wèn)題(或者說(shuō)擅長(zhǎng)的領(lǐng)域),對(duì)應(yīng)的就有自己的數(shù)據(jù)結(jié)構(gòu),而不同的使用場(chǎng)景和數(shù)據(jù)結(jié)構(gòu),需要用不同的索引,才能起到最大化加快查詢(xún)的目的。

這篇文章講的雖是 Lucene 如何實(shí)現(xiàn)倒排索引,如何精打細(xì)算每一塊內(nèi)存、磁盤(pán)空間、如何用詭譎的位運(yùn)算加快處理速度。

但往高處思考,再類(lèi)比一下 MySQL,你就會(huì)發(fā)現(xiàn),雖然都是索引,但是實(shí)現(xiàn)起來(lái),截然不同?;\統(tǒng)的來(lái)說(shuō),B-tree 索引是為寫(xiě)入優(yōu)化的索引結(jié)構(gòu)。

當(dāng)我們不需要支持快速的更新的時(shí)候,可以用預(yù)先排序等方式換取更小的存儲(chǔ)空間,更快的檢索速度等好處,其代價(jià)就是更新慢,就像 ES。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1461

    瀏覽量

    61490
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    3712

    瀏覽量

    64025

原文標(biāo)題:別再說(shuō)你不會(huì)ElasticSearch,都給你整理好了

文章出處:【微信號(hào):AndroidPush,微信公眾號(hào):Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    數(shù)字化時(shí)代的數(shù)據(jù)管理:多樣化數(shù)據(jù)庫(kù)選型指南

    挑戰(zhàn)。數(shù)據(jù)庫(kù)作為數(shù)據(jù)管理的核心技術(shù),其選型對(duì)于系統(tǒng)至關(guān)重要。傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)(RDBMS)以其
    的頭像 發(fā)表于 07-08 19:10 ?148次閱讀
    數(shù)字化時(shí)代的<b class='flag-5'>數(shù)據(jù)</b>管理:多樣化<b class='flag-5'>數(shù)據(jù)庫(kù)</b>選型指南

    鴻蒙開(kāi)發(fā)接口數(shù)據(jù)管理:【@ohos.data.rdb (關(guān)系數(shù)據(jù)庫(kù))】

    關(guān)系數(shù)據(jù)庫(kù)(Relational Database,RDB)是一種基于關(guān)系模型來(lái)管理數(shù)據(jù)數(shù)據(jù)庫(kù)
    的頭像 發(fā)表于 06-10 18:35 ?1046次閱讀

    HarmonyOS開(kāi)發(fā)案例:【搭建關(guān)系數(shù)據(jù)庫(kù)】(4)

    本節(jié)將介紹如何調(diào)用關(guān)系數(shù)據(jù)庫(kù)接口在本地搭建數(shù)據(jù)庫(kù),并讀寫(xiě)相應(yīng)的用戶數(shù)據(jù)。
    的頭像 發(fā)表于 05-11 10:27 ?653次閱讀
    HarmonyOS開(kāi)發(fā)案例:【搭建<b class='flag-5'>關(guān)系</b><b class='flag-5'>型</b><b class='flag-5'>數(shù)據(jù)庫(kù)</b>】(4)

    HarmonyOS開(kāi)發(fā)案例:【關(guān)系數(shù)據(jù)庫(kù)

    使用關(guān)系數(shù)據(jù)庫(kù)的相關(guān)接口實(shí)現(xiàn)了對(duì)賬單的增、刪、改、查操作。
    的頭像 發(fā)表于 04-22 14:58 ?560次閱讀
    HarmonyOS開(kāi)發(fā)案例:【<b class='flag-5'>關(guān)系</b><b class='flag-5'>型</b><b class='flag-5'>數(shù)據(jù)庫(kù)</b>】

    鴻蒙HarmonyOS開(kāi)發(fā)實(shí)例:【分布式關(guān)系數(shù)據(jù)庫(kù)

    使用[@ohos.data.relationalStore]接口和[@ohos.distributedDeviceManager]?接口展示了在eTS中分布式關(guān)系數(shù)據(jù)庫(kù)的使用,在增、刪、改、查的基本操作外,還包括分布式
    的頭像 發(fā)表于 04-11 09:52 ?598次閱讀
    鴻蒙HarmonyOS開(kāi)發(fā)實(shí)例:【分布式<b class='flag-5'>關(guān)系</b><b class='flag-5'>型</b><b class='flag-5'>數(shù)據(jù)庫(kù)</b>】

    輕量級(jí)數(shù)據(jù)庫(kù)有哪些類(lèi)型

    輕量級(jí)數(shù)據(jù)庫(kù)是指具有小巧、靈活、高效的特點(diǎn),適用于小規(guī)模項(xiàng)目和嵌入式設(shè)備的數(shù)據(jù)庫(kù)管理系統(tǒng)。下面是對(duì)輕量級(jí)數(shù)據(jù)庫(kù)類(lèi)型的詳細(xì)介紹,包括關(guān)系
    的頭像 發(fā)表于 12-20 11:29 ?1015次閱讀

    常見(jiàn)的存儲(chǔ)Idea數(shù)據(jù)庫(kù)的地方

    Idea的數(shù)據(jù)庫(kù)被存儲(chǔ)在許多不同的地方,取決于應(yīng)用程序和使用的技術(shù)。下面將詳細(xì)描述一些常見(jiàn)的存儲(chǔ)Idea數(shù)據(jù)庫(kù)的地方。 關(guān)系數(shù)據(jù)庫(kù)(RDB
    的頭像 發(fā)表于 12-06 14:15 ?799次閱讀

    mysql數(shù)據(jù)庫(kù)基礎(chǔ)命令

    MySQL是一個(gè)流行的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),經(jīng)常用于存儲(chǔ)、管理和操作數(shù)據(jù)。在本文中,我們將詳細(xì)介紹MySQL的基礎(chǔ)命令,并提供與每個(gè)命令相關(guān)的詳細(xì)解釋。 登錄MySQL 要登錄MySQ
    的頭像 發(fā)表于 12-06 10:56 ?439次閱讀

    oracle數(shù)據(jù)庫(kù)的使用方法

    Oracle數(shù)據(jù)庫(kù)是一種關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),它由Oracle公司開(kāi)發(fā)和維護(hù)。它提供了安全、可靠和高性能的數(shù)據(jù)庫(kù)管理解決方案,被廣泛應(yīng)用于企
    的頭像 發(fā)表于 12-06 10:10 ?1045次閱讀

    redis是關(guān)系數(shù)據(jù)庫(kù)

    Redis不是關(guān)系數(shù)據(jù)庫(kù),它是一種基于鍵值對(duì)的NoSQL數(shù)據(jù)庫(kù)。在本文中,我將對(duì)Redis進(jìn)行詳細(xì)介紹,包括其特點(diǎn)、用途、常見(jiàn)命令和應(yīng)用場(chǎng)景等。 Redis(REmote DIcti
    的頭像 發(fā)表于 12-05 10:32 ?1226次閱讀

    NoSQL 數(shù)據(jù)庫(kù)如何選型

    什么是NoSQL數(shù)據(jù)庫(kù)?為什么要使用NoSQL數(shù)據(jù)庫(kù)?鍵值數(shù)據(jù)庫(kù)內(nèi)存鍵值數(shù)據(jù)庫(kù)文檔數(shù)據(jù)庫(kù)列式數(shù)據(jù)庫(kù)
    的頭像 發(fā)表于 11-26 08:05 ?357次閱讀
    NoSQL <b class='flag-5'>數(shù)據(jù)庫(kù)</b>如何選型

    什么是NoSQL?NoSQL數(shù)據(jù)庫(kù)的使用場(chǎng)景和架構(gòu)介紹

    NoSQL,全稱(chēng)為Not Only SQL,指的是非關(guān)系數(shù)據(jù)庫(kù)。NoSQL有時(shí)也稱(chēng)作Not Only SQL的縮寫(xiě),是對(duì)不同于傳統(tǒng)關(guān)系
    的頭像 發(fā)表于 11-09 11:01 ?1836次閱讀
    什么是NoSQL?NoSQL<b class='flag-5'>數(shù)據(jù)庫(kù)</b>的使用場(chǎng)景和架構(gòu)介紹

    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)——MongoDB數(shù)據(jù)庫(kù)介紹和數(shù)據(jù)恢復(fù)案例

    MongoDB數(shù)據(jù)庫(kù)是文檔數(shù)據(jù)存儲(chǔ)庫(kù),將文檔存儲(chǔ)在集合之中,不是像MySQL一樣的關(guān)系數(shù)據(jù)庫(kù)。
    的頭像 發(fā)表于 11-08 15:04 ?777次閱讀
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)——MongoDB<b class='flag-5'>數(shù)據(jù)庫(kù)</b>介紹和<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例

    Access數(shù)據(jù)庫(kù)案例:Labview數(shù)據(jù)存儲(chǔ)

     在數(shù)據(jù)庫(kù)領(lǐng)域,Access是由Microsoft開(kāi)發(fā)的一款基于Windows平臺(tái)的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)。它提供了一個(gè)使用簡(jiǎn)便的用戶界面,可用于創(chuàng)建、管理和查詢(xún)
    發(fā)表于 10-26 16:23 ?9次下載

    什么是數(shù)據(jù)庫(kù)?除了MySQL還有哪些數(shù)據(jù)庫(kù)?

    對(duì)于大多數(shù)項(xiàng)目,用 MySQL 等關(guān)系數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)數(shù)據(jù)就足夠了。但關(guān)系
    發(fā)表于 10-13 10:20 ?535次閱讀
    什么是<b class='flag-5'>數(shù)據(jù)庫(kù)</b>?除了MySQL還有哪些<b class='flag-5'>數(shù)據(jù)庫(kù)</b>?