4 種不適合使用NoSQL數(shù)據(jù)庫(kù)的場(chǎng)景
我們?cè)谧罱囊黄恼轮刑接懥?NoSQL 和 NewSQL之間的基本區(qū)別。 現(xiàn)在讓我們通過(guò)觀察開(kāi)發(fā)人員真正關(guān)心的問(wèn)題來(lái)剖析其差異:
- 我們可以用NoSQL來(lái)解決哪些問(wèn)題?
- 同樣重要的是,NoSQL在哪些方面不適合使用?
- 不同的方法 (NoSQL 和 NewSQL) 在哪些方面才能顯示它們的優(yōu)勢(shì)?
讓我們回顧一下NoSQL和NewSQL之間四個(gè)有明顯差異的領(lǐng)域,并回顧一下一些使用NoSQL技術(shù),但可能不是***選擇的用例。
NoSQL數(shù)據(jù)庫(kù)的四個(gè)缺點(diǎn)
不要讓我們產(chǎn)生誤解,NoSQL數(shù)據(jù)庫(kù)對(duì)于許多工作負(fù)載和應(yīng)用程序是非常有優(yōu)勢(shì)的,但在四個(gè)方面,NoSQL的缺點(diǎn)是很明顯的。
可擴(kuò)展性
當(dāng)NoSQL產(chǎn)品用來(lái)實(shí)現(xiàn)以滿足諸如Google,F(xiàn)acebook和Twitter等與生俱來(lái)的網(wǎng)絡(luò)公司的可擴(kuò)展性需求時(shí),它們開(kāi)始引起注意。 這些公司要處理大量來(lái)自無(wú)數(shù)來(lái)源的非結(jié)構(gòu)化數(shù)據(jù):網(wǎng)絡(luò)搜索,移動(dòng)設(shè)備,用戶狀態(tài)更新,評(píng)論流等。
在這些用例中,最重要的考慮是可擴(kuò)展性:數(shù)據(jù)庫(kù)必須大規(guī)模擴(kuò)展。 SQL數(shù)據(jù)庫(kù)的僵硬模式和交互性被視為枷鎖,并且在傳統(tǒng)RDBMS上擴(kuò)展的成本也被認(rèn)為是不可行的。
在廉價(jià)的硬件商品上向外擴(kuò)展的能力是很關(guān)鍵的。 如果你的用例需要橫向擴(kuò)展***數(shù)據(jù)源,NoSQL可能是正確的選擇 --- 除非你要對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)操作。
雖然傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)提供了擴(kuò)展選項(xiàng) ---- 以非常顯著的成本 ---- 許多NewSQL系統(tǒng)被設(shè)計(jì)為解決可擴(kuò)展性挑戰(zhàn),首先使用NoSQL來(lái)解決,同時(shí)保留傳統(tǒng)RDBMS的事務(wù)性和交互性。
一個(gè)很好的替代方案是內(nèi)存中,大規(guī)模并行的SQL關(guān)系數(shù)據(jù)庫(kù),它在廉價(jià)的硬件商品上線性擴(kuò)展。 數(shù)據(jù)庫(kù)應(yīng)該是云友好的,并且能夠通過(guò)擴(kuò)展來(lái)滿足云操作的需求。 應(yīng)該將其設(shè)計(jì)為具有高性能和低延遲,具有無(wú)共享,本地群集,云友好的架構(gòu),從而實(shí)現(xiàn)高可用性,可冗余和容錯(cuò)性。
可用性
大多數(shù)NoSQL系統(tǒng)是為可用性設(shè)計(jì)的,CAP-定理>
這個(gè)由Apache Cassandra做出的著名的設(shè)計(jì)決策是基于這樣一個(gè)觀點(diǎn),即數(shù)據(jù)總是可以訪問(wèn)比數(shù)據(jù)立即正確更重要。 畢竟,理由是,誰(shuí)真的關(guān)心一個(gè)Tweet是否真的按照發(fā)布的順序?qū)崟r(shí)顯示? 最終,它將以正確的順序顯示,但不一定非得立即正確顯示。
在某些用例中,最終的一致性是可以接受的。 但是在許多情況下,例如當(dāng)您需要立即作出決定時(shí)...
- 讓移動(dòng)用戶的訪問(wèn)通過(guò)。
- 分配有限的,稀缺的資源。
- 處理財(cái)務(wù)。
... EC(和NoSQL)就不是一個(gè)好的選擇。
一些NewSQL系統(tǒng)允許用戶能夠?qū)⒁恢滦约?jí)別調(diào)低。 例如,MemSQL支持弱隔離(ACID中的“I”)來(lái)提高查詢延遲。 為了可用性而犧牲正確答案,這對(duì)分析型(OLAP)工作負(fù)載可能是有意義的,但對(duì)事務(wù)型(OLTP)工作負(fù)載就變得無(wú)關(guān)緊要了。
一致性(例如,兼容ACID事務(wù),正確答案)
NoSQL系統(tǒng)被設(shè)計(jì)為可用性(見(jiàn)上文)。 這個(gè)選擇意味著他們無(wú)法提供CAP定理>
因此,NoSQL系統(tǒng)選擇AP - 它們是可用性和分區(qū)容錯(cuò)性。 這使得NoSQL對(duì)于需要強(qiáng)一致性的應(yīng)用程序或用例來(lái)說(shuō)是一個(gè)糟糕的選擇:
- 計(jì)費(fèi)。
- 權(quán)限管理,運(yùn)營(yíng)支持(電信公司)。
- ***一美元(廣告科技,游戲)。
- SLA(譯者注:Service Level Agreement 服務(wù)級(jí)別協(xié)議,提供服務(wù)的企業(yè)與客戶之間就服務(wù)的品質(zhì)、水準(zhǔn)、性能等方面所達(dá)成的雙方共同認(rèn)可的協(xié)議或契約)管理,會(huì)話管理。
- 交易驗(yàn)證,欺詐檢測(cè),投標(biāo)和報(bào)價(jià)管理。
- 傳感器管理。
典型的CAP定義說(shuō):你不可能同時(shí)滿足這三個(gè)特性。
一個(gè)更實(shí)際的方式來(lái)考慮CAP:面對(duì)網(wǎng)絡(luò)分區(qū),您不能總是具有***的一致性和100%的可用性。 您應(yīng)該相應(yīng)地做出規(guī)劃。
快速請(qǐng)求-響應(yīng)應(yīng)用程序
現(xiàn)代請(qǐng)求-響應(yīng)式風(fēng)格的應(yīng)用程序大量發(fā)生:
- 驗(yàn)證用戶的余額時(shí)允許移動(dòng)電話進(jìn)行連接。
- 以***惠的價(jià)格交易。
- 向潛在的成千上萬(wàn)的用戶展示移動(dòng)廣告,而不會(huì)影響廣告客戶的廣告預(yù)算。
- 為電信運(yùn)營(yíng)商管理嚴(yán)格的SLA。
- 在交易批準(zhǔn)之前檢測(cè)欺詐刷卡。
這些事件在世界各地每天發(fā)生數(shù)百萬(wàn)次。 電信,金融服務(wù),在線游戲,廣告技術(shù)等行業(yè)的供應(yīng)商需要適應(yīng)這些事件的變化和速度。 他們需要一個(gè)可擴(kuò)展的,事務(wù)性一致的解決方案。