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

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

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

嵌入式數(shù)據(jù)庫(kù)為什么不使用關(guān)系數(shù)據(jù)模型

星星科技指導(dǎo)員 ? 來(lái)源:嵌入式計(jì)算設(shè)計(jì) ? 作者:Duncan Bates ? 2022-08-28 10:00 ? 次閱讀

以傳統(tǒng)方式處理數(shù)據(jù)管理并不總是能很好地應(yīng)用于嵌入式系統(tǒng)。關(guān)系數(shù)據(jù)庫(kù)模型的流行是無(wú)可爭(zhēng)辯的,但這并不意味著它是處理寶貴的 CPU、內(nèi)存和存儲(chǔ)資源時(shí)的正確選擇。關(guān)系模型的一種替代方法可以幫助降低硬件要求并為復(fù)雜的數(shù)據(jù)關(guān)系建模,從而允許供應(yīng)商為手頭的應(yīng)用程序釋放資源。

在競(jìng)爭(zhēng)日益激烈的市場(chǎng)中,嵌入式應(yīng)用程序供應(yīng)商不斷尋找新方法來(lái)降低應(yīng)用程序成本和上市時(shí)間,并增加應(yīng)用程序功能以最終獲得市場(chǎng)份額并促進(jìn)產(chǎn)品銷售。雖然收入利潤(rùn)率受到擠壓,但消費(fèi)者期望新產(chǎn)品發(fā)布具有更高的質(zhì)量和功能。供應(yīng)商越來(lái)越愿意將第三方組件添加到新產(chǎn)品和現(xiàn)有產(chǎn)品中,以實(shí)現(xiàn)這些目標(biāo)。

任何嵌入式應(yīng)用程序中的一個(gè)重要組成部分是高效的數(shù)據(jù)管理。商業(yè)嵌入式數(shù)據(jù)管理引擎正在獲得認(rèn)可,并且在許多情況下成為應(yīng)用程序的硬性要求。在過(guò)去的 25 年中,隨著數(shù)百萬(wàn)美元的投入用于研發(fā),關(guān)系模型已成為數(shù)據(jù)管理的首選方法。

建立關(guān)系

關(guān)系數(shù)據(jù)模型的首要好處不是模型本身,而是它與 SQL 語(yǔ)言的密切關(guān)系。SQL 有兩個(gè)主要好處:

即席查詢:使用預(yù)定義的關(guān)系數(shù)據(jù)模型,任何有效的 SQL 都將保證結(jié)果而不保證其性能。在數(shù)據(jù)挖掘應(yīng)用程序中,這是一個(gè)非常強(qiáng)大的功能,但在大多數(shù)嵌入式應(yīng)用程序中,用例和查詢?cè)谠O(shè)計(jì)時(shí)是已知的。想想 MP3 播放器:所有用例,例如音樂(lè)文件同步和用戶導(dǎo)航,都是預(yù)定義的,在設(shè)備或固件的下一個(gè)版本發(fā)布之前不會(huì)改變。這不像經(jīng)理會(huì)來(lái)要求開(kāi)發(fā)人員根據(jù)現(xiàn)有數(shù)據(jù)模型創(chuàng)建新報(bào)告。

供應(yīng)商獨(dú)立性: SQL 是許多嵌入式數(shù)據(jù)庫(kù)供應(yīng)商支持的通用語(yǔ)言。據(jù)推測(cè),用另一個(gè)替換一個(gè)應(yīng)該像打開(kāi)電燈開(kāi)關(guān)一樣容易。盡管它并不那么簡(jiǎn)單,但進(jìn)行這種轉(zhuǎn)換絕對(duì)比從一個(gè)專有 API 遷移到另一個(gè)更容易。

關(guān)系模型通過(guò)值匹配以及在大多數(shù)情況下通過(guò)鍵來(lái)建立記錄之間的關(guān)系。這些鍵稱為主鍵/外鍵關(guān)系。圖 1 說(shuō)明了 MP3 播放器中藝術(shù)家和專輯的關(guān)系模型,它將作為本文進(jìn)一步討論的基礎(chǔ)。

圖1

poYBAGMKzDqAAhCSAABUH4dcoSo990.jpg

