新聞中心
想用MongoDB取代MySQL可以嗎?
其實(shí)每個(gè)產(chǎn)品都有其特長(zhǎng)的短板,可能會(huì)在一定程度上存在功能重復(fù),但不可能完全取代。舉個(gè)不太恰當(dāng)?shù)睦觼?lái)說(shuō):貓和狗都可以當(dāng)寵物,貓能取代狗嗎?答案肯定是不能。但作為寵物,兩者確實(shí)都能做到惹人喜愛(ài),也都能在主人寂寞或無(wú)聊的時(shí)候陪伴主人,作為寵物,它們甚至有更多相同的作用,但兩者永遠(yuǎn)無(wú)法取代對(duì)方。不得不說(shuō)在這個(gè)技術(shù)類產(chǎn)品滿天飛的時(shí)代,總有些對(duì)技術(shù)不深入了解的人或企業(yè)做著用貓來(lái)取代狗的白日夢(mèng),希望大家保持對(duì)技術(shù)的敬畏之心,可以大膽假設(shè),但要謹(jǐn)慎求證,最終作出正確的選擇。

Mongodb作為最靠近關(guān)系數(shù)據(jù)庫(kù)的Nosql存儲(chǔ),取代MySQL可以嗎?
從功能角度看,是可以取代的。
關(guān)系數(shù)據(jù)庫(kù)應(yīng)該有的核心功能它都有了:B樹(shù)索引,事務(wù)(4.0)。
一些比較重要的小更新,比如Decimal128(3.4)的添加都讓它的功能更加完善。
你在Mysql里面用的復(fù)雜查詢基本上都可以用管道或者M(jìn)apReduce實(shí)現(xiàn)。
我在好幾個(gè)項(xiàng)目中完全使用的Mongodb,經(jīng)驗(yàn)如下:
* 關(guān)聯(lián)查詢麻煩,所以Mongodb在設(shè)計(jì)模型的時(shí)候傾向于數(shù)據(jù)都內(nèi)聯(lián),配合少量的In 查詢。這樣也會(huì)導(dǎo)致數(shù)據(jù)冗余后一致性更新的問(wèn)題。
* 設(shè)計(jì)動(dòng)態(tài)表格時(shí),Mongodb的體驗(yàn)時(shí)非常好的。
* 4.0之前的沒(méi)有事務(wù),碰到金錢(qián)相關(guān)的服務(wù),需要自己在服務(wù)中構(gòu)造事務(wù)環(huán)境,否則一旦失敗無(wú)法回滾。這也會(huì)造成這塊代碼膨脹。
自己也是程序員,分享一些觀點(diǎn)給你,其實(shí)不管是MongoDB還是Mysql,它們都是用來(lái)存儲(chǔ)數(shù)據(jù)用的,只不過(guò)存儲(chǔ)數(shù)據(jù)的方式不同,MySQL主要用于存儲(chǔ)關(guān)系類的數(shù)據(jù),而MongoDB主要用于存儲(chǔ)鍵值類的數(shù)據(jù),也就是我們常說(shuō)的NOSQL,曾經(jīng)一段時(shí)間,NOSQL是很多中小互聯(lián)網(wǎng)公司追求的東西。
那么既然都是存儲(chǔ)數(shù)據(jù)用的,那么肯定也可以相互替換,但是一個(gè)重要的問(wèn)題就是,怎么樣將MongoDB里面的數(shù)據(jù)存儲(chǔ)到MySQL里面或者相反方向有怎么存儲(chǔ)?這才是整個(gè)業(yè)務(wù)代碼非常復(fù)雜的實(shí)現(xiàn)部分,比如你要將MySQL的數(shù)據(jù)存儲(chǔ)到MongoDB里面去,那么你需要做的事情就是理清MySQL數(shù)據(jù)表里面的各種關(guān)系,然后將這些關(guān)系轉(zhuǎn)換為鍵值對(duì)存儲(chǔ)到MongoDB里面去,想象一下這個(gè)工作量我們就應(yīng)該知道,不是那么的簡(jiǎn)單,尤其是數(shù)據(jù)表非常多,并且數(shù)據(jù)表關(guān)系非常復(fù)雜的時(shí)候,這項(xiàng)遷移工程是需要后端程序員、數(shù)據(jù)庫(kù)DBA、運(yùn)維人員等等一起才能夠完成的事情。
所以得出結(jié)論,雖然兩種數(shù)據(jù)庫(kù)可以相互替換,但是替換的成本非常高,很多企業(yè)是不會(huì)這樣做的,除非現(xiàn)在項(xiàng)目性能已經(jīng)嚴(yán)重影響到目標(biāo)用戶。
粘貼那么多介紹干嘛,一句話:不同業(yè)務(wù)場(chǎng)景,選用就不一樣。mysql針對(duì)業(yè)務(wù)結(jié)構(gòu)復(fù)雜的用,mongodb反之。兩者結(jié)合,mongodb可以拿來(lái)做高級(jí)緩存或者提供查詢性能來(lái)存儲(chǔ)。mysql就出來(lái)業(yè)務(wù)結(jié)構(gòu)復(fù)雜的數(shù)據(jù)存儲(chǔ),還有事務(wù)回滾。mongodb是沒(méi)有事務(wù)回滾的
線上服務(wù)宕機(jī)時(shí),如何保證數(shù)據(jù)100%不丟失?
我們有很多的手段保證數(shù)據(jù)的安全,但是要保證100%安全這是不可能的。畢竟在系統(tǒng)運(yùn)行的過(guò)程中,服務(wù)器可以出的問(wèn)題千奇百怪,只能說(shuō)盡可能的讓數(shù)據(jù)盡可能的出出現(xiàn)丟失。
一般情況下,小的系統(tǒng)我們并不會(huì)考慮數(shù)據(jù)的熱備,一般只是在每天定時(shí)進(jìn)行冷備而已,也就是設(shè)置一個(gè)定時(shí)器,然后到時(shí)間就同步數(shù)據(jù)。不過(guò)這樣做的話,一單系統(tǒng)的數(shù)據(jù)庫(kù)出現(xiàn)異常,那么我們的數(shù)據(jù)就會(huì)回滾到上一個(gè)備份的時(shí)間點(diǎn),影響范圍就會(huì)比較大。
因此,對(duì)于數(shù)據(jù)量大一點(diǎn)的系統(tǒng),我們就會(huì)進(jìn)行主從庫(kù)的設(shè)置,不過(guò)通常情況下,我們做了主從庫(kù)都會(huì)做讀寫(xiě)分離。
現(xiàn)在不管是哪種數(shù)據(jù)庫(kù),都提供了數(shù)據(jù)庫(kù)之間訂閱同步的機(jī)制。以Mysql為例,我們先設(shè)置一個(gè)Master主庫(kù),然后在基于這個(gè)主庫(kù)設(shè)置1個(gè)到多個(gè)Salve從主,從庫(kù)通過(guò)在主庫(kù)的SQLLog日志進(jìn)行監(jiān)聽(tīng),一旦有SQL執(zhí)行,就會(huì)記錄一個(gè)二進(jìn)制的Log,從庫(kù)發(fā)現(xiàn)了這個(gè)Log,也會(huì)同時(shí)執(zhí)行同樣的操作,這樣就實(shí)現(xiàn)了數(shù)據(jù)的熱備。
但是,這種熱備的機(jī)制并不能100%保證數(shù)據(jù)不丟失。因?yàn)椋覀冊(cè)趯?xiě)入主庫(kù)的時(shí)候如果出現(xiàn)異常,導(dǎo)致SQLLog還沒(méi)有記錄,那么從庫(kù)是不可能有數(shù)據(jù)記錄的。當(dāng)然,此后的數(shù)據(jù)不會(huì)有影響,因?yàn)檫@是從庫(kù)會(huì)變?yōu)橹鲙?kù)來(lái)記錄后續(xù)數(shù)據(jù)。同樣,如果主從庫(kù)一起宕機(jī),那也只有涼涼。
隊(duì)列并不是針對(duì)于數(shù)據(jù)的,隊(duì)列其實(shí)是用來(lái)保證消息的安全穩(wěn)定的。自然,當(dāng)請(qǐng)求沒(méi)有被寫(xiě)入到數(shù)據(jù)庫(kù)是,都是以消息的形態(tài)存在,我們就可以考慮隊(duì)列來(lái)保證數(shù)據(jù)安全。
在數(shù)據(jù)庫(kù)訪問(wèn)層,或者再靠前,到服務(wù)層,我們都可以加入MQ,讓每一個(gè)請(qǐng)求都通過(guò)MQ來(lái)順序的處理,一但數(shù)據(jù)庫(kù)宕機(jī)了,MQ的執(zhí)行就會(huì)失敗,這時(shí),失敗的記錄會(huì)被保存在MQ里面,并不會(huì)丟失,一但數(shù)據(jù)庫(kù)重啟,我們可以再次執(zhí)行MQ中的消息,保證數(shù)據(jù)被成功的寫(xiě)入到數(shù)據(jù)庫(kù)中。
具體怎么做呢?
學(xué)習(xí)大數(shù)據(jù)需要什么基礎(chǔ)?
根據(jù)目前市場(chǎng)發(fā)展情況來(lái)看,大數(shù)據(jù)學(xué)習(xí)是需要一定的編程基礎(chǔ)的,現(xiàn)在比較主流的就是Java和python,但是在現(xiàn)實(shí)的工作中使用的大部分的還是Java編程的比較多一些,也就是現(xiàn)在很多大數(shù)據(jù)培訓(xùn)機(jī)構(gòu)推出的Java+大數(shù)據(jù)開(kāi)發(fā)培訓(xùn)課程,所以從這個(gè)方面來(lái)看的還是需要一些Java編程基礎(chǔ)的。
不過(guò),現(xiàn)在想要參加大數(shù)據(jù)培訓(xùn)學(xué)習(xí)的小伙伴有很多是沒(méi)有編程基礎(chǔ)的,多數(shù)是想要從其它行業(yè)轉(zhuǎn)行到大數(shù)據(jù)的,那么這樣沒(méi)有編程基礎(chǔ)的,能不能學(xué)習(xí)大數(shù)據(jù)呢?
對(duì)于零基礎(chǔ)的學(xué)員也不需要擔(dān)心自己沒(méi)有Java或者的python相關(guān)的編程語(yǔ)言就學(xué)習(xí)不了大數(shù)據(jù),這個(gè)培訓(xùn)機(jī)構(gòu)也有專門(mén)針對(duì)零基礎(chǔ)學(xué)員制定的大數(shù)據(jù)培訓(xùn)課程,前期先進(jìn)行Java編程或者是python編程的一個(gè)基礎(chǔ)學(xué)習(xí),等掌握了一些相關(guān)必要的編程基礎(chǔ)以后,在進(jìn)行大數(shù)據(jù)專業(yè)技術(shù)的學(xué)習(xí),這樣一來(lái)就可以順利進(jìn)行大數(shù)據(jù)學(xué)習(xí)了。
所以在學(xué)習(xí)大數(shù)據(jù)的時(shí)候也一定要注意課程的安排,根據(jù)自己的情況和大數(shù)據(jù)培訓(xùn)機(jī)構(gòu)的課程安排來(lái)進(jìn)行考慮如何選擇,如果是自己已經(jīng)從事Java或者python相關(guān)開(kāi)發(fā)工作多年,有一定的基礎(chǔ)的,那么就沒(méi)必要再去學(xué)習(xí)相關(guān)內(nèi)容直接選擇開(kāi)始學(xué)習(xí)大數(shù)據(jù)技術(shù)即可,如果是零基礎(chǔ)的學(xué)員那么就要選擇有Java或者是python基礎(chǔ)課程的進(jìn)行學(xué)習(xí)。
以上就是小編對(duì)于“學(xué)習(xí)大數(shù)據(jù)需要什么基礎(chǔ)?”這個(gè)問(wèn)題的回答,希望能夠幫助到大家,如果還有疑問(wèn)可以留言進(jìn)行交流。
到此,以上就是小編對(duì)于mongodb集群狀態(tài)startup2的問(wèn)題就介紹到這了,希望這3點(diǎn)解答對(duì)大家有用。
分享文章:線上服務(wù)宕機(jī)時(shí),如何保證數(shù)據(jù)100%不丟失?
地址分享:http://m.5511xx.com/article/ccddooh.html


咨詢
建站咨詢
