成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

NoSQL究竟是什么?了解為什么NoSQL數(shù)據(jù)庫不是傳統(tǒng)數(shù)據(jù)庫的對手

數(shù)據(jù)庫 其他數(shù)據(jù)庫
近年來,我們目睹了NoSQL的興起,并觀察它在各種應(yīng)用中的應(yīng)用。本文旨在對SQL和NoSQL技術(shù)進(jìn)行客觀比較,并嘗試澄清一些不明確的方面,以幫助人們熟悉地選擇后端。

近年來,我們目睹了NoSQL的興起,并觀察它在各種應(yīng)用中的應(yīng)用。本文旨在對SQL和NoSQL技術(shù)進(jìn)行客觀比較,并嘗試澄清一些不明確的方面,以幫助人們熟悉地選擇后端。 

我對NoSQL的態(tài)度

一切都有時(shí)間,2014年我開始使用NoSQL。也許我遲到了,但我之前的項(xiàng)目需求完全被傳統(tǒng)數(shù)據(jù)庫所滿足,所以我沒有被迫學(xué)習(xí)NoSQL。

NoSQL技術(shù)被神秘的光環(huán)所包圍。我第一次發(fā)現(xiàn)開發(fā)人員有一件名為“NoSQL”的東西,他穿著一件帶有“向我詢問MongoDB”標(biāo)記的T恤。我當(dāng)時(shí)沒有問過。我被答案嚇到了,我畫得很長很復(fù)雜。然后我看到兩個(gè)不同的方面:誰是NoSQL的重要推動(dòng)者,他們討厭舊數(shù)據(jù)庫,而傳統(tǒng)開發(fā)人員則拒絕NoSQL的所有好處。

當(dāng)我意識(shí)到這種情況時(shí),我確信我會(huì)發(fā)現(xiàn)并學(xué)習(xí)。這讓我進(jìn)入了一個(gè)小項(xiàng)目,我將這兩個(gè)解決方案與基準(zhǔn)進(jìn)行比較,以顯示NoSQL的所有優(yōu)點(diǎn)和限制。最后,我理解NoSQL和SQL只是為不同項(xiàng)目設(shè)計(jì)的不同工具(即使在某些情況下你需要兩者)。五年后,我無法確定文化差距是否已經(jīng)填補(bǔ)。這就是為什么我刷新文章,切割無聊的部分,我在這里重新發(fā)表。

[[276611]]

 

什么是NoSQL

簡單來說,NoSQL是一個(gè)不遵循關(guān)系數(shù)據(jù)庫模型的新數(shù)據(jù)存儲(chǔ)后端。這意味著我們所說的“容器”與傳統(tǒng)的基于SQL的后端的工作方式不同。

NoSQL技術(shù)的誕生是為了滿足傳統(tǒng)數(shù)據(jù)庫已經(jīng)成熟時(shí)出現(xiàn)的一系列新需求。當(dāng)然,在最近幾年,應(yīng)用程序需求發(fā)生了變化,變得更加挑剔(大數(shù)據(jù),集群,文件存儲(chǔ)庫),因此這個(gè)新的存儲(chǔ)系統(tǒng)的設(shè)計(jì)考慮到了這些新的需求。

但是,我的意思是“要求”?這里有一組NoSQL旨在支持的案例。

  • 該應(yīng)用程序使用大量數(shù)據(jù)(大數(shù)據(jù))
  • 該應(yīng)用程序使用快速更改關(guān)系和數(shù)據(jù)類型(半結(jié)構(gòu)化,非結(jié)構(gòu)化和多態(tài)數(shù)據(jù))的數(shù)據(jù)。
  • 開發(fā)人員使用敏捷方法在一個(gè)小團(tuán)隊(duì)中工作:針對長期瀑布迭代的許多小沖刺
  • 作為服務(wù)的應(yīng)用程序可以在Web上發(fā)布
  • 為數(shù)千名用戶而非公司內(nèi)部的少數(shù)人提供的應(yīng)用程序
  • 對應(yīng)用程序的未來負(fù)載一定不確定:需要具有可擴(kuò)展性和動(dòng)態(tài)性,需要輕松地在后端集群上使用基礎(chǔ)軟件

市場上提供了許多NoSQL解決方案,無論是開源還是非開源。它們中的每一個(gè)都有所不同,可能專門針對某些特定需求,但基本思想和共同特征是提供更好的可擴(kuò)展性和性能。為此,他們放棄了通用RDBMS的一些功能,引入了新功能,但保留了足夠的功能。

NoSQL實(shí)現(xiàn)

SQL DB的一個(gè)重大變化是SQL后端是一個(gè)通用存儲(chǔ)系統(tǒng),NoSQL分發(fā)專注于特定類型的數(shù)據(jù)。這允許DB在其范圍內(nèi)更有效,并允許我們擁有更高性能的系統(tǒng)。在本節(jié)中,我們將討論NoSQL數(shù)據(jù)庫的應(yīng)用程序。請注意,它們可以一起使用(也可以與傳統(tǒng)的SQL系統(tǒng)一起使用),以便從不同的技術(shù)中獲得最佳效果。

文檔導(dǎo)向

