自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

CouchDB 讓人頭痛的十大問(wèn)題

數(shù)據(jù)庫(kù) 其他數(shù)據(jù)庫(kù)
下面十條內(nèi)容來(lái)自paperplanes的博主Mathias Meyer,他也是一位NoSQL的實(shí)踐者,CouchDB就是其鐘愛(ài)的數(shù)據(jù)庫(kù)之一。正所謂愛(ài)之深恨之切,在使用CouchDB的過(guò)程中,他發(fā)現(xiàn)很多不順手的地方,就是本文列舉的十大問(wèn)題。

下面十條內(nèi)容來(lái)自paperplanes的博主Mathias Meyer,他也是一位NoSQL的實(shí)踐者,CouchDB就是其鐘愛(ài)的數(shù)據(jù)庫(kù)之一。正所謂愛(ài)之深恨之切,在使用CouchDB的過(guò)程中,他發(fā)現(xiàn)很多不順手的地方,就是本文列舉的十大問(wèn)題。

View是在讀時(shí)更新的

我們知道CouchDB不支持動(dòng)態(tài)查詢,也就是說(shuō)你的每個(gè)查詢,都需要事先創(chuàng)建一個(gè)對(duì)應(yīng)的View,創(chuàng)建View是很快的,即使你的數(shù)據(jù)集很大,這 是因?yàn)镃ouchDB并不在創(chuàng)建View的時(shí)候就建立View索引,而是在讀取的時(shí)候來(lái)做這個(gè)事。當(dāng)在一個(gè)View上執(zhí)行一次讀操作時(shí),CouchDB會(huì) 對(duì)比當(dāng)前View中的索引更新時(shí)間與最后寫操作時(shí)間,如果發(fā)現(xiàn)在索引更新之后又有寫操作,那么會(huì)把這段時(shí)間的寫操作合并到索引中再返回給客戶端。

你可以想象到,如果數(shù)據(jù)集非常大,你創(chuàng)建完View后的第一次讀取會(huì)是多慢。同樣的,如果你兩次讀操作間隔期間有太多的寫操作,那么也會(huì)導(dǎo)致讀操作 非常慢,有的朋友通過(guò)cron任務(wù)定時(shí)對(duì)View進(jìn)行查詢,從而觸發(fā)定時(shí)的索引更新操作,以減少真正讀操作需要等待的時(shí)間,不得不說(shuō)這真是蛋疼。這一切, 都是因?yàn)镃ouchDB的View是在讀時(shí)更新導(dǎo)致的。

而實(shí)際上,如果你不愿意等待CouchDB去更新完索引后再返回?cái)?shù)據(jù),你也可以通過(guò)stale=ok參數(shù)指定它返回老數(shù)據(jù)即可,不用做更新操作。但 我們不能總是訪問(wèn)老數(shù)據(jù),作者希望可以通過(guò)指定查詢先返回老的數(shù)據(jù),再進(jìn)行相應(yīng)的索引更新操作。而實(shí)際上這一功能已經(jīng)在1.1.0版本中實(shí)現(xiàn)了,在 1.1.0版本中,添加了一個(gè)stale=update_after的指定,可以實(shí)現(xiàn)返回老數(shù)據(jù)后再在后臺(tái)更新的功能。

缺乏自動(dòng)壓縮功能

CouchDB采用了append-only的方法進(jìn)行數(shù)據(jù)更新,也就是所有數(shù)據(jù)的寫操作,都不會(huì)修改原來(lái)的數(shù)據(jù)文件,而是追加上新的版本來(lái)實(shí)現(xiàn)。 這使得CouchDB能夠?qū)崿F(xiàn)對(duì)同一條數(shù)據(jù)保存多個(gè)版本。也使得CouchDB的數(shù)據(jù)文件永遠(yuǎn)不會(huì)被改花掉。因?yàn)樗肋h(yuǎn)在做append操作,即使出現(xiàn)問(wèn) 題,只要去掉尾巴上一某一段數(shù)據(jù)就能回到之前某個(gè)時(shí)間的數(shù)據(jù)快照。

然而,這些好的特性必然需要付出代價(jià),這代價(jià)就是數(shù)據(jù)大小會(huì)只增不減的膨脹。所以,數(shù)據(jù)壓縮工作是遲早都得做的事。但是CouchDB并沒(méi)有提供數(shù)據(jù)自動(dòng)壓縮的功能。這讓人很郁悶。

不支持局部更新

局部更新的意思就是,不更新整條數(shù)據(jù),只更新其它某個(gè)屬性或字段。這個(gè)看似天經(jīng)地義的功能,在CouchDB里卻沒(méi)有。在CouchDB中,所有的update操作都需要對(duì)整條數(shù)據(jù)進(jìn)行更新。

缺乏內(nèi)存的擴(kuò)展性支持

CouchDB的同步機(jī)制是很牛X的,這幾乎是它的殺手級(jí)功能。你可以隨意在集群中添加刪除節(jié)點(diǎn), 可以隨意指定Master和Slave的角色, 數(shù)據(jù)都會(huì)很好的同步到所有節(jié)點(diǎn)上。能達(dá)到這樣的效果,是由CouchDB本身的機(jī)制決定的。然而,我們并不能做跨節(jié)點(diǎn)的讀寫操作。

在這方面,CouchDB-lounge算是一個(gè)嘗試,但是它把整個(gè)架構(gòu)復(fù)雜化了,我感覺(jué)不太舒服。

分頁(yè)實(shí)現(xiàn)起來(lái)會(huì)很奇怪

