柚子快報邀請碼778899分享:NoSQL數(shù)據(jù)庫簡介
柚子快報邀請碼778899分享:NoSQL數(shù)據(jù)庫簡介
NoSQL數(shù)據(jù)庫簡介
Brief Introduction to NoSQL Databases
By Jackson@ML
1. 什么是SQL?
在了解NoSQL之前,先簡要介紹一下SQL。
SQL是 Structured Query Language(結(jié)構(gòu)化查詢語言)的縮寫。
SQL在關(guān)系型數(shù)據(jù)中廣泛使用,一些大型關(guān)系型數(shù)據(jù)庫,例如:Oracle Database, MySQL, PostgreSQL, Microsoft SQL Server, IBM DB2, SQLite, MariaDB等,均使用SQL語言來創(chuàng)建、修改和刪除表,同時,還可以使用SQL語言進(jìn)行數(shù)據(jù)庫開發(fā),便于用戶長期按照特定需求使用關(guān)系型數(shù)據(jù)庫。
2. 什么是NoSQL?
NoSQL既表示非關(guān)系型數(shù)據(jù)庫,又表示不適用SQL(結(jié)構(gòu)化查詢語言)。
顯而易見,這些數(shù)據(jù)庫采用不同于關(guān)系表的格式來存儲數(shù)據(jù)。但是,NOSQL數(shù)據(jù)庫可以使用慣用語言API、聲明性結(jié)構(gòu)化查詢語言以及按示例查詢語言進(jìn)行查詢。
因此,從字面理解,也正是這類數(shù)據(jù)庫被稱為不僅僅是SQL數(shù)據(jù)庫的原因所在。
3. NoSQL與SQL對比
NoSQL數(shù)據(jù)庫的廣泛應(yīng)用,得益于高可用,以及高可擴(kuò)展性。NoSQL數(shù)據(jù)庫可作為開發(fā)人員的首選方案,它能適應(yīng)不斷變化的客戶需求,也能夠據(jù)此進(jìn)行不斷迭代,非常適合敏捷開發(fā)。
NoSQL數(shù)據(jù)庫支持以更加直觀和易于理解的方式進(jìn)行數(shù)據(jù)存儲,且在API存儲或檢索時所需的轉(zhuǎn)換更少。
同時,NoSQL數(shù)據(jù)庫也支持云計算,在云端部署NoSQL數(shù)據(jù)庫可使得企業(yè)應(yīng)用實(shí)現(xiàn)零停機(jī)。
4. NoSQL數(shù)據(jù)庫與關(guān)系型數(shù)據(jù)庫
1) 關(guān)系型數(shù)據(jù)庫
關(guān)系型數(shù)據(jù)庫由多個表組成,而表由列和行組成,是相關(guān)數(shù)據(jù)條目的集合。
表是典型的數(shù)據(jù)庫對象,用來存儲結(jié)構(gòu)化數(shù)據(jù)。因此,關(guān)系型數(shù)據(jù)庫需要預(yù)先定義好架構(gòu),也就是說,需要提前知道所有列以及相關(guān)聯(lián)的數(shù)據(jù)類型,以便于應(yīng)用程序?qū)?shù)據(jù)寫出數(shù)據(jù)庫。
同時,關(guān)系型數(shù)據(jù)庫還通過鍵來鏈接多個表的信息,從而創(chuàng)建跨越多個表的關(guān)系。關(guān)系型數(shù)據(jù)庫因而得名。
關(guān)系型數(shù)據(jù)庫由Edgar F. Codd于1970年發(fā)明,通過為每行關(guān)聯(lián)一個特定的鍵,將數(shù)據(jù)排列到不同的行和列中;幾乎所有的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS)都是用結(jié)構(gòu)化查詢語言(SQL),并且非常復(fù)雜。
2) NoSQL數(shù)據(jù)庫
在NoSQL數(shù)據(jù)庫中,則無須預(yù)先定義架構(gòu),即可存儲數(shù)據(jù)。這意味著數(shù)據(jù)庫可迅速移動和不斷迭代,從而動態(tài)定義數(shù)據(jù)模型。
這樣的特點(diǎn),適應(yīng)特定的業(yè)務(wù)需求并滿足敏捷開發(fā)的需要。 NoSQL數(shù)據(jù)庫能夠以圖形和面向列、面向文檔,以及作為鍵值對進(jìn)行存儲。
在1990年代中期,互聯(lián)網(wǎng)得到了極大的普及,關(guān)系型數(shù)據(jù)庫根本無法跟上用戶所需的信息流,以及這種演變產(chǎn)生的更多種類的數(shù)據(jù)類型。這就導(dǎo)致了非關(guān)系型數(shù)據(jù)庫(Non-relational Database,也成為NoSQL Database)的發(fā)展。
5. 何時選擇NoSQL數(shù)據(jù)庫?
對于需要快速創(chuàng)新和迭代應(yīng)用程序的企業(yè)而言,保持敏捷性至關(guān)重要,因為這關(guān)乎開發(fā)到運(yùn)維的全過程。
NoSQL數(shù)據(jù)庫提供靈活的架構(gòu),并且支持各種數(shù)據(jù)模型,非常適合構(gòu)建大量數(shù)據(jù)和快速響應(yīng)的應(yīng)用程序,同時要求低延遲,例如:電子商務(wù)Web應(yīng)用程序,或者在線游戲等。
此外,NoSQL數(shù)據(jù)庫可以快速轉(zhuǎn)換“奇怪“的數(shù)據(jù)(即形態(tài)各異的數(shù)據(jù)),并通過靈活地取代”有組織的“存儲來避免SQL的僵化。
6. NoSQL數(shù)據(jù)庫的演進(jìn)及優(yōu)勢
1) NoSQL的演進(jìn)
NoSQL作為縮略詞,于1998年由Carlo Strozzi首次使用。當(dāng)時,他將輕量級的開源“關(guān)系的“數(shù)據(jù)庫命名為不使用SQL。
2009年,當(dāng)Eric Evans和Johan Oskarsson用它來描述非關(guān)系型數(shù)據(jù)庫時,這個名字NoSQL再次出現(xiàn)。
關(guān)系型數(shù)據(jù)庫通常關(guān)聯(lián)SQL;因此,新術(shù)語NoSQL很直觀,就代表”No SQL Systems“(沒有SQL系統(tǒng));也有一種解釋,是表示普遍可以接受的“Not only SQL”(不僅僅是SQL)的翻譯,以強(qiáng)調(diào)某些系統(tǒng)可能支持類似SQL(結(jié)構(gòu)化查詢語言)這一既定事實(shí)。
2) NoSQL的優(yōu)勢
NoSQL自誕生起,就是為了響應(yīng)日益龐大的Web數(shù)據(jù),處理非結(jié)構(gòu)化數(shù)據(jù)的需求,以及應(yīng)對更加快捷處理的需求而開發(fā)的。NoSQL使用分布式數(shù)據(jù)庫系統(tǒng)來處理大量不同類型的數(shù)據(jù)。
經(jīng)過二十多年的積累和發(fā)展,數(shù)字交互和使用已經(jīng)達(dá)到了前所未有的高水平,這就要求企業(yè)采用更加現(xiàn)代化且更加流暢的方法來存儲數(shù)據(jù)以及訪問數(shù)據(jù)。全球范圍內(nèi)的用戶都要求實(shí)現(xiàn)不間斷的內(nèi)容服務(wù)及數(shù)據(jù)流,這就要求數(shù)據(jù)庫也需要具備快速適應(yīng)的能力。
無論是用戶,還是開發(fā)人員,選擇NoSQL數(shù)據(jù)庫,都基于它的幾點(diǎn)明顯優(yōu)勢:
a) 靈活性
SQL 數(shù)據(jù)庫將數(shù)據(jù)存儲在更加嚴(yán)格的預(yù)定義結(jié)構(gòu)中。NoSQL 則以更加自由的方式來存儲數(shù)據(jù),而無需嚴(yán)格的模式。這種設(shè)計可支持創(chuàng)新和快速應(yīng)用開發(fā)。開發(fā)人員可以專注于創(chuàng)建系統(tǒng)來改善客戶服務(wù),無需擔(dān)心模式。NoSQL 數(shù)據(jù)庫可以輕松處理任何數(shù)據(jù)格式,例如單一數(shù)據(jù)存儲中的結(jié)構(gòu)化、半結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)。
b) 可擴(kuò)展性
NoSQL 數(shù)據(jù)庫可以通過商用硬件來實(shí)現(xiàn)橫向擴(kuò)展,而不需要通過添加更多服務(wù)器來進(jìn)行擴(kuò)展。這可以支持流量增長,從而滿足零停機(jī)需求。通過橫向擴(kuò)展,NoSQL 數(shù)據(jù)庫可以擴(kuò)充容量和處理能力,因此成為支持不斷變化的數(shù)據(jù)集的首選方案。
c) 高性能
當(dāng)數(shù)據(jù)量或流量增長時,NoSQL 數(shù)據(jù)庫的橫向擴(kuò)展架構(gòu)的優(yōu)勢尤為明顯。如下圖所示,該架構(gòu)可實(shí)現(xiàn)快速、可預(yù)測的個位數(shù)毫秒級響應(yīng)能力。NoSQL 數(shù)據(jù)庫還可以攝取數(shù)據(jù)并快速可靠地交付數(shù)據(jù),因此 NoSQL 數(shù)據(jù)庫可支持應(yīng)用每天收集 TB 級數(shù)據(jù),同時實(shí)現(xiàn)高度交互的用戶體驗。
d) 可用性
NoSQL 數(shù)據(jù)庫可自動跨多個服務(wù)器、數(shù)據(jù)中心或云資源復(fù)制數(shù)據(jù)。而這又可以大幅減少用戶延遲,而不受其地理位置的限制。此特性還有助于減輕數(shù)據(jù)庫管理的負(fù)擔(dān),從而騰出時間專注于其他優(yōu)先事項。
e) 功能強(qiáng)大
NoSQL 數(shù)據(jù)庫專為具有超高數(shù)據(jù)存儲需求的分布式數(shù)據(jù)存儲而設(shè)計。這使得 NoSQL 成為大數(shù)據(jù)、實(shí)時 Web 應(yīng)用、360 度客戶視圖、在線購物、在線游戲、物聯(lián)網(wǎng)、社交網(wǎng)絡(luò)和在線廣告應(yīng)用的理想方案。
7. NoSQL數(shù)據(jù)庫的類型
NoSQL 數(shù)據(jù)庫可分為以下幾種主要類型,請看下表。
表中的幾類NoSQL數(shù)據(jù)庫簡要介紹如下。
? 鍵值數(shù)據(jù)庫(Key-Value Databases) 這是極為靈活的 NoSQL 數(shù)據(jù)庫類型,因為應(yīng)用可以完全控制 value 字段中存儲的內(nèi)容,沒有任何限制。代表性的數(shù)據(jù)庫有Redis,Aerospike, Riak, Project Voldemort。 ? 文檔數(shù)據(jù)庫(Document-Based Databases) 也稱為文檔存儲或面向文檔的數(shù)據(jù)庫,這些數(shù)據(jù)庫用于存儲、檢索和管理半結(jié)構(gòu)化數(shù)據(jù)。無需指定文檔將包含哪些字段。代表性的數(shù)據(jù)庫有MongoDB,Couchbase Server, CouchDB, Elasticsearch。 ? 圖形數(shù)據(jù)庫(Graph-Based Databases) 此數(shù)據(jù)庫將數(shù)據(jù)組織為節(jié)點(diǎn)和關(guān)系,這將顯示節(jié)點(diǎn)之間的連接。這支持更加豐富和完整的數(shù)據(jù)表示。圖形數(shù)據(jù)庫應(yīng)用于社交網(wǎng)絡(luò)、預(yù)訂系統(tǒng)和欺詐檢測。代表性的數(shù)據(jù)庫有Neo4J, OrientDB, RedisGraph,InfiniteGraph。 ? 寬列數(shù)據(jù)庫(Wide Column-Based Databases) 這些數(shù)據(jù)庫以表、行和列的形式來存儲和管理數(shù)據(jù)。它們廣泛部署于需要用列格式來捕獲無模式數(shù)據(jù)的應(yīng)用中。代表性的數(shù)據(jù)庫有Apache Cassandra, Azure Comos DB, HBase, Accumulo。
? 對象數(shù)據(jù)庫(Object-Based Databases) 對象數(shù)據(jù)庫的典型例子是ObjectDB, 它是一個Java對象數(shù)據(jù)庫解決方案,通過內(nèi)建的Java API支持來完成Java應(yīng)用程序開發(fā),在客戶端-服務(wù)器或嵌入式模式下工作。 代表性的對象數(shù)據(jù)庫有ObjectDB, Ninja Database Pro, NeoDB, Objectivity/DB。
? 云和網(wǎng)格數(shù)據(jù)庫(Cloud and Grid Databases) 一種分布式緩存和內(nèi)存數(shù)據(jù)網(wǎng)格,構(gòu)成了云和網(wǎng)格數(shù)據(jù)庫。它管理集群應(yīng)用程序中的數(shù)據(jù),因此每次需要管理數(shù)據(jù)時,都無需直接查詢數(shù)據(jù)庫。代表性的數(shù)據(jù)庫有Oracle Coherence, Infinispan, Hazelcast。
? 多模型數(shù)據(jù)庫(Multi-Model Databases) 有代表性的數(shù)據(jù)庫多模型數(shù)據(jù)庫是ArangoDB, 它是一個開源數(shù)據(jù)庫管理器,既支持鍵值,文檔,又支持圖形的數(shù)據(jù)庫模型。代表性的數(shù)據(jù)庫有: MarkLogic, ArangoDB, OrientDB, Azure Cosmos DB, FoundationDB, Couchbase, Apache Ignite。
8. 小結(jié):
本文簡要介紹了最流行的NoSQL數(shù)據(jù)庫及其主要功能,同時對NoSQL的特點(diǎn)及優(yōu)勢作了闡述。為了適應(yīng)快速發(fā)展的Web站點(diǎn),尤其是電子商務(wù)類網(wǎng)站等,NoSQL數(shù)據(jù)庫可謂是恰當(dāng)?shù)倪x擇。它能提供敏捷開發(fā)、快速響應(yīng)以及不斷迭代的強(qiáng)大功能。
以上列出了主流的各類NoSQL數(shù)據(jù)庫。后續(xù)有機(jī)會,也會針對MongoDB, Redis等展開討論。感謝您的關(guān)注和點(diǎn)贊。
您的支持,我的動力! ?
參考文獻(xiàn):
Oracle中國Predictiveanalyticstoday.com
柚子快報邀請碼778899分享:NoSQL數(shù)據(jù)庫簡介
推薦鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。