這種類型的數(shù)據(jù)庫不需要具有一致的數(shù)據(jù)結(jié)構(gòu),因此當(dāng)您必須處理多態(tài)數(shù)據(jù)或數(shù)據(jù)結(jié)構(gòu)不斷變化時(shí),它們非常有用。這種后端可以將標(biāo)準(zhǔn)化實(shí)體(如鍵值數(shù)據(jù)集或EAV模型)轉(zhuǎn)換為簡單的文檔集。

  • 目標(biāo):存儲(chǔ)非類型的“記錄”集,稱為“文檔”
  • 示例: MongoDB,CouchDB
  • 目標(biāo):異構(gòu)數(shù)據(jù),面向工作,敏捷開發(fā)

圖數(shù)據(jù)庫

我們被告知NoSQL數(shù)據(jù)庫已經(jīng)刪除了關(guān)系的概念以實(shí)現(xiàn)更好的性能。在這種DB中,這不是真的。相反,圖形數(shù)據(jù)庫強(qiáng)制執(zhí)行關(guān)系概念。

他們的目標(biāo)是通過與其他數(shù)據(jù)的關(guān)系來定義數(shù)據(jù)。當(dāng)大多數(shù)數(shù)據(jù)結(jié)構(gòu)被設(shè)計(jì)為保持與實(shí)體的關(guān)系時(shí)(即,當(dāng)存在大多數(shù)外鍵列時(shí),如果有很多表),這種數(shù)據(jù)庫可能很有用。

  • 目標(biāo):描述數(shù)據(jù)關(guān)系
  • 示例: Neo4j,GiraffeDB。
  • 目標(biāo):數(shù)據(jù)挖掘

鍵值商店

這是一種用于存儲(chǔ)大量鍵值對數(shù)據(jù)的DB。當(dāng)數(shù)據(jù)庫用于存儲(chǔ)屬性,轉(zhuǎn)換或緩存目的時(shí),這可能很有用。

  • 目標(biāo):以鍵值形式存儲(chǔ)數(shù)據(jù)
  • 示例: Redis,Cassandra,MemcacheDB
  • 目標(biāo):鍵值存儲(chǔ)

NoSQL的優(yōu)點(diǎn)

我們知道NoSQL DB有一些有趣的優(yōu)點(diǎn),它們可以解決傳統(tǒng)RDMS無法解決的問題。如今,他們在關(guān)鍵系統(tǒng)中的大量工作,如大型云系統(tǒng)和一些大型SaaS產(chǎn)品,確認(rèn)它們已經(jīng)成熟且有用。但問題是,為什么我應(yīng)該轉(zhuǎn)向他們?在這種情況下,何時(shí)移動(dòng)有利可圖?我們不能只根據(jù)我們的印象做出這樣的決定,并閱讀一些供應(yīng)商宣傳冊,其中NoSQL非常酷是不夠的。而且,我們不能因?yàn)楹ε伦兓A粼诓怀浞值钠脚_(tái)上。

在本節(jié)中,我將嘗試解釋為什么這個(gè)解決方案可以很好地轉(zhuǎn)移到哪個(gè)用例使其更有利可圖。

正如我們所說,NoSQL數(shù)據(jù)庫的創(chuàng)建是為了響應(yīng)傳統(tǒng)關(guān)系數(shù)據(jù)庫技術(shù)的局限性。這意味著我們會(huì)發(fā)現(xiàn)一些改進(jìn),或者更好的是,傳統(tǒng)RDBMS中的某些功能不存在且無法添加,即使生產(chǎn)者會(huì)實(shí)現(xiàn)它們。

NoSQL的優(yōu)點(diǎn)包括易于處理的功能:

  • 大數(shù)據(jù):使用這個(gè)術(shù)語,我們描述了包含大量數(shù)據(jù)的數(shù)據(jù)集。
  • 可變數(shù)據(jù):數(shù)據(jù)也可以是結(jié)構(gòu)化的,半結(jié)構(gòu)化的和非結(jié)構(gòu)化的。NoSQL還可以管理數(shù)據(jù)轉(zhuǎn)換。
  • 動(dòng)態(tài)開發(fā):在我們需要敏捷沖刺,快速迭代,頻繁代碼推送以及總結(jié)以響應(yīng)變化的環(huán)境中,擁有一個(gè)包含動(dòng)態(tài)的數(shù)據(jù)庫是非常有幫助的。
  • 面向?qū)ο螅?/strong>易于使用且靈活的編程
  • 可擴(kuò)展:我們可以輕松實(shí)現(xiàn)高效,可擴(kuò)展的架構(gòu),而不是昂貴的單片架構(gòu)。即使在傳統(tǒng)的數(shù)據(jù)庫中,我們也能做到這一點(diǎn),但它更難,更有限。
  • 開源:大多數(shù)解決方案都是開源的,因此無需許可證

綜上所述:

NoSQL數(shù)據(jù)庫更具可擴(kuò)展性并提供更好的性能,并且它們的數(shù)據(jù)模型更接近應(yīng)用程序內(nèi)部使用的域模型。基于NoSQL數(shù)據(jù)庫啟動(dòng)項(xiàng)目的公司數(shù)量正在增長。NoSQL數(shù)據(jù)庫也往往是開源的,這意味著開發(fā),實(shí)現(xiàn)和共享軟件的成本相對較低。

