WZ_XJTU_JAVA_SPACE

          while(true) {System.out.println("wz.xjtu");}

          MongoDB之一NOSQL

          NOSQL數(shù)據(jù)庫(kù)經(jīng)過(guò)了風(fēng)風(fēng)火火的一年,各個(gè)解決方案做的一個(gè)比一個(gè)有個(gè)性,并且大部分都有了商業(yè)應(yīng)用,總體來(lái)說(shuō)自己創(chuàng)造出來(lái)并且可以進(jìn)行自行優(yōu)化的東東還是經(jīng)得起歷練的。

          MongoDB在過(guò)去的一年中,變化非常之大,剛開始關(guān)注它的時(shí)候,它只是一個(gè)沒(méi)有1.0版本的東東,但是現(xiàn)在已經(jīng)加上太多太多的功能了,其中包括 MapReduce,Auto Sharding,等。

          經(jīng)過(guò)了比較深入的研究(還會(huì)繼續(xù)研究),發(fā)現(xiàn)這個(gè)最像關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)確實(shí)做的很強(qiáng)大。有很多東西還是非常值得探討的。我們先從以下方面進(jìn)行研究關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)的區(qū)別,以及為什么要在某種條件下擯棄關(guān)系型數(shù)據(jù)庫(kù)。

          1. 關(guān)系型數(shù)據(jù)庫(kù)的產(chǎn)生就是為關(guān)系所生,如果一條條的都不是關(guān)系型的數(shù)據(jù),需要進(jìn)行關(guān)系型數(shù)據(jù)庫(kù)嗎? 答案很簡(jiǎn)單:不需要

          經(jīng)典應(yīng)用:Log的存儲(chǔ) (存儲(chǔ)到關(guān)系型數(shù)據(jù)庫(kù)的話,耽誤了我們可憐的不好擴(kuò)張的數(shù)據(jù)庫(kù)呀,如果存儲(chǔ)在文件里面,那又不好進(jìn)行管理,所以非關(guān)系型數(shù)據(jù)庫(kù)是一個(gè)很好的解決方案)

          2. 關(guān)系型數(shù)據(jù)庫(kù)過(guò)多的強(qiáng)調(diào)了關(guān)系,關(guān)系型數(shù)據(jù)庫(kù)的目標(biāo)是把我們的數(shù)據(jù)庫(kù)打造成一個(gè)第三范式遍布的數(shù)據(jù)結(jié)構(gòu)(無(wú)傳遞函數(shù)依賴和部分函數(shù)依賴)。但是這種拆解變相的多了一次數(shù)據(jù)庫(kù)操作,也就是一次IO,性能也就會(huì)下降了。 例子如下:當(dāng)我們想打開一個(gè)帖子的時(shí)候,我們肯定還是想把下面的Comments都拿到的,如果我們直接能把Comments存在這個(gè)帖子之下就很容解決了吧。

          3. 關(guān)系型數(shù)據(jù)庫(kù)過(guò)的關(guān)注consistency,其實(shí)我們很多的系統(tǒng)中并不需要這么好的consistency,起碼很多的Web2.0或者是普通的網(wǎng)站來(lái)說(shuō),只要把Support,維護(hù),alert機(jī)制做好,不需要太多的consistency一樣可以做出很好的系統(tǒng)。當(dāng)然我們也可以通過(guò)一些機(jī)制實(shí)現(xiàn) eventually consistency (沒(méi)有很深入的研究過(guò))。太多的consistency的關(guān)注必然導(dǎo)致最后的available不會(huì)做到很好。進(jìn)而關(guān)系型數(shù)據(jù)庫(kù)很難scaling out。為了scaling out read,我們只能去做partition,但是partition很難做呀,一半都會(huì)牽扯到很多代碼的改動(dòng)。這些代碼的改動(dòng)會(huì)嚴(yán)重影響項(xiàng)目的穩(wěn)定性而且風(fēng)險(xiǎn)性很大。而為了scaling out write 只能去做master-slave的解決方案(async和sync每種都有自己的問(wèn)題)。很多NOSQL都解決了這個(gè)問(wèn)題,無(wú)論是auto- sharding(因?yàn)槭莐ey做主的東西,可以很好的拆分)還是replication。(這一塊要進(jìn)一步研究)

          4. Schema問(wèn)題。關(guān)系型數(shù)據(jù)的schema都是一定的,如果增加或減少一個(gè)column那可是一個(gè)大動(dòng)呀。但是NOSQL卻是能很容易的解決這個(gè)問(wèn)題,因?yàn)樗麄兙褪莐ey-value而已。

          NOSQL的提出是一個(gè)思想的進(jìn)步,是一種編程理念的進(jìn)步,數(shù)據(jù)庫(kù)只是一個(gè)存儲(chǔ)的庫(kù)而已,他不應(yīng)該過(guò)多的關(guān)注于其他的business相關(guān)的東西。將來(lái)發(fā)展的前景是我們所有的business的邏輯都應(yīng)該在Domain里面體現(xiàn),我們不用關(guān)注下面到底存儲(chǔ)到那里。

          posted on 2010-02-24 10:46 wz.xjtu 閱讀(328) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          <2010年2月>
          31123456
          78910111213
          14151617181920
          21222324252627
          28123456
          78910111213

          統(tǒng)計(jì)

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評(píng)論

          • 1.?re: Cache之我見
          • 評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
          • --awp001
          • 2.?re: Cache之我見
          • 評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
          • --wz.xjtu
          • 3.?re: Cache之我見
          • 在分布式環(huán)境里,多個(gè)用戶共用一個(gè)Cache,從Cache中獲取對(duì)象的時(shí)候,如何解決用戶之間的爭(zhēng)搶問(wèn)題,鎖定嗎?
          • --awp001
          • 4.?re: Cache之我見
          • 目前我的核心任務(wù)是實(shí)現(xiàn)一個(gè)對(duì)象池,減少垃圾收集,樓主能否提供一些建議?
          • --awp001
          • 5.?re: Cache之我見
          • 我這幾天正在研究在系統(tǒng)內(nèi)引入緩存,樓主說(shuō)的一級(jí)緩存 二級(jí)緩存 是一個(gè)很好的想法。
          • --awp001

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 南宁市| 孝昌县| 开江县| 全椒县| 稷山县| 罗山县| 屏山县| 张家界市| 会泽县| 平武县| 景泰县| 富宁县| 资溪县| 甘南县| 西乌珠穆沁旗| 朝阳县| 琼结县| 五台县| 正安县| 太原市| 安陆市| 乌恰县| 公主岭市| 岐山县| 壶关县| 开原市| 漠河县| 应城市| 胶南市| 来凤县| 治县。| 平昌县| 梅州市| 萍乡市| 文安县| 木里| 连平县| 台前县| 科尔| 平武县| 北票市|