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

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


咨詢
建站咨詢