NoSQL的限制

在評(píng)估NoSQL數(shù)據(jù)庫的局限性時(shí),重要的是要記住NoSQL世界是一個(gè)多樣化的生態(tài)系統(tǒng)。并非所有NoSQL存儲(chǔ)產(chǎn)品都具有相同程度的所有缺點(diǎn)。這是一件好事,因?yàn)檫@意味著在權(quán)衡不同NoSQL解決方案的優(yōu)缺點(diǎn)時(shí),組織有很多選擇,以決定哪一個(gè)最適合他們的特定需求。本章總結(jié)了使用NoSQL解決方案可能會(huì)遺漏的一些功能。

通過閱讀這篇文章,你會(huì)發(fā)現(xiàn)本章擴(kuò)展的不僅僅是優(yōu)勢之一。這不是阻止使用NoSQL的方法。本章將對NoSQL技術(shù)的所有限制進(jìn)行公正的描述,并且只是想讓您了解使用它們時(shí)可能遇到的每個(gè)問題。許多要點(diǎn)可能會(huì)因?qū)嵤┒兴煌矗?dāng)我說支持的工具很少時(shí),大多數(shù)工具都適合,但并非所有工具都適用),因此請將它們視為一個(gè)概述,提醒您可能存在的風(fēng)險(xiǎn)找。我期望的是,在您選擇使用NoSQL產(chǎn)品之后,您可以使用本章作為核對表來了解您的特定數(shù)據(jù)庫中是否存在此問題以及它是否與應(yīng)用程序相關(guān)。

安全

安全是每個(gè)人都想要的,但很難達(dá)到。從理論上講,每種技術(shù)都可能存在安全問題。SQL系統(tǒng)上也存在安全問題,也許存在安全問題。那么為什么我將此標(biāo)記為NoSQL的可能問題?

關(guān)于安全性的NoSQL“概念”沒有真正的問題,但我們可能會(huì)遇到與我們采用的產(chǎn)品的成熟度相關(guān)的安全問題。產(chǎn)品增長時(shí)出現(xiàn)安全問題,然后修復(fù)。直觀地說,年輕的產(chǎn)品可能有許多未知的安全問題。此外,一個(gè)年輕的產(chǎn)品在市場上銷售的時(shí)間較短,因此顧問沒有時(shí)間獲得它們的經(jīng)驗(yàn),許多安全限制可以忽略不計(jì)。所以,問題是大多數(shù)NoSQL平臺(tái)的新特性。對于商業(yè)用途,我建議使用成熟的解決方案,背后有供應(yīng)商。

數(shù)據(jù)一致性

當(dāng)我們開始學(xué)習(xí)RDBMS時(shí),他們告訴我們ACID事務(wù)是使整個(gè)數(shù)據(jù)庫保持一致的操作的最佳選擇。好吧,大多數(shù)NoSQL技術(shù)都沒有實(shí)現(xiàn)這種交易。NoSQL系統(tǒng)基于最終一致性原則。在實(shí)踐中,擁抱一點(diǎn)風(fēng)險(xiǎn)(一個(gè)節(jié)點(diǎn)可能與其他節(jié)點(diǎn)不同步),它們會(huì)獲得一些性能提升。是的,這是妥協(xié),但我們不能擁有一切。

我必須提到一些NoSQL實(shí)現(xiàn),比如FoundationDB,允許類似ACID的事務(wù)保持NoSQL性能高。順便說一下,當(dāng)我們繼續(xù)使用NoSQL時(shí),數(shù)據(jù)一致性仍然是一個(gè)關(guān)鍵部分:基于您正在開發(fā)的應(yīng)用程序,這可能是一個(gè)問題。

JOIN的

當(dāng)您與試圖將您轉(zhuǎn)換為NoSQL技術(shù)的人交談時(shí),您可以從中聽到的第一個(gè)好處之一是由于刪除關(guān)系而帶來的性能優(yōu)勢。我們都同意一種關(guān)系可能會(huì)降低性能,但我們會(huì)失去什么呢?

想象一下,你在徒步旅行時(shí)背著沉重的背包。當(dāng)然,放棄它你會(huì)更快。這樣做很方便嗎?取決于這個(gè)包裝包含什么,這取決于背包內(nèi)容的價(jià)值是什么。如果它包含一個(gè)夜晚的帳篷,也許最好在一小時(shí)后到達(dá)目的地,但要保持溫暖而不是走得更快。如果你帶來有用的一次性用品,也許你可以做相反的事情。

遵循這種并行性,我們是否可以接受松散的一致性以獲得性能?方便值得嗎?

退后一步,我將從連接的起源開始。RDBMS使用該關(guān)系將數(shù)據(jù)從一個(gè)表鏈接到另一個(gè)表,以將數(shù)據(jù)保存在一個(gè)位置而不復(fù)制它們。構(gòu)造連接以允許我們在查詢中重新連接它們。當(dāng)然,在表之間進(jìn)行連接需要額外的計(jì)算成本,而不是直接在要查詢的表中查找數(shù)據(jù)。但是這個(gè)成本對于保持關(guān)系(沒有復(fù)制,一致性)是必要的。

