傳統(tǒng)數(shù)據(jù)庫(kù)以表格關(guān)系存儲(chǔ)數(shù)據(jù),而 NoSQL 數(shù)據(jù)庫(kù)(也稱為非 SQL 數(shù)據(jù)庫(kù))則不然。NoSQL 數(shù)據(jù)庫(kù)最初是為現(xiàn)代網(wǎng)絡(luò)規(guī)模的數(shù)據(jù)庫(kù)設(shè)計(jì)的,但現(xiàn)在廣泛用于大數(shù)據(jù)和實(shí)時(shí)網(wǎng)絡(luò)應(yīng)用程序。常用的數(shù)據(jù)結(jié)構(gòu)包括圖形、鍵值、寬列和文檔存儲(chǔ)。
由于 NoSQL 數(shù)據(jù)庫(kù)不遵守嚴(yán)格的模式,因此它們可以管理大量非結(jié)構(gòu)化、部分結(jié)構(gòu)化和結(jié)構(gòu)化數(shù)據(jù)。這意味著開(kāi)發(fā)人員可以更加敏捷。例如,使用 NoSQL 數(shù)據(jù)庫(kù)的開(kāi)發(fā)人員可以比使用關(guān)系數(shù)據(jù)庫(kù)更快地推送代碼更改。
Cassandra、MongoDB 和 Apache HBase 是目前市場(chǎng)上最流行的三種 NoSQL 數(shù)據(jù)庫(kù)。這些是開(kāi)源 NoSQL 數(shù)據(jù)庫(kù),這意味著可以修改它們以滿足特定的業(yè)務(wù)需求。本指南將用作 NoSQL 數(shù)據(jù)庫(kù)比較,通過(guò)比較 MongoDB 與 Cassandra、HBase 與 MongoDB 以及 Cassandra 與 HBase,幫助您確定最適合您業(yè)務(wù)的 NoSQL 數(shù)據(jù)庫(kù)。
此 NoSQL 數(shù)據(jù)庫(kù)列表討論了這些頂級(jí) NoSQL 數(shù)據(jù)庫(kù)之間的主要區(qū)別、NoSQL 的優(yōu)點(diǎn)和缺點(diǎn)以及使用 NoSQL 數(shù)據(jù)庫(kù)的場(chǎng)合。本文還將提供一個(gè)名為SolarWinds ? Database Performance Monitor (DPM)的 NoSQL 數(shù)據(jù)庫(kù)監(jiān)控建議,以幫助您確保數(shù)據(jù)庫(kù)正常運(yùn)行。
- NoSQL 數(shù)據(jù)庫(kù)在哪里使用?
- NoSQL 數(shù)據(jù)庫(kù)的優(yōu)勢(shì)
- NoSQL 數(shù)據(jù)庫(kù)的缺點(diǎn)
- NoSQL 數(shù)據(jù)庫(kù)監(jiān)控的重要性
- 選擇合適的 NoSQL 數(shù)據(jù)庫(kù)
NoSQL 數(shù)據(jù)庫(kù)在哪里使用?
如上所述,NoSQL 是一種不需要固定模式的非關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng) (DBMS) 。NoSQL 數(shù)據(jù)庫(kù)避免連接并且易于擴(kuò)展。您可能會(huì)發(fā)現(xiàn) NoSQL 數(shù)據(jù)庫(kù)被具有非常大的數(shù)據(jù)存儲(chǔ)需求的分布式數(shù)據(jù)存儲(chǔ)所使用。Facebook、Google 和 Twitter 等公司將 NoSQL 用于其大數(shù)據(jù)和實(shí)時(shí) Web 應(yīng)用程序,每天收集數(shù) TB 的用戶數(shù)據(jù)。
NoSQL 數(shù)據(jù)庫(kù)的優(yōu)勢(shì)
使用 NoSQL 數(shù)據(jù)庫(kù)有很多好處。這包括:
- 彈性可擴(kuò)展性,因?yàn)檫@些數(shù)據(jù)庫(kù)旨在與低成本商品硬件一起使用
- 支持大數(shù)據(jù)應(yīng)用,NoSQL數(shù)據(jù)庫(kù)可處理海量數(shù)據(jù)
- 動(dòng)態(tài)模式,因?yàn)?NoSQL 數(shù)據(jù)庫(kù)不需要模式就可以開(kāi)始處理數(shù)據(jù)
- 隨著事務(wù)和數(shù)據(jù)量的增加與廉價(jià)商品硬件集群的兼容性,使您能夠以更低的成本處理和存儲(chǔ)更多的數(shù)據(jù)
- 支持自動(dòng)分片,允許 NoSQL 數(shù)據(jù)庫(kù)在任意數(shù)量的服務(wù)器上本地自動(dòng)傳播數(shù)據(jù),而無(wú)需應(yīng)用程序了解服務(wù)器池的組成
NoSQL 數(shù)據(jù)庫(kù)的缺點(diǎn)
不幸的是,您應(yīng)該了解 NoSQL 數(shù)據(jù)庫(kù)的一些缺點(diǎn)。首先,NoSQL 數(shù)據(jù)庫(kù)不提供與關(guān)系數(shù)據(jù)庫(kù)相關(guān)的相同可靠性功能。例如,它們不支持ACID。為了支持 ACID,開(kāi)發(fā)人員需要實(shí)現(xiàn)自己的代碼,從而使他們的系統(tǒng)更加復(fù)雜。這可能會(huì)減少提交事務(wù)的安全應(yīng)用程序的數(shù)量。
NoSQL 與SQL不兼容,這意味著您將需要一種手動(dòng)查詢語(yǔ)言,這會(huì)使您的系統(tǒng)變得更慢、更復(fù)雜。最后,與關(guān)系數(shù)據(jù)庫(kù)相比,NoSQL 數(shù)據(jù)庫(kù)是新的,這意味著它們不太穩(wěn)定,通常提供的功能也較少。
1. 卡桑德拉
要開(kāi)始這個(gè)開(kāi)源 NoSQL 數(shù)據(jù)庫(kù)比較,讓我們首先考慮Cassandra。Cassandra 是市場(chǎng)上最受歡迎的寬列存儲(chǔ)數(shù)據(jù)庫(kù)系統(tǒng)之一。Cassandra 最初是為 Facebook 收件箱搜索功能而開(kāi)發(fā)的,并已成為 NoSQL 數(shù)據(jù)庫(kù)的最愛(ài),主要是因?yàn)槠淦髽I(yè)級(jí)功能。這提高了高可用性和可擴(kuò)展性,使 Cassandra 能夠處理大量數(shù)據(jù)并提供幾乎實(shí)時(shí)的分析。Cassandra 是用 Java 編寫的,為每次更新提供異步和同步復(fù)制。此 NoSQL 數(shù)據(jù)庫(kù)具有高持久性,非常適合需要始終運(yùn)行的應(yīng)用程序。
如果將 MongoDB 與 Cassandra 進(jìn)行比較,您會(huì)發(fā)現(xiàn) Cassandra 使用無(wú)主“環(huán)”架構(gòu),而 MongoDB 則沒(méi)有。這意味著集群中的所有節(jié)點(diǎn)都被平等對(duì)待,并且大多數(shù)節(jié)點(diǎn)都可以用來(lái)實(shí)現(xiàn)仲裁。與傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)一樣,Cassandra 將數(shù)據(jù)存儲(chǔ)在列和行中。但是,Cassandra 可以通過(guò)允許行具有不同的列并允許用戶更改列的格式來(lái)提供額外的靈活性。
Cassandra 查詢語(yǔ)言 (CQL) 與 SQL 非常相似,SQL 用戶學(xué)習(xí)起來(lái)相對(duì)容易。因此,在 Cassandra 與 HBase 的比較中,Cassandra 可以為讀、寫和熵提供高級(jí)修復(fù)過(guò)程。這意味著它的集群是高度可靠和可用的。
如果我們不解決每個(gè)頂級(jí) NoSQL 數(shù)據(jù)庫(kù)的缺點(diǎn),這將不是一個(gè)公平的 NoSQL 數(shù)據(jù)庫(kù)比較。Cassandra 的主要缺點(diǎn)之一是,由于架構(gòu)是分布式的,副本可能變得不一致。這是因?yàn)楫?dāng)一個(gè)節(jié)點(diǎn)宕機(jī)時(shí),它的協(xié)調(diào)節(jié)點(diǎn)會(huì)嘗試以提示的形式保存數(shù)據(jù)。當(dāng)故障節(jié)點(diǎn)聯(lián)機(jī)時(shí),協(xié)調(diào)器會(huì)傳遞提示以協(xié)助修復(fù)過(guò)程。這會(huì)給協(xié)調(diào)器節(jié)點(diǎn)帶來(lái)負(fù)擔(dān) 如果集群節(jié)點(diǎn)出現(xiàn)故障,協(xié)調(diào)器節(jié)點(diǎn)可能會(huì)丟失數(shù)據(jù)副本并拒絕寫入。
雖然 Cassandra 在主鍵已知時(shí)管理得很好,但如果鍵未知,它可能無(wú)法應(yīng)對(duì)。這是因?yàn)?Cassandra 必須掃描集群中的所有節(jié)點(diǎn),從而導(dǎo)致高讀取時(shí)間懲罰。
2. MongoDB
MongoDB 是最流行的文檔存儲(chǔ),也是頂級(jí)數(shù)據(jù)庫(kù)管理系統(tǒng)之一。MongoDB 最初是為了解決與通過(guò) DoubleClick 提供互聯(lián)網(wǎng)廣告相關(guān)的敏捷性和可擴(kuò)展性問(wèn)題而創(chuàng)建的。MongoDB 企業(yè)版提供 Kerberos、LDAP、審計(jì)和磁盤加密功能。
MongoDB 的主要優(yōu)點(diǎn)之一是它是一個(gè)無(wú)模式數(shù)據(jù)庫(kù),將數(shù)據(jù)存儲(chǔ)為類似 JSON 的文檔。這意味著 MongoDB 在它可以存儲(chǔ)的記錄類型方面提供了敏捷性和靈活性。它還允許字段在文檔之間變化。
如果您正在尋求高可用性,MongoDB 是一個(gè)很好的選擇,因?yàn)樗褂镁哂袛?shù)據(jù)冗余和自動(dòng)故障轉(zhuǎn)移功能的副本集。這確保您的應(yīng)用程序可以繼續(xù)服務(wù),即使節(jié)點(diǎn)已關(guān)閉。
不幸的是,除非您選擇其中一種 DBaaS 風(fēng)格,否則 MongoDB 管理操作(例如打補(bǔ)丁)是手動(dòng)的并且可能很耗時(shí)。此外,隨著數(shù)據(jù)庫(kù)開(kāi)始擴(kuò)展,MongoDB 會(huì)遇到內(nèi)存熱點(diǎn)問(wèn)題。
3. 阿帕奇HBase
HBase 是一個(gè)開(kāi)源的寬列存儲(chǔ)分布式數(shù)據(jù)庫(kù),構(gòu)建在 HDFS 之上,并借鑒了 Google Bigtable 的多項(xiàng)功能。這包括內(nèi)存操作、布隆過(guò)濾器和壓縮。HBase 基于 Java 構(gòu)建,并提供對(duì) Avro、Jython、REST、Thrift 和 Scala 等外部 API 的支持。HBase 提供其數(shù)據(jù)庫(kù)的獨(dú)立版本,盡管它主要用于開(kāi)發(fā)配置而非生產(chǎn)場(chǎng)景。
由于HBase使用HDFS作為分布式文件系統(tǒng),它可以存儲(chǔ)大數(shù)據(jù)集,甚至數(shù)十億行,并快速提供分析。HBase 支持稀疏數(shù)據(jù),可以跨商用服務(wù)器硬件托管/分布,確保即使數(shù)據(jù)擴(kuò)展到千兆字節(jié)和 PB 級(jí),此 NoSQL 數(shù)據(jù)庫(kù)也具有成本效益。這種分布有助于 HBase 最顯著的優(yōu)勢(shì)之一:它的故障轉(zhuǎn)移支持包括自動(dòng)恢復(fù)。
盡管 HBase 在許多方面與 Cassandra 相似,但主要區(qū)別在于它使用主副本架構(gòu)。這意味著它具有單點(diǎn)故障,因?yàn)閺囊粋€(gè) HMaster 到另一個(gè) HMaster 的故障可能需要時(shí)間,這可能會(huì)導(dǎo)致性能瓶頸。因此,如果您正在尋找一個(gè)始終可用的系統(tǒng),Cassandra 可能是您更好的選擇。
與 Cassandra 不同,HBase 沒(méi)有查詢語(yǔ)言。因此,為了實(shí)現(xiàn)類 SQL 的能力,HBase 需要用戶采用基于 JRuby 的 HBase shell 和 Apache Hive 等技術(shù)。不幸的是,使用這些技術(shù)可能會(huì)導(dǎo)致高延遲。
NoSQL 數(shù)據(jù)庫(kù)監(jiān)控的重要性
選擇 NoSQL 數(shù)據(jù)庫(kù)后,您需要考慮實(shí)施數(shù)據(jù)庫(kù)監(jiān)控工具。SolarWinds DPM是一款用于開(kāi)源和 NoSQL 數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)性能監(jiān)控和優(yōu)化工具。DPM 具有一個(gè) SaaS 平臺(tái),該平臺(tái)具有易于使用的基于 Web 的用戶界面,使您可以從任何地方進(jìn)行訪問(wèn)。該工具通過(guò)多種配置提供輕量級(jí)代理,并可以在本地、云端或混合環(huán)境中監(jiān)控?cái)?shù)據(jù)庫(kù)。
DPM 是一種非常先進(jìn)的分析工具,提供實(shí)時(shí)和歷史數(shù)據(jù)指標(biāo),使您能夠快速、輕松地查明性能問(wèn)題。借助此 NoSQL 數(shù)據(jù)庫(kù)監(jiān)控和優(yōu)化解決方案,您可以通過(guò)多種方式保護(hù)敏感數(shù)據(jù),從而輕松滿足 GDPR 和 SOC2 合規(guī)性要求。
選擇合適的 NoSQL 數(shù)據(jù)庫(kù)
盡管 MongoDB 是最流行的 NoSQL 數(shù)據(jù)庫(kù)之一,但像 Cassandra 這樣的寬列數(shù)據(jù)庫(kù)可能能夠提供更好的查詢性能。選擇 NoSQL 數(shù)據(jù)庫(kù)時(shí),您應(yīng)該考慮托管 DBaaS 服務(wù)的可用性,您可以在其中將數(shù)據(jù)庫(kù)維護(hù)和管理工作交給提供商。這使開(kāi)發(fā)人員可以專注于應(yīng)用程序。在這方面,HBase 有所欠缺,而 MongoDB 提供了非常成熟的 DBaaS 產(chǎn)品,例如 MongoDB Atlas。HBase 是寫入密集型應(yīng)用程序和海量記錄的良好解決方案。
無(wú)論您選擇哪種 NoSQL 數(shù)據(jù)庫(kù)或決定采用何種維護(hù)和管理方法,您都應(yīng)該實(shí)施數(shù)據(jù)庫(kù)性能監(jiān)控工具來(lái)幫助您跟蹤和優(yōu)化數(shù)據(jù)庫(kù)性能。SolarWinds DPM 是一種企業(yè)級(jí)、可擴(kuò)展且用戶友好的選項(xiàng),適用于各種規(guī)模的企業(yè)。