自全球推出以來,NoSQL數(shù)據(jù)庫的受歡迎程度飆升。尋求取代關(guān)系數(shù)據(jù)庫僵化架構(gòu)的開發(fā)人員可以考慮NoSQL的適應性和可伸縮性。
許多軟件開發(fā)公司使用NoSQL數(shù)據(jù)庫來跟蹤信息,如操作參數(shù)、功能集和模型元數(shù)據(jù)。但是,它們對于數(shù)據(jù)工程師歸檔和恢復數(shù)據(jù)非常有用。
在討論NoSQL的含義之前,先討論一下NoSQL的類型、特點、優(yōu)缺點,這樣你就可以根據(jù)你的項目目標和要求進行適當?shù)膭澐至恕?/p>
1.什么是NoSQL數(shù)據(jù)庫?
NoSQL數(shù)據(jù)庫系統(tǒng)將數(shù)據(jù)存儲為JSON文件,而不是行和列。為了澄清,NoSQL代表“不僅僅是SQL”,它指的是任何“非關(guān)系數(shù)據(jù)庫”。這意味著NoSQL數(shù)據(jù)庫可以在不使用SQL的情況下保存和訪問數(shù)據(jù),或者您可以將JSON的靈活性與SQL的功能結(jié)合起來。因此,NoSQL數(shù)據(jù)庫的設計具有適應性和可訪問性,能夠快速響應現(xiàn)代企業(yè)的數(shù)據(jù)管理需求。傳統(tǒng)的關(guān)系數(shù)據(jù)庫使用SQL語法來存儲、管理和檢索數(shù)據(jù),而NoSQL數(shù)據(jù)庫系統(tǒng)通過使用廣泛的數(shù)據(jù)庫技術(shù),可以同樣有效地訪問結(jié)構(gòu)化、半結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)。
2. NoSQL 數(shù)據(jù)庫的類型
以下是四種最常見的 NoSQL 數(shù)據(jù)庫類型的描述:
文檔數(shù)據(jù)庫
鍵值存儲
面向列的數(shù)據(jù)庫
圖數(shù)據(jù)庫
2.1 文檔數(shù)據(jù)庫
文檔數(shù)據(jù)庫以文檔格式保存信息,例如 JSON、BSON 或 XML(不是 Word 文檔或 Google Docs)。 在文檔數(shù)據(jù)庫中,文件可以堆疊。 某些項目可以被索引以促進更快的查詢。
文檔可以以更接近軟件中使用的數(shù)據(jù)項的方式保存和訪問,需要更少的解釋來利用應用程序中的信息。 通常,必須在跨應用程序和存儲傳輸時構(gòu)建和拆除 SQL 數(shù)據(jù)。
文檔數(shù)據(jù)庫是工程師的首選,因為它們的文檔格式可以根據(jù)需要重新設計以適應程序,并且它們的數(shù)據(jù)結(jié)構(gòu)可以根據(jù)隨時間演變的先決條件進行調(diào)整。 這種靈活性加速了軟件開發(fā)過程,因為數(shù)據(jù)被有效地視為代碼并在開發(fā)人員的命令下。 要修改 SQL 數(shù)據(jù)庫的結(jié)構(gòu),數(shù)據(jù)庫管理員可能需要進行干預。
使用最廣泛的文檔數(shù)據(jù)庫通常采用橫向擴展設計,這為實現(xiàn)數(shù)據(jù)容量和流量方面的靈活性提供了清晰的途徑。
行業(yè)特定用例包括電子商務系統(tǒng)、在線交易和移動應用程序開發(fā)。
1. 文檔數(shù)據(jù)庫的主要特點:
配置靈活性:數(shù)據(jù)庫的文檔遵循可適應的結(jié)構(gòu),這實質(zhì)上意味著數(shù)據(jù)庫中的文檔可能具有不同的模式。
最大限度地減少開發(fā)和維護所需的時間:創(chuàng)建文檔后,只需很少的工作即可使其保持最新狀態(tài)。
沒有外鍵:因為論文沒有以任何方式相互綁定,所以它們可以獨立存在。 因此,在文檔數(shù)據(jù)庫中不需要外鍵。
免費提供的格式:文檔是用 XML、JSON 和其他形式創(chuàng)建的。
2.文檔數(shù)據(jù)庫的優(yōu)勢
開放和可擴展的數(shù)據(jù)模型,沒有任何“外鍵”
3.文檔數(shù)據(jù)庫的缺點
將搜索限制在主鍵和索引上是一個缺點,您需要使用 MapReduce 進行復雜查詢。
例子:
[
{
"year" : 2021,
"title" : "Eternals",
"info" : {
"director" : "Chloé Zhao",
"IMDB" : 6.3,
"genres" : ["Science Fiction", "Action"]
}
},
{
"year": 2022,
"title": "Doctor Strange in the Multiverse of Madness",
"info": {
"director" : "Sam Raimi",
"IMDB" : 7.0,
"genres" : ["Science Fiction", "Action", "Superhero"]
}
}
]
2.2 鍵值存儲
鍵值存儲數(shù)據(jù)庫是 NoSQL 數(shù)據(jù)庫的最基本形式。 屬性名稱(或“鍵”)及其關(guān)聯(lián)值(或“值”)用于表示數(shù)據(jù)庫中的每條信息。 在鍵值存儲數(shù)據(jù)庫中,每個元素都存儲為鍵值對。 例如,鍵或?qū)傩悦Q如“city”,數(shù)據(jù)或值如“Bangalore”。 電子商務購物車、用戶信息和選擇是可能應用的一些示例。
1. Key-Value Store 的主要特點
易于擴展
機動性
快速度
2. Key-Value Store 的優(yōu)勢
價值可以用多種格式表示,例如 JSON、XML 和靈活的模式,底層數(shù)據(jù)模型簡單、可擴展且易于理解。
由于其易用性,它可以快速處理數(shù)據(jù),并且在底層信息沒有緊密聯(lián)系時效果最佳。
3. Key-Value Store 的缺點
沒有聯(lián)系; 您必須生成自己的外鍵。
缺乏掃描能力; 除了 CRUD 之外,什么都不好; 不適合復雜數(shù)據(jù)(創(chuàng)建、讀取、更新、刪除)
例子:
2.3 面向列的數(shù)據(jù)庫
與關(guān)系數(shù)據(jù)庫不同,列存儲的結(jié)構(gòu)是一系列列,而不是行。 這使您可以對列的子集執(zhí)行分析,而不必擔心其余數(shù)據(jù)會占用存儲空間。 由于可以更有效地壓縮相同類型的列,因此讀取速度得到提高。 列的值可以很容易地在列式數(shù)據(jù)庫中聚合。 分析是面向列的數(shù)據(jù)庫的常見應用。
盡管列式數(shù)據(jù)庫擅長分析,但由于更新所有列需要大量寫入磁盤,因此無法保持一致是一個主要缺點。 由于行數(shù)據(jù)被順序復制到磁盤,關(guān)系數(shù)據(jù)庫不受此問題的影響。 面向列的數(shù)據(jù)庫廣泛用于管理數(shù)據(jù)倉庫、CRM、商業(yè)智能數(shù)據(jù)等。一些面向列的數(shù)據(jù)庫示例是 Hbase、Cassandra 和 Hypertable。
1. 面向列的數(shù)據(jù)庫的主要特點
可擴展性
屈曲
接受最輕微的提示
2. 面向列的數(shù)據(jù)庫的優(yōu)點
可擴展性
自然索引
支持半結(jié)構(gòu)化數(shù)據(jù)
訪問時間
3. 面向列的數(shù)據(jù)庫的缺點
不能與關(guān)系數(shù)據(jù)一起使用
例子:
假設,一個數(shù)據(jù)庫有一個這樣的表:
行號 |
學生姓名 |
數(shù)學成績 |
科學成績 |
001 |
約翰 |
98 |
85 |
002 |
史密斯 |
85 |
99 |
003 |
亞當 |
75 |
85 |
2.4 圖數(shù)據(jù)庫
圖數(shù)據(jù)庫旨在突出數(shù)據(jù)點之間的聯(lián)系。 一個單獨的“節(jié)點”代表每條信息。 鏈接或關(guān)系是總體中多個元素之間的相互聯(lián)系。 連接直接記錄為圖數(shù)據(jù)庫中的一流項目。 數(shù)據(jù)連接通過關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)本身來表達,因此連接是假定的而不是明確寫入的。
由于在 SQL 中連接許多表效率低下,圖數(shù)據(jù)庫更適合存儲和檢索數(shù)據(jù)項之間的關(guān)系。
在實踐中,只有少數(shù)企業(yè)級系統(tǒng)可以僅使用圖形查詢來很好地運行。 因此,圖形數(shù)據(jù)庫通常與其他更傳統(tǒng)類型的 NoSQL 數(shù)據(jù)庫共存。 網(wǎng)絡犯罪、社交媒體和知識圖譜是它的一些應用。
盡管它們共享一個名稱,但 NoSQL 數(shù)據(jù)庫在其底層數(shù)據(jù)結(jié)構(gòu)和潛在用途方面彼此截然不同。
一、圖數(shù)據(jù)庫的主要特點
圖數(shù)據(jù)庫的主要特征之一是可以直接看到各種信息如何通過它們之間的超文本連接相互連接。
查詢的輸出是當前的、最新的信息。
任何事情發(fā)生的速度與數(shù)據(jù)庫各個部分之間互連的復雜性成正比。
2. 圖數(shù)據(jù)庫的優(yōu)勢
超級有效
本地索引連接數(shù)據(jù)
酸支持
瞬時輸出
靈活的架構(gòu)
三、圖數(shù)據(jù)庫的缺點
橫向擴展具有挑戰(zhàn)性,但縱向擴展是可能的
例子:
員工表:
雇員編號 |
員工姓名 |
年齡 |
聯(lián)系電話 |
001 |
約翰 |
25 |
9475858574 |
002 |
史密斯 |
26 |
7485961231 |
003 |
亞當 |
24 |
7412589634 |
004 |
約翰遜 |
22 |
9874563521 |
員工關(guān)系表:
雇員編號 |
連接ID |
001 |
002 |
001 |
003 |
001 |
004 |
002 |
001 |
002 |
003 |
003 |
001 |
003 |
002 |
003 |
004 |
004 |
001 |
004 |
003 |
3. 何時使用哪種類型的 NoSQL 數(shù)據(jù)庫?
如果您需要在單個數(shù)據(jù)庫中存儲和表示多種數(shù)據(jù)類型(包括結(jié)構(gòu)化、半結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)),您應該研究 NoSQL 數(shù)據(jù)庫。 此外,NoSQL 數(shù)據(jù)庫的適應性更強,因為我們保存在其中的數(shù)據(jù)不需要預先建立的結(jié)構(gòu),就像 SQL 數(shù)據(jù)庫的情況一樣。 為給定的應用程序選擇正確的 NoSQL 數(shù)據(jù)庫可能具有挑戰(zhàn)性,因為每種數(shù)據(jù)庫都有其獨特的特征。 因此,在選擇數(shù)據(jù)庫之前了解典型應用程序非常重要。
如果您需要任何幫助,請與我們的技術(shù)團隊聯(lián)系。