很明顯,雖然這個(gè)功能有可接受的開銷,但這沒關(guān)系,可能是最好的選擇。但什么時(shí)候它減慢了一切或需要太多的硬件?這個(gè)問題允許NoSQL開發(fā)人員聲稱缺少JOIN到一個(gè)功能,但NoSQL始終是解決方案嗎?

不總是。有時(shí)我們只需要重新設(shè)計(jì)數(shù)據(jù)庫結(jié)構(gòu),可能會(huì)刪除一些關(guān)系或重組數(shù)據(jù)。是的,我們將失去一些關(guān)系,或者我們將復(fù)制日期的某些部分,但它可以接受(在NoSQL中我們將失去所有的關(guān)系)。

另一個(gè)問題是一致性。考慮類別和產(chǎn)品。我們可能有一個(gè)嵌套的類別樹,許多產(chǎn)品作為樹的葉子。在傳統(tǒng)的RDMS中,更改類別樹只是對類別表上的外鍵(自我關(guān)系)的更新。這些更改會(huì)自動(dòng)反映所有子類別和產(chǎn)品。在NoSQL中,我們可以在所有類別/產(chǎn)品上擁有冗余數(shù)據(jù),并且需要對子元素進(jìn)行大量更新。

棘手的交易

讓我假設(shè)我們的應(yīng)用程序可以放棄JOIN以獲得速度,在我們的例子中,這是一個(gè)可接受的權(quán)衡。我們說過,在許多NoSQL實(shí)現(xiàn)中,很難保持各種條目的一致性。當(dāng)您在沒有事務(wù)的情況下工作時(shí),您可以按順序執(zhí)行許多操作,但過了一段時(shí)間后會(huì)出現(xiàn)不一致 這對于NoSQL的第一次實(shí)現(xiàn)是正確的,并且一些新技術(shù)試圖給出事務(wù)。您還可以考慮在應(yīng)用程序級(jí)別管理事務(wù),嘗試回滾臟數(shù)據(jù),但在許多情況下可能很難管理。

缺少供應(yīng)商技術(shù)的標(biāo)準(zhǔn)

SQL是一種標(biāo)準(zhǔn)語言。可能會(huì)有許多變化帶來特定的方言,但這很復(fù)雜并不禁止抽象數(shù)據(jù)訪問。想想Hibernate,NHibernate,Doctrine,Entity Framework或其他ORM。它們證明了SQL方言之間的區(qū)別并不重要。我們可以得出結(jié)論,即使許多供應(yīng)商實(shí)現(xiàn)了不同的數(shù)據(jù)庫技術(shù),SQL也是一種標(biāo)準(zhǔn)語言。此外,如果您不是基于ORM層,如果您為DB生成查詢,則大多數(shù)代碼可以在其他代碼中重用。這使遷移更容易,開發(fā)人員可以快速適應(yīng)不同的DB解決方案。

另一方面,在NoSQL世界中,存在更多混亂。每個(gè)供應(yīng)商實(shí)現(xiàn)其特定語法,而不涉及任何共享標(biāo)準(zhǔn)。這意味著在不同的NoSQL實(shí)現(xiàn)之間遷移應(yīng)用程序更加困難。這意味著找到一個(gè)熟悉許多NoSQL技術(shù)的程序員更難。

架構(gòu)靈活性可能是一個(gè)麻煩

NoSQL系統(tǒng)的一個(gè)特點(diǎn)是它們不需要架構(gòu)。在實(shí)踐中,程序員在保存數(shù)據(jù)時(shí)決定數(shù)據(jù)結(jié)構(gòu)。因此,沒有任何地方可以寫出數(shù)據(jù)的結(jié)構(gòu)以及數(shù)據(jù)的含義。即使您可以使用某種自動(dòng)化工具輕松地從數(shù)據(jù)關(guān)系重新創(chuàng)建數(shù)據(jù)庫模型,這可能是傳統(tǒng)應(yīng)用程序中缺少的。

而且,如果發(fā)生錯(cuò)誤怎么辦?我們知道可能存在代碼出錯(cuò)的情況。傳統(tǒng)的RDMS是腳手架,因此如果您切換某些字段或者您的字段格式錯(cuò)誤,它們可以保護(hù)您免受不一致。在NoSQL的情況下,DB沒有任何幫助,因?yàn)闆]有定義任何模式,沒有任何關(guān)于數(shù)據(jù)的信息應(yīng)該保存:沒有人可以說數(shù)據(jù)是否錯(cuò)誤。最糟糕的副作用是,該過程為開發(fā)人員帶來了很多權(quán)力和很多責(zé)任,通常不了解所有流程或完整結(jié)構(gòu)。

而且,即使你現(xiàn)在知道什么是保存的,你認(rèn)為你會(huì)記得下個(gè)月的所有內(nèi)容?和第二年?并非所有項(xiàng)目都需要持續(xù)開發(fā),在我們需要進(jìn)行一些更改之前,可能會(huì)有一個(gè)業(yè)務(wù)應(yīng)用程序保持原樣多年。

