首頁技術(shù)文章正文

NoSQL的4種存儲數(shù)據(jù)庫【詳解】

更新時間:2022-07-11 來源:黑馬程序員 瀏覽量:

1.鍵值對存儲數(shù)據(jù)庫

鍵值對存儲數(shù)據(jù)庫是NoSQL數(shù)據(jù)庫中的一種類型,也是最簡單的NoSQL數(shù)據(jù)庫。鍵對值對存儲數(shù)據(jù)庫中的數(shù)據(jù)是以鍵值對的形式來存儲的。常見的鍵值對存儲數(shù)據(jù)庫有Redis、Tokyo Cabinet/Tyrant、Voldemort以及Oracle BDB等數(shù)據(jù)庫。鍵值對存儲數(shù)據(jù)庫的結(jié)構(gòu)示意圖如下。
1657527938262_71.png

鍵值對存儲數(shù)據(jù)庫的結(jié)構(gòu)實際上是一個映射,即Key是查找每條數(shù)據(jù)的唯一標(biāo)識符,Value是該數(shù)據(jù)實際存儲的內(nèi)容。鍵值對存儲數(shù)據(jù)庫結(jié)構(gòu)是采用哈希函數(shù)來實現(xiàn)鍵到值的映射,當(dāng)查詢數(shù)據(jù)時,基于Key的哈希值會直接定位到數(shù)據(jù)所在的位置,實現(xiàn)快速查詢,并支持海量數(shù)據(jù)的高并發(fā)查詢。

應(yīng)用場景1:會話儲存場景

會話存儲指的是一個面向會話的應(yīng)用程序(如Web應(yīng)用程序)在用戶登錄時啟動會話,并保持活動狀態(tài)直到用戶注銷或會話超時,在此期間,應(yīng)用程序?qū)⑺信c會話相關(guān)的數(shù)據(jù)存儲在內(nèi)存或鍵值對存儲數(shù)據(jù)庫中。會話數(shù)據(jù)包括用戶資料信息、消息、個性化數(shù)據(jù)和主題、建議、有針對性的促銷和折扣。每個用戶會話具有唯一的標(biāo)識符,除了主鍵之外,任何其他鍵都無法查詢會話數(shù)據(jù),因此鍵值對存儲數(shù)據(jù)庫更適合于存儲會話數(shù)據(jù)。

應(yīng)用場景2:購物車

購物車指的是電子商務(wù)網(wǎng)站中的購物車功能。在假日購物季,電子商務(wù)網(wǎng)站可能會在幾秒鐘內(nèi)收到數(shù)十億的訂單,鍵值對存儲數(shù)據(jù)庫可以處理海量數(shù)據(jù)的擴展和極高的狀態(tài)變化,同時通過分布式處理和存儲為數(shù)百萬并發(fā)用戶提供服務(wù)。此外,鍵值對存儲數(shù)據(jù)庫還具有內(nèi)置冗余的功能,可以處理丟失的存儲節(jié)點。

2.文檔存儲數(shù)據(jù)庫

文檔存儲數(shù)據(jù)庫不是文檔管理系統(tǒng)。文檔存儲數(shù)據(jù)庫是用于存儲和管理文檔,其中文檔是結(jié)構(gòu)化的數(shù)據(jù)(如JSON格式)。常見的文檔存儲數(shù)據(jù)庫有MongoDB、CouchDB以及RavenDB等數(shù)據(jù)庫。文檔存儲數(shù)據(jù)庫的結(jié)構(gòu)示意圖如下。
1657528816211_72.png

文檔存儲數(shù)據(jù)庫存儲的文檔可以是不同結(jié)構(gòu)的,即JSON、XML以及BSON等格式。

應(yīng)用場景1:內(nèi)容管理應(yīng)用程序

內(nèi)容管理應(yīng)用程序存儲數(shù)據(jù),首選的就是文檔存儲數(shù)據(jù)庫,例如博客和視頻平臺主要使用的數(shù)據(jù)庫就是文檔存儲數(shù)據(jù)庫。通過文檔存儲數(shù)據(jù)庫,內(nèi)容管理應(yīng)用程序所跟蹤的每個實體都可存儲為單個文檔。隨著需求的發(fā)展,對于開發(fā)人員來說,可以使用文檔存儲數(shù)據(jù)庫更直觀地更新應(yīng)用程序。此外,如果需要更改數(shù)據(jù)模型,則只需要更新受影響的文檔即可,而不需要更新架構(gòu),也不需要等到數(shù)據(jù)庫停機時進(jìn)行更改。

應(yīng)用場景2:電子商務(wù)應(yīng)用程序

