WZ_XJTU_JAVA_SPACE

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

          MongoDB之一NOSQL

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

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

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

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

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

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

          3. 關(guān)系型數(shù)據(jù)庫過的關(guān)注consistency,其實(shí)我們很多的系統(tǒng)中并不需要這么好的consistency,起碼很多的Web2.0或者是普通的網(wǎng)站來說,只要把Support,維護(hù),alert機(jī)制做好,不需要太多的consistency一樣可以做出很好的系統(tǒng)。當(dāng)然我們也可以通過一些機(jī)制實(shí)現(xiàn) eventually consistency (沒有很深入的研究過)。太多的consistency的關(guān)注必然導(dǎo)致最后的available不會(huì)做到很好。進(jìn)而關(guān)系型數(shù)據(jù)庫很難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每種都有自己的問題)。很多NOSQL都解決了這個(gè)問題,無論是auto- sharding(因?yàn)槭莐ey做主的東西,可以很好的拆分)還是replication。(這一塊要進(jìn)一步研究)

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

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

          posted on 2010-02-24 10:46 wz.xjtu 閱讀(331) 評(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)搶問題,鎖定嗎?
          • --awp001
          • 4.?re: Cache之我見
          • 目前我的核心任務(wù)是實(shí)現(xiàn)一個(gè)對(duì)象池,減少垃圾收集,樓主能否提供一些建議?
          • --awp001
          • 5.?re: Cache之我見
          • 我這幾天正在研究在系統(tǒng)內(nèi)引入緩存,樓主說的一級(jí)緩存 二級(jí)緩存 是一個(gè)很好的想法。
          • --awp001

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 泰顺县| 龙州县| 洛隆县| 鹤庆县| 星座| 永修县| 洪江市| 莱芜市| 鄱阳县| 左贡县| 金堂县| 陆丰市| 商河县| 潜山县| 札达县| 磐安县| 安西县| 新巴尔虎右旗| 庄浪县| 永安市| 囊谦县| 乐安县| 朔州市| 陆川县| 本溪| 泰安市| 阜城县| 潜江市| 子长县| 衡水市| 武城县| 台中县| 洪泽县| 大悟县| 恩平市| 舞钢市| 阳西县| 曲阜市| 新干县| 嘉荫县| 浙江省|