在IT部門,公司通常會(huì)將項(xiàng)目委托給某個(gè)供應(yīng)商,因此必須考慮這一部分,以確保在項(xiàng)目結(jié)束時(shí)輕松移交,可能要求準(zhǔn)確記錄有關(guān)數(shù)據(jù)的結(jié)構(gòu)以及每個(gè)字段/集合的含義。與模式靈活性相關(guān)的最后一個(gè)問題是團(tuán)隊(duì)中的每個(gè)成員都無法在項(xiàng)目中工作,因此,對于小團(tuán)隊(duì)來說,流量是至關(guān)重要的并非所有成員都對數(shù)據(jù)結(jié)構(gòu)有完整的了解,或者沒有足夠的文檔。

Analytics(分析)

將多個(gè)嵌套數(shù)據(jù)保存在單個(gè)文檔中可能會(huì)丟失“SUM”,“COUNT”等分析功能。在第一次應(yīng)用程序開發(fā)期間這可能不是問題的壞事,但有人可能會(huì)在稍后詢問某些報(bào)告,那么在這種情況下該怎么做?在填充數(shù)據(jù)庫之后很難改變數(shù)據(jù)結(jié)構(gòu),并且由于明確定義的數(shù)據(jù)結(jié)構(gòu)的泄漏,這樣做可能具有不可預(yù)測的影響。分析對于NoSQL來說是一個(gè)難點(diǎn)。

此外,雖然有許多商業(yè)工具可以連接到傳統(tǒng)數(shù)據(jù)庫來管理分析部分,但對NoSQL系統(tǒng)的支持有限。

可以采取的另一個(gè)解決方案是在NoSQL DB中復(fù)制某種與非結(jié)構(gòu)化數(shù)據(jù)的“關(guān)系”,可能會(huì)創(chuàng)建許多集合并將對象與其他集合鏈接起來。如果您計(jì)劃遵循此路徑以允許分析報(bào)告,請記住,這可能會(huì)降低性能,使其與標(biāo)準(zhǔn)SQL系統(tǒng)相媲美。當(dāng)此DB中涉及的部分最小且記錄數(shù)量有限時(shí),這是可以接受的。無論如何,即使根據(jù)我的經(jīng)驗(yàn),構(gòu)造允許加入NoSQL查詢的數(shù)據(jù),因?yàn)楸澈鬀]有明確定義的關(guān)系,非常有限并且性能不如我們預(yù)期的那么好(即,在撰寫本文時(shí)) ,MongoDB不支持內(nèi)連接,每次只能進(jìn)化到表而不創(chuàng)建臨時(shí)表)。

更少的工具

我們談到了NoSQL查詢語言和語法缺乏標(biāo)準(zhǔn)化。這個(gè)問題也可以反映在工具中,以及大多數(shù)平臺(tái)的年輕性。我說的是用于查詢的工具,也用于在數(shù)據(jù)庫之間遷移數(shù)據(jù),管理備份等。當(dāng)然,大多數(shù)NoSQL項(xiàng)目正在增長,我們期望工具會(huì)隨之增長,所以這個(gè)問題會(huì)在某些時(shí)候自動(dòng)解決。

缺乏標(biāo)準(zhǔn)化使第三方供應(yīng)商難以構(gòu)建可支持多種NoSQL解決方案的工具。此外,年輕平臺(tái)意味著更少的用戶,更少的客戶,更少的時(shí)間來開發(fā)成熟的工具。

性能比較

指定比較的方式很重要。首先,我需要將兩種解決方案置于相同的條件下。這意味著,例如,使用相同的硬件并具有相同的調(diào)整級(jí)別。所以我在同一臺(tái)機(jī)器上安裝了MongoDB(最新版本)和SQLServer Express。因?yàn)槲覀儗?shù)據(jù)庫本身的性能不感興趣,所以我使用基于標(biāo)準(zhǔn)框架的C#代碼構(gòu)建了我的基準(zhǔn)測試。

通過這兩種方式來保存數(shù)據(jù),一切都是共享的(實(shí)體,邏輯,數(shù)據(jù)生成)以確保公平。

我們將比較的所有操作列表:

  • 質(zhì)量插入
  • 詢問
  • 分析
  • 事務(wù)(或更好,在NoSQL情況下,事務(wù)模擬)

對單個(gè)實(shí)體的批量操作

該基準(zhǔn)測試包含一組可在較短時(shí)間內(nèi)插入的對象。使用越來越多的項(xiàng)目來復(fù)制此測試以保存以證明兩個(gè)系統(tǒng)中的性能規(guī)模。該基準(zhǔn)測試以毫秒為單位測量執(zhí)行時(shí)間,并堅(jiān)持使用單個(gè)表/集合。

NoSQL究竟是什么?了解為什么NoSQL數(shù)據(jù)庫不是傳統(tǒng)數(shù)據(jù)庫的對手

 

搜索