如果你要對(duì)CouchDB中的數(shù)據(jù)進(jìn)行分頁(yè)展示,這會(huì)比較麻煩,在《CouchDB權(quán)威指南》中有一個(gè)對(duì)分頁(yè)的實(shí)現(xiàn),但是這個(gè)實(shí)現(xiàn)給人感覺(jué)非常別扭。如果你要在CouchDB中實(shí)現(xiàn)分頁(yè)的話,最好還是用那個(gè)“獲取更多”按鈕的方式來(lái)做。

范圍查詢使用不太方便

如果你的key是這樣的['123', '2010/07/21'],其中前一部分為查詢的key,后一部分為時(shí)間,用于保證記錄的順序性。這時(shí)候你要查詢所有’123′開頭的記錄時(shí),就需要指 定起始條件為 ['123'],并且還必須指定一個(gè)終止條件為['123',{}],這樣讓人感覺(jué)用起得很不方便。

CommonJS無(wú)法用于mapreduce函數(shù)中

在CouchDB 0.11版本中,CommonJS已經(jīng)可以用在view函數(shù)上,但是一直不能用在mapreduce函數(shù)中。這讓我總是重復(fù)一些寫過(guò)的代碼。

缺乏document之間完備的包含關(guān)系

在CouchDB 0.11中,map函數(shù)可以通過(guò){_id: doc.other_id}的方式包含另外一個(gè)document的引用,在查詢時(shí)能夠獲取到對(duì)應(yīng)這個(gè)文檔的id,但是再進(jìn)一步,如果我想再獲取被包含的這 個(gè)文檔的屬性,那就沒(méi)辦法了。希望能夠有辦法通過(guò)當(dāng)前集合的查詢,獲取并返回這個(gè)包含的文檔的某些屬性。

讀操作總是會(huì)落到磁盤上

CouchDB沒(méi)有實(shí)現(xiàn)自己的緩存。在寫操作中,你可以通過(guò)delay commit的方式將寫操作延遲同步,這樣就避免了每次寫操作就需要寫磁盤。但除此之外,CouchDB沒(méi)有做任何緩存。對(duì)于移動(dòng)設(shè)備上的CouchDB 來(lái)說(shuō),寫磁盤可能會(huì)好一些,畢竟移動(dòng)設(shè)備上的flash設(shè)備比服務(wù)器上的傳統(tǒng)磁盤性能要好一些。

沒(méi)用的錯(cuò)誤信息

CouchDB的錯(cuò)誤信息經(jīng)常讓人摸不著頭腦,根本就看不明白錯(cuò)誤出在哪里。比如下面這一段,你能告訴我它說(shuō)明了什么問(wèn)題嗎。

  1. {<0.84.0>,supervisor_report,  
  2.  [{supervisor,{local,couch_secondary_services}},  
  3.   {errorContext,start_error},  
  4.   {reason,  
  5.       {'EXIT',  
  6.           {undef,  
  7.               [{couch_auth_cache,start_link,[]},  
  8.                {supervisor,do_start_child,2},  
  9.                {supervisor,start_children,3},  
  10.                {supervisor,init_children,2},  
  11.                {gen_server,init_it,6},  
  12.                {proc_lib,init_p_do_apply,3}]}}},  
  13.   {offender,  
  14.       [{pid,undefined},  
  15.        {name,auth_cache},  
  16.        {mfa,{couch_auth_cache,start_link,[]}},  
  17.        {restart_type,permanent},  
  18.        {shutdown,brutal_kill},  
  19.        {child_type,worker}]}]}} 

好了,大概就這些吧。雖然上面說(shuō)了這么多CouchDB讓人不爽的地方,但是總的來(lái)說(shuō),我還是很喜歡CouchDB的,雖然有上面一些讓人不爽的地 方,但是它還是能幫我處理很多問(wèn)題。所以爭(zhēng)論一個(gè)東西是否要用,并不是看它能不能滿足所有需求,而是看它能不能滿足你要的核心需求就行了。

英文:http://www.paperplanes.de/2010/7/26/10_annoying_things_about_couchdb.html

原文鏈接:http://blog.nosqlfan.com/html/3667.html

【編輯推薦】

  1. MoreSQL(NewSQL)挑戰(zhàn) NoSQL?
  2. 甲骨文NoSQL數(shù)據(jù)庫(kù)第一印象
  3. 先睹為快:甲骨文NoSQL數(shù)據(jù)庫(kù)
  4. 分布式緩存能否作為NoSQL數(shù)據(jù)庫(kù)?
  5. 淺析Oracle NoSQL Database
責(zé)任編輯:林師授 來(lái)源: NoSQLFan
相關(guān)推薦

2022-03-09 23:28:31

Java開發(fā)異常

2023-09-19 10:19:24

2022-06-16 11:02:18

IT領(lǐng)導(dǎo)者首席信息官

2013-07-25 14:56:37

JavaEE 性能

2013-06-21 14:36:02

JavaEEx性能

2015-11-02 14:15:05

2020-11-30 14:40:52

事務(wù)系統(tǒng)項(xiàng)目

2009-07-16 10:04:56

Java語(yǔ)言

2019-10-21 08:31:34

容器微服務(wù)docker

2009-12-08 14:42:30

Windows 7操作

2024-06-21 14:13:45

2014-01-16 09:25:46

2013-01-18 11:18:02

2023-08-03 09:45:52

2011-11-16 09:43:07

2011-03-11 14:36:56

SQL Server數(shù)

2011-03-16 13:54:51

十大問(wèn)題應(yīng)用iOS

2013-08-29 09:50:07

云性能測(cè)試云安全聯(lián)盟CSA

2024-08-06 10:00:11

2012-01-09 11:25:32

云計(jì)算
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)