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

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

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

1.鍵值對(duì)存儲(chǔ)數(shù)據(jù)庫

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

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

應(yīng)用場(chǎng)景1:會(huì)話儲(chǔ)存場(chǎng)景

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

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

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

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

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

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

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

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

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

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

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

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

1657528998876_73.png

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

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

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

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

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

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

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

1657529200376_74.png

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

應(yīng)用場(chǎng)景1:欺詐檢測(cè)

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

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

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




猜你喜歡:

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

MySQL的隔離級(jí)別指的是什么?

SQL語言由哪幾部分組成?

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

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!