此基準(zhǔn)測試側(cè)重于查詢功能。我們將以下模式分開:

  • CASE 1使用主鍵獲取一個(gè)實(shí)體:此模式用于從DB獲取單個(gè)實(shí)體,使用唯一標(biāo)識(shí)符
  • CASE 2完全掃描失敗:當(dāng)您要查找已刪除的元素時(shí),數(shù)據(jù)庫必須在回復(fù)“否”之前掃描所有索引。
  • CASE 3分頁查詢:一個(gè)復(fù)雜的查詢,其中有一些過濾器,一個(gè)訂單條件,并且您只想獲取一頁數(shù)據(jù)。

我創(chuàng)建了一些基準(zhǔn)模擬上面不同比例的模式。在一個(gè)示例中,第一個(gè)基準(zhǔn)假定5%的類型1的查詢,70%的類型2和25%的類型3.該基準(zhǔn)測量以ms為單位的執(zhí)行時(shí)間。此基準(zhǔn)測試堅(jiān)持使用單個(gè)表\集合。

您可以在git-hub上找到用于執(zhí)行這些測試的所有代碼。

第一個(gè)測試是在“小”數(shù)據(jù)集上,大約2.500,000行。

對“更大”的數(shù)據(jù)集進(jìn)行第二次測試,大約5M行。

此基準(zhǔn)測試突出顯示了對索引的查詢性能的重大改進(jìn),但是當(dāng)使用MongoDB讀取一組數(shù)據(jù)時(shí),增益會(huì)降低并且在數(shù)據(jù)增加時(shí)保持穩(wěn)定。

NoSQL究竟是什么?了解為什么NoSQL數(shù)據(jù)庫不是傳統(tǒng)數(shù)據(jù)庫的對手

 

交易

我們知道NoSQL世界的事務(wù)大多不受支持。我們也明白放棄交易可以從表演中獲益,一個(gè)問題是:我從中獲得多少收益?我構(gòu)建了這個(gè)基準(zhǔn)來比較插入與一個(gè)與許多孩子相關(guān)的主行的事務(wù)。基準(zhǔn)測試的重點(diǎn)是執(zhí)行時(shí)間,以ms表示。

NoSQL究竟是什么?了解為什么NoSQL數(shù)據(jù)庫不是傳統(tǒng)數(shù)據(jù)庫的對手

 

Analytics(分析)

該基準(zhǔn)專注于分析。假設(shè)我們有一個(gè)分類的主 - 詳細(xì)數(shù)據(jù)模型,您希望:

  • export:整個(gè)加入整體數(shù)據(jù)樹
  • 報(bào)告:匯總所有類別的所有項(xiàng)目,即為所有客戶提供發(fā)票金額
  • 關(guān)鍵績效指標(biāo):總結(jié)所有總計(jì)總計(jì)詳細(xì)小計(jì)

在內(nèi)連接后的4M行的基礎(chǔ)上:

NoSQL究竟是什么?了解為什么NoSQL數(shù)據(jù)庫不是傳統(tǒng)數(shù)據(jù)庫的對手

 

興趣點(diǎn)

革命在科技領(lǐng)域是不可避免的。新技術(shù)帶來了一些革命性的功能,但往往不得不打敗開發(fā)人員的先入之見。有時(shí)他們會(huì)被誤解,所以他們的弱點(diǎn)在他們受雇后就會(huì)出現(xiàn)。

關(guān)于創(chuàng)新,我們必須“對立”人群:

  1. “熱心”的人:希望無條件地接受變革,并準(zhǔn)備好處理過去所做的一切,以便使用最后的技術(shù);
  2. “保守派”人:討厭改變,寧愿保持其習(xí)慣,拒絕任何新技術(shù)。

在現(xiàn)實(shí)生活中,我們必須保持中間位置,因此了解和了解新技術(shù)可以為我們做些什么并準(zhǔn)備好在項(xiàng)目需要之前采用新技術(shù)非常重要。“在工作中進(jìn)行審判”是一種可能導(dǎo)致不良后果的壞習(xí)慣。

同樣的原則適用于NoSQL技術(shù)。因?yàn)槲覀冎翱催^NoSQL,現(xiàn)在我們知道贊成和利弊,所以我們可以利用這種工具。當(dāng)我們分析這項(xiàng)技術(shù)時(shí),我們不能停止從傳統(tǒng)習(xí)慣(如交易,模式和標(biāo)準(zhǔn))中看到我們想念的東西。我們需要研究和熟悉這些技術(shù),這些技術(shù)在幾年前還很年輕,但現(xiàn)在卻是一個(gè)具體的選擇。學(xué)習(xí),學(xué)習(xí),理解,使用:這是進(jìn)步的本質(zhì)。

什么時(shí)候我應(yīng)該使用NoSQL Db?

為什么NoSQL會(huì)比使用SQL數(shù)據(jù)庫更好?閱讀完本文后,我確信您會(huì)理解NoSQL不是SQL數(shù)據(jù)庫的替代品,而是具有不同功能的不同存儲(chǔ)系統(tǒng),并且在某些特定領(lǐng)域中非常有用。所以答案不能與“它取決于”有所不同。因?yàn)樗Q于項(xiàng)目的許多特征。