在電子商務(wù)應(yīng)用程序中,文檔存儲數(shù)據(jù)庫可以高效且有效的存儲商品的信息。例如,在電子商務(wù)應(yīng)用程序中,不同的產(chǎn)品具有不同數(shù)量的屬性。若是在關(guān)系型數(shù)據(jù)庫中管理數(shù)干個屬性,則效率比較低,并且閱讀的性能會受到影響;若是使用文檔存儲數(shù)據(jù)庫的話,可以在單個文檔中描述每個產(chǎn)品的屬性,既可以方便管理,又可以加快閱讀產(chǎn)品的速度,并且更改一個產(chǎn)品的屬性不會影響其他的產(chǎn)品。

3.列式存儲數(shù)據(jù)庫

列式存儲數(shù)據(jù)庫是以列為單位存儲數(shù)據(jù),然后將列值順序地存入數(shù)據(jù)庫中,這種數(shù)據(jù)存儲法不同于基于行式存儲的傳統(tǒng)關(guān)系型數(shù)據(jù)庫。列式存儲數(shù)據(jù)庫可以高效地存儲數(shù)據(jù),也可以快速地處理批量數(shù)據(jù)實時查詢數(shù)據(jù)。常見的列式存儲數(shù)據(jù)庫有HBase、Cassandra、Riak以及HyperTable等數(shù)據(jù)庫。列式存儲數(shù)據(jù)庫的結(jié)構(gòu)示意圖如下。

1657528998876_73.png

在列式存儲數(shù)據(jù)庫中,如果列值不存在,則不需要存儲(陰影部分為列值不存在),這樣的話,遇到Nul值,就不需要存儲,可以減少I/O操作和避免內(nèi)存空間的浪費。

應(yīng)用場景1:事件記錄

在事件記錄中,使用列式存儲數(shù)據(jù)庫來存儲應(yīng)用程序的狀態(tài)以及應(yīng)用程序遇到錯誤等事件信息。由于列式存儲數(shù)據(jù)庫具有高擴展性,因此可高效地存儲應(yīng)用程序源源不斷產(chǎn)生的事件記錄。

應(yīng)用場景2:博客網(wǎng)站

在博客網(wǎng)站中,列式存儲數(shù)據(jù)庫可以將博客的“標(biāo)簽”、“類別”“連接”及“引用通告”等內(nèi)容存放在不同的列中,便于進(jìn)行數(shù)據(jù)分析。

4.圖形存儲數(shù)據(jù)庫

圖形存儲數(shù)據(jù)庫不是網(wǎng)絡(luò)數(shù)據(jù)庫,它是NoSQL數(shù)據(jù)庫的一種類型,其主要是應(yīng)用圖形理論來存儲實體之間的關(guān)系信息,其中,實體被視為圖形的“節(jié)點”,關(guān)系被視為圖形的“邊”,“邊”按照關(guān)系將“節(jié)點”按進(jìn)行連接。常見的圖形存儲數(shù)據(jù)庫有Neo4j、FlockDB、AllegroGrap以及GraphDB等數(shù)據(jù)庫。圖形存儲數(shù)據(jù)庫的結(jié)構(gòu)示意圖如下。

1657529200376_74.png

利用圖形存儲數(shù)據(jù)庫存儲的數(shù)據(jù),可以很清晰知道兩個實體之間的關(guān)系,即A和D是朋友,C是A朋友的朋友。

應(yīng)用場景1:欺詐檢測

在欺詐檢測中,圖形存儲數(shù)據(jù)庫能夠有效地防范復(fù)雜的欺詐行為。在現(xiàn)代欺詐及各種類型的金融犯罪中,例如銀行欺詐、信用卡欺詐、電子商務(wù)欺詐以及保險欺詐等,欺詐者通過使用改變自己身份等的手段逃避風(fēng)控規(guī)則,從而達(dá)到欺詐目的。盡管欺詐者是可以改變所有涉及網(wǎng)絡(luò)的關(guān)聯(lián)關(guān)系,也可以在所有涉及網(wǎng)絡(luò)的群體中同步執(zhí)行相同操作來躲避風(fēng)控,但我們可以通過圖形存儲數(shù)據(jù)庫建立跟蹤全局用戶的跟蹤視角,實時利用圖形存儲數(shù)據(jù)庫來分析具有欺詐行為的離散數(shù)據(jù),從而識別欺詐環(huán)節(jié),這樣的話,最大程度上快速有效地防范和解決欺詐行為。

應(yīng)用場景2:推薦應(yīng)用

在推薦應(yīng)用中,我們可以借助圖形存儲數(shù)據(jù)庫存儲購物網(wǎng)站中客戶的購買記錄、客戶興趣等信息,然后根據(jù)客戶當(dāng)前瀏覽的商品結(jié)合已存儲的購物信息,從而推薦相關(guān)的商品。




猜你喜歡:

使用MySQL數(shù)據(jù)庫,實現(xiàn)你的第一個JDBC程序

MySQL的隔離級別指的是什么?

SQL語言由哪幾部分組成?

黑馬程序員Python+大數(shù)據(jù)開發(fā)培訓(xùn)

分享到:
在線咨詢 我要報名
和我們在線交談!