仔細(xì)觀察,關(guān)系是通過(guò)將 fname 的值復(fù)制到專輯表中并在兩者之間添加索引結(jié)構(gòu)來(lái)實(shí)現(xiàn)的。復(fù)制 fname 字段本身會(huì)增加數(shù)據(jù)庫(kù)映像的開(kāi)銷。圖 1 中的另一個(gè)含義與外鍵有關(guān)。如果沒(méi)有添加外鍵數(shù)據(jù)結(jié)構(gòu),開(kāi)發(fā)人員每次處理關(guān)系時(shí)都必須訪問(wèn)專輯表中的每一行。原因是表格數(shù)據(jù)沒(méi)有任何順序,因此無(wú)法判斷匹配值是在表格的開(kāi)頭、中間和/或結(jié)尾。添加外鍵索引解決了這個(gè)表掃描問(wèn)題。圖 2 分解了外鍵索引和專輯表來(lái)說(shuō)明索引開(kāi)銷。

圖 2

pYYBAGMKzDuAVKkpAABawmM8Lrg601.jpg

有了 B 樹,開(kāi)發(fā)人員可以進(jìn)行二分搜索來(lái)建立關(guān)系,從表掃描到索引掃描。這將線性搜索轉(zhuǎn)換為二分搜索,通過(guò)指數(shù)差異提高了運(yùn)行關(guān)系的成本。

表掃描的成本為 O(n),其中 n 表示表中的記錄數(shù),而索引掃描的成本為 O(log n)。在計(jì)算復(fù)雜性理論中,大 O 符號(hào)經(jīng)常用于描述輸入數(shù)據(jù)的大小如何影響算法——計(jì)算資源的使用。其他明顯的影響包括表示索引所需的空間以及在數(shù)據(jù)更改時(shí)維護(hù)此結(jié)構(gòu)所需的命中率。由于從時(shí)間、CPU 和功耗方面來(lái)看,I/O 是最昂貴的操作,因此開(kāi)發(fā)人員應(yīng)該努力減少它。對(duì)于閃存等存儲(chǔ)設(shè)備,寫入也應(yīng)受到限制,以防止對(duì)該技術(shù)施加的最大寫入擦除周期和空間回收周期產(chǎn)生負(fù)面影響。

那么問(wèn)題就變成了:開(kāi)發(fā)人員如何以低于 O(log n) 的成本維護(hù)這種關(guān)系信息?

重新引入網(wǎng)絡(luò)數(shù)據(jù)模型

圖 3 顯示了通過(guò)網(wǎng)絡(luò)數(shù)據(jù)模型調(diào)整的相同數(shù)據(jù)表示。

圖 3

poYBAGMKzDyACOSWAABPtqIpt_g476.jpg

網(wǎng)絡(luò)數(shù)據(jù)模型早于關(guān)系模型,可以看作是它的超集。這意味著在關(guān)系模型中表達(dá)的任何東西都可以在網(wǎng)絡(luò)模型中表達(dá),甚至 SQL 支持。主要優(yōu)點(diǎn)是可以對(duì)關(guān)系進(jìn)行建模的方式。在圖 3 中,以前顯示為外鍵索引的關(guān)系現(xiàn)在被分解為多個(gè)指針列表,稱為集合。指針可以被視為 C 應(yīng)用程序中的 void 指針,可以直接查找堆,但堆現(xiàn)在是持久存儲(chǔ)。消除外鍵數(shù)據(jù)結(jié)構(gòu)和fname重復(fù)不僅減少了需要存儲(chǔ)的數(shù)據(jù)量,而且還減少了不必要的數(shù)據(jù)結(jié)構(gòu)維護(hù)。

圖中簡(jiǎn)化了一個(gè)所有者有兩個(gè)指針,第一個(gè)和最后一個(gè)成員記錄,而成員有三個(gè),所有者加上前一個(gè)和下一個(gè)成員。根據(jù)指針的本質(zhì),它不與任何特定的數(shù)據(jù)類型綁定,因此關(guān)系可以對(duì)任意數(shù)量的記錄類型之間的復(fù)雜關(guān)系進(jìn)行建模,而不僅僅是關(guān)系模型強(qiáng)加的兩個(gè)之間的關(guān)系。本文不會(huì)討論復(fù)雜的建模功能,但它說(shuō)明了網(wǎng)絡(luò)模型的靈活性。

圖 4

pYYBAGMKzD2ACtVCAAA8EBuGLIk973.jpg

成本影響

從一個(gè)記錄到一組記錄轉(zhuǎn)換為恒定成本。只要數(shù)據(jù)尚未駐留在數(shù)據(jù)庫(kù) RAM 緩存中,最多只需要一個(gè) I/O 周期。使用外鍵實(shí)現(xiàn),在定位實(shí)際記錄之前,將首先遍歷 B 樹,成本為 O(log n)。很明顯,遍歷 B 樹有 CPU 和 I/O 開(kāi)銷,但也有內(nèi)存開(kāi)銷。任何數(shù)據(jù)庫(kù)緩存都會(huì)存儲(chǔ)最近訪問(wèn)過(guò)的數(shù)據(jù),甚至是 B-tree 數(shù)據(jù)。由于 B-tree 掃描最終在緩存中,因此緩存必須很大,否則需要額外的 I/O 來(lái)刷新其數(shù)據(jù)。

寫操作也需要恒定的成本。開(kāi)發(fā)人員將新記錄添加到專輯表并將新記錄加入現(xiàn)有藝術(shù)家專輯集需要采取以下步驟來(lái)完成操作:

添加新專輯記錄。

將新記錄設(shè)置為當(dāng)前藝術(shù)家的所有者指針。

設(shè)置新記錄,即指向當(dāng)前藝術(shù)家的前一個(gè)指針,即最后一個(gè)記錄。

將新記錄的 next 指針設(shè)置為 0。

將當(dāng)前藝術(shù)家的最后一條記錄設(shè)置為指向新記錄的下一個(gè)指針。

將所有者的最后一個(gè)指針設(shè)置為新記錄。

在這一系列操作期間不進(jìn)行掃描,導(dǎo)致成本不變。使用 B-tree 實(shí)現(xiàn),開(kāi)發(fā)人員將:

1.添加新專輯記錄。

2. 掃描 B-tree 找到新記錄的索引位置。

3.如果B-tree中沒(méi)有空間,則拆分并重組樹。

4. 在 B 樹中寫入對(duì)新記錄的引用。

在此序列中,開(kāi)發(fā)人員在步驟 2 中遇到 O(log n) 成本。更重要的是,步驟 3 可能會(huì)通過(guò)要求重新組織部分或整個(gè)樹而產(chǎn)生巨大的成本。重組是不可預(yù)測(cè)的,因?yàn)樗Q于樹的完整性以及必須在樹中的哪個(gè)位置進(jìn)行更改。包含數(shù)據(jù)的節(jié)點(diǎn)越多,重組的機(jī)會(huì)就越大。在大多數(shù)情況下,B-tree 更改是在本地完成的,只影響少數(shù)幾個(gè)節(jié)點(diǎn),但有時(shí)會(huì)觸及許多節(jié)點(diǎn),給應(yīng)用程序增加了不確定性。因此,如果開(kāi)發(fā)人員發(fā)現(xiàn)自己需要可預(yù)測(cè)的性能,他們應(yīng)該檢查他們的數(shù)據(jù)是如何表示的。

MP3 播放器基準(zhǔn)測(cè)試

那么開(kāi)發(fā)者使用網(wǎng)絡(luò)模型可以節(jié)省多少硬件資源呢?在一個(gè)示例中,Birdstep Technology 實(shí)施了藝術(shù)家-》專輯-》歌曲的三向關(guān)系,允許商業(yè) MP3 播放器制造商獲得一些關(guān)于資源節(jié)約的確鑿事實(shí)。開(kāi)發(fā)人員仔細(xì)比較了 Birdstep Technology 的 RDM Embedded 數(shù)據(jù)庫(kù)引擎,它是一種網(wǎng)絡(luò)模型,以及使用臺(tái)式計(jì)算機(jī)和消費(fèi)電子硬件的公共領(lǐng)域關(guān)系數(shù)據(jù)庫(kù)引擎。如表 1 所示,硬件資源受限越多,節(jié)省的差異就越大。

在這兩種硬件解決方案上,網(wǎng)絡(luò)模型用于存儲(chǔ)相同數(shù)量的記錄和關(guān)系的磁盤空間減少了 27%。所有的存儲(chǔ)節(jié)省都可以歸功于用指針替換了藝術(shù)家-》專輯和專輯-》歌曲的外鍵索引。刪除這些數(shù)據(jù)結(jié)構(gòu)對(duì)存儲(chǔ)需求產(chǎn)生了巨大影響。B 樹索引通常需要 1.3 倍于它的索引空間。

應(yīng)用程序驅(qū)動(dòng)數(shù)據(jù)庫(kù)決策

在尋求在應(yīng)用程序中添加或替換現(xiàn)有數(shù)據(jù)管理組件時(shí),開(kāi)發(fā)人員應(yīng)仔細(xì)考慮選擇。應(yīng)用程序應(yīng)該推動(dòng)決策,而不是行業(yè)。有幾種不同的解決方案可用,從簡(jiǎn)單的庫(kù)到完整的客戶端服務(wù)器解決方案,增加了本文所述的功能。選擇正確的技術(shù)并對(duì)數(shù)據(jù)進(jìn)行正確建??梢詫?duì)應(yīng)用程序的成本產(chǎn)生巨大影響,從而帶來(lái)更高的利潤(rùn)率、更高質(zhì)量的產(chǎn)品和更好的最終用戶體驗(yàn)。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • 播放器
    +關(guān)注

    關(guān)注

    5

    文章

    387

    瀏覽量

    37259
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10702

    瀏覽量

    209373
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    8701

    瀏覽量

    84550
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    恒訊科技分析:云數(shù)據(jù)庫(kù)rds和redis區(qū)別是什么如何選擇?

    數(shù)據(jù)庫(kù)RDS(Relational Database Service)和Redis是兩種不同類型的數(shù)據(jù)庫(kù)服務(wù),它們有各自的特點(diǎn)和適用場(chǎng)景: 1、數(shù)據(jù)模型:RDS是一種關(guān)系
    的頭像 發(fā)表于 08-19 15:31 ?159次閱讀

    鴻蒙開(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ù),并讀寫相應(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'>數(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'>數(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'>式</b><b class='flag-5'>關(guān)系</b>型<b class='flag-5'>數(shù)據(jù)庫(kù)</b>】

    基于Rust的嵌入式符合ACID的鍵值數(shù)據(jù)庫(kù)

    surrealkv -- 基于 Rust 的 low level、版本化、嵌入式、符合 ACID 的鍵值數(shù)據(jù)庫(kù)
    的頭像 發(fā)表于 12-28 11:29 ?764次閱讀

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

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

    使用關(guān)系數(shù)據(jù)庫(kù)中的半結(jié)構(gòu)化數(shù)據(jù)

    NoSQL革命已經(jīng)進(jìn)入了關(guān)系世界。您可能正在使用關(guān)系數(shù)據(jù)庫(kù),但仍必須查詢和理解隱藏在文本列、JSON或 XML文檔中的半結(jié)構(gòu)化數(shù)據(jù)
    的頭像 發(fā)表于 12-20 10:46 ?511次閱讀
    使用<b class='flag-5'>關(guān)系數(shù)據(jù)庫(kù)</b>中的半結(jié)構(gòu)化<b class='flag-5'>數(shù)據(jù)</b>

    常見(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ù)(RDBMS):
    的頭像 發(fā)表于 12-06 14:15 ?799次閱讀

    oracle數(shù)據(jù)庫(kù)的基本操作

    Oracle數(shù)據(jù)庫(kù)是一種關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS),廣泛應(yīng)用于企業(yè)級(jí)應(yīng)用中。它具有強(qiáng)大的功能和靈活的配置選項(xiàng),可以滿足復(fù)雜的數(shù)據(jù)處理需求。本文將介紹Oracle數(shù)據(jù)庫(kù)的基本操作,
    的頭像 發(fā)表于 12-06 10:14 ?548次閱讀

    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 ?358次閱讀
    NoSQL <b class='flag-5'>數(shù)據(jù)庫(kù)</b>如何選型

    一文解析向量數(shù)據(jù)庫(kù)的大模型之路

    數(shù)據(jù)在 MaaS 時(shí)代很重要,市場(chǎng)的火熱映射到具體的企業(yè)行為上,表現(xiàn)為大批量垂直模型的推出、數(shù)據(jù)庫(kù)企業(yè)融資數(shù)量增加、數(shù)據(jù)庫(kù)使用量陡然增長(zhǎng)等。
    發(fā)表于 11-17 11:37 ?434次閱讀
    一文解析向量<b class='flag-5'>數(shù)據(jù)庫(kù)</b>的大<b class='flag-5'>模型</b>之路

    數(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)建、管理和查詢數(shù)據(jù)庫(kù)。
    發(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)系數(shù)據(jù)庫(kù)不是銀彈!在某些場(chǎng)景下,比如要存儲(chǔ)的
    發(fā)表于 10-13 10:20 ?535次閱讀
    什么是<b class='flag-5'>數(shù)據(jù)庫(kù)</b>?除了MySQL還有哪些<b class='flag-5'>數(shù)據(jù)庫(kù)</b>?