說實(shí)話,謹(jǐn)慎,當(dāng)以下所有陳述都成立時(shí),NoSQL是最佳解決方案:

  • 當(dāng)您的項(xiàng)目需要擴(kuò)展時(shí),或?qū)砜赡堋?/li>
  • 當(dāng)你必須處理大數(shù)據(jù)時(shí),或者你的數(shù)據(jù)在不久的將來會(huì)變得很大
  • 當(dāng)應(yīng)用程序中的分析組件簡單或不那么重要時(shí)
  • 當(dāng)您的應(yīng)用程序需要適合數(shù)據(jù)庫目的時(shí)(即您在圖表和數(shù)據(jù)庫中保存數(shù)據(jù))

在某些情況下,NoSQL可能是一個(gè)很好的選擇,但對于構(gòu)​​建耐用的基礎(chǔ)架構(gòu)并不是必不可少的。當(dāng)然,如果在您的應(yīng)用程序中,NoSQL系統(tǒng)覆蓋了99%的所有需求,則沒有理由將其與RDBMS結(jié)合使用。但是,如果您需要標(biāo)準(zhǔn)RDBMS的關(guān)系,事務(wù)和其他功能,可能最好將它們用作主存儲(chǔ)系統(tǒng),并使用NoSQL僅覆蓋關(guān)鍵部分(可能源自數(shù)據(jù)的大小)。

在上面的情況下,表現(xiàn)有多好?

這取決于具體的用例。從一方面來說,我們在大型表或大量使用方面有很多好處,但從另一方面來說,我們使用查找而不是加入小型數(shù)據(jù)集會(huì)有一些性能損失。一個(gè)現(xiàn)實(shí)的估計(jì),如果有使用NoSQL DB的基礎(chǔ),我們可以將性能從10提高到100。當(dāng)然,這種估計(jì)考慮了應(yīng)用程序的所有方面,并且與最終用戶體驗(yàn)有關(guān)。這意味著您可以在數(shù)據(jù)庫層上測量更好的加速,但最終用戶體驗(yàn)會(huì)因許多減少差距的因素(緩存,網(wǎng)絡(luò)延遲,頁面呈現(xiàn))而失真。

只是為了解釋我所說的內(nèi)容,當(dāng)有一個(gè)頁面進(jìn)行查詢并返回?cái)?shù)據(jù)時(shí),請參考示例中的極限情況。假設(shè)此頁面使用傳統(tǒng)數(shù)據(jù)庫獲取結(jié)果為500毫秒,使用NoSQL為50毫秒,渲染頁面為200毫秒,通過互聯(lián)網(wǎng)傳輸數(shù)據(jù)為1秒。DB層的性能提升為-90%,但對于最終用戶,1700只增加了450ms,因此只有26%。通過這個(gè)例子,我會(huì)解釋說很難衡量復(fù)雜系統(tǒng)的改進(jìn),在很多情況下,NoSQL還不足以解決性能問題。更直接的是,如果您考慮解決因遷移到NoSQL的應(yīng)用程序中的設(shè)計(jì)不良而導(dǎo)致的性能問題,那么您就沒有走上正確的道路。

但最大的問題是:為了獲得這種表現(xiàn),我失去了什么?因?yàn)樵谀承┣闆r下,不可能放棄某些功能,如交易或關(guān)系。在移動(dòng)之前理解這一點(diǎn)非常重要。

NoSQL系統(tǒng)在生產(chǎn)環(huán)境中應(yīng)用是否成熟?

這主要取決于您的需求,或更好地取決于項(xiàng)目要求。我們可以說NoSQL肯定足夠成熟。所以,如果你需要它,你可以毫無顧慮地使用它。但并非所有應(yīng)用程序都需要處理大數(shù)據(jù)或大規(guī)模擴(kuò)展。大多數(shù)Saas產(chǎn)品確實(shí)如此,在企業(yè)環(huán)境中也有很多關(guān)鍵應(yīng)用程序,但現(xiàn)在大多數(shù)應(yīng)用程序仍然非常簡單。

根據(jù)我的經(jīng)驗(yàn),很難在數(shù)據(jù)庫中找到超過10萬行的表。想想你的數(shù)據(jù)庫,排除你上面的2-3個(gè)更大的表并查看行數(shù)。它們有多大?DB應(yīng)用程序上的常用DB結(jié)構(gòu)計(jì)數(shù)很多“小”表(小于10萬行)相關(guān)。對于這種類型的應(yīng)用程序,傳統(tǒng)的RDBMS就足夠了,它將永遠(yuǎn)存在。重要的是,而不是開始使用它,就是要了解在您的案例需要時(shí)準(zhǔn)備好的利益和發(fā)展模式。

SQL過時(shí)了嗎?

當(dāng)男人發(fā)明飛機(jī)時(shí),汽車已經(jīng)過時(shí)了?不,當(dāng)然。如果飛機(jī)比汽車快。它們只是兩種不同的系統(tǒng)來移動(dòng)人,具有不同的特征。根據(jù)您的旅行類型,您在旅行和預(yù)算上花費(fèi)的時(shí)間,您將決定什么是最適合您的選擇。同樣,NoSQL即將推出過時(shí)的SQL。它們只是兩種不同的存儲(chǔ)數(shù)據(jù)的方式,具有不同的特征。您將根據(jù)自己的需求決定什么是最適合您的。

SQL不適合存在問題,因此您不必使用它來啟動(dòng)大數(shù)據(jù)項(xiàng)目。這將是試圖用汽車而不是飛機(jī)到達(dá)島嶼。但SQL仍然有其優(yōu)勢。許多數(shù)據(jù)模型最好表示為相互引用的表的集合。這就像試圖用飛機(jī)去買牛奶一樣。NoSQL數(shù)據(jù)庫不是SQL的替代品,但它們是替代品。

市場是否為NoSQL做好準(zhǔn)備?

回答這個(gè)問題的關(guān)鍵點(diǎn)是更接近開發(fā)人員實(shí)現(xiàn)的經(jīng)驗(yàn)。大多數(shù)數(shù)據(jù)庫程序員都接受了一年的培訓(xùn),以便相關(guān)地思考數(shù)據(jù)。他們?nèi)绾卧谶@么短的時(shí)間內(nèi)改變思維方式?它并不容易,特別是當(dāng)開發(fā)人員必須在許多項(xiàng)目中工作時(shí),其中一些是SQL和其他NoSQL。將SQL上的相同模式復(fù)制到NoSQL系統(tǒng)的誘惑很難被擊敗,并且經(jīng)常會(huì)導(dǎo)致糟糕的結(jié)果。

實(shí)際上,有更多的SQL專有技術(shù),RDBMS上的開發(fā)人員比NoSQL更多。同時(shí),DBA花費(fèi)大部分時(shí)間專注于關(guān)系數(shù)據(jù)庫,我們不能指望在不到十年前出生的技術(shù)上找到相同的東西。在學(xué)校和大學(xué)都達(dá)到了SQL,NoSQL正在開始。

在第一點(diǎn)之后,第二點(diǎn)是,因?yàn)檫@些系統(tǒng)較新,開發(fā)工具較少,或者它們不像其他系統(tǒng)那么先進(jìn),但我確信這不是一個(gè)真正的問題。有一些“企業(yè)就緒”的解決方案,它提供了管理所有基本需求的工具,我們希望這些工具隨著平臺(tái)的發(fā)展而增長。

什么是最好的解決方案?

沒有涵蓋任何案例的最佳解決方案。答案很簡單,但仍然相同:“這取決于”。通過本文,我希望能夠概述這些系統(tǒng)的所有功能以及了解它們何時(shí)有用的一些基礎(chǔ)知識(shí)。 

 

 

責(zé)任編輯:龐桂玉 來源: 今日頭條
相關(guān)推薦

2011-03-15 14:54:08

NoSQL

2018-09-10 13:47:21

數(shù)據(jù)科學(xué)統(tǒng)計(jì)學(xué)決策

2024-02-02 10:51:53

2015-03-17 09:24:15

NoSQL數(shù)據(jù)庫使用NoSQL

2011-02-16 16:13:40

Debian

2011-07-07 09:11:54

NoSQL數(shù)據(jù)庫

2021-09-28 09:25:05

NoSQL數(shù)據(jù)庫列式數(shù)據(jù)庫

2011-10-09 09:38:03

OracleNoSQL

2023-09-05 10:25:35

數(shù)據(jù)庫性能

2020-12-17 17:33:47

MLOps大數(shù)據(jù)數(shù)據(jù)

2015-06-04 10:26:50

2011-07-19 09:08:50

JavaNoSQL

2019-03-20 15:59:11

NoSQLRedis數(shù)據(jù)庫

2019-07-08 10:36:34

數(shù)據(jù)庫WebNoSQL

2010-04-01 09:45:38

NoSQL

2024-03-28 09:00:00

NoSQL數(shù)據(jù)庫

2020-10-31 22:01:40

NoSQL數(shù)據(jù)庫

2017-05-25 10:11:46

數(shù)據(jù)庫令牌節(jié)點(diǎn)

2019-05-27 15:30:44

Node.jsJavaScript前端

2015-09-29 09:47:14

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲欧美日韩精品 | 国产一区二区 | 国产香蕉视频 | 久草新在线 | 一区二区三区亚洲 | 亚洲成人福利视频 | 精品亚洲国产成av人片传媒 | 国产视频中文字幕 | 亚洲日本一区二区 | 欧美另类视频在线 | 午夜www| 在线观看的av| 尤物在线精品视频 | 亚洲视频在线一区 | 午夜久久久久久久久久一区二区 | 丝袜美腿一区 | 国产精品久久久久久妇女6080 | 国产成人精品久久二区二区91 | 欧美性受xxxx| 99免费看 | 自拍视频网站 | 精品91 | 国产免费一区二区三区 | www日本高清视频 | 亚洲高清免费 | 免费国产一区二区 | 亚洲欧美在线观看 | 99热这里有精品 | 国产精品九九视频 | 欧美成年黄网站色视频 | www.天天操| 91精品国产综合久久久久久 | 91精品国产91久久久久游泳池 | 国产精品欧美一区喷水 | 国产成年人小视频 | 97久久精品午夜一区二区 | 青青草视频网站 | 精品久久久久久久久久久久久久 | 黄视频免费观看 | 99久久亚洲 | 亚洲一区国产 |