日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
R對(duì)MongoDB的性能測(cè)試——RMongo

在九月初的時(shí)候,RMongoDB正式發(fā)布了修訂版本,這也就意味著,從事數(shù)值計(jì)算的語(yǔ)言也可以于Nosql產(chǎn)品相接軌了,但是鑒于我身邊并沒有公司真的在使用R和MongoDB的結(jié)合,所以在效率問題上,我們也不敢掉以輕心,所以就做了一個(gè)這樣的測(cè)試。

10年積累的做網(wǎng)站、成都網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先做網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有桂陽(yáng)免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

測(cè)試環(huán)境是8核,64位機(jī)。 用于測(cè)試的庫(kù)是一個(gè)未經(jīng)Sharding,大概30G左右的Collection。用于存儲(chǔ)用戶的喜好信息,標(biāo)簽信息等數(shù)據(jù)。

 
 
 
  1. library(rmongodb)   
  2.  
  3. mongo <- mongo.create()  
  4.  
  5. if(mongo.is.connected(mongo))  
  6. {  
  7.     ns <- 'rivendell.user' 
  8.     print('查詢一個(gè)沒有索引的字段,查詢一條')  
  9.     print(system.time(p <- mongo.find.one(mongo,ns,list(Friend=600))))  
  10.     print('查詢一個(gè)沒有索引的字段,多條,without buffer')  
  11.     print(system.time(p <- mongo.find(mongo,ns,list(Friend=600))))  
  12.     print('看看是否有緩存策略')  
  13.     print(system.time(p <- mongo.find(mongo,ns,list(Friend=600))))  
  14.  
  15.     print('查詢一個(gè)沒有索引的字段,多條,has buffer')  
  16.     buf <- mongo.bson.buffer.create()  
  17.     mongo.bson.buffer.append(buf,'Friend',600L)  
  18.     query <- mongo.bson.from.buffer(buf)  
  19.     print(system.time(p <- mongo.find(mongo,ns,query)))  
  20.     print('看看是否有緩存策略')  
  21.     buf <- mongo.bson.buffer.create()  
  22.     mongo.bson.buffer.append(buf,'Friend',600L)  
  23.     query <- mongo.bson.from.buffer(buf)  
  24.     print(system.time(p <- mongo.find(mongo,ns,query)))  
  25.  
  26.     print('大于的查詢,查詢一條記錄')  
  27.     print(system.time(p <- mongo.find.one(mongo,ns,list(Friend=list('$gt'=600L)))))  
  28.     print('大于的記錄,查詢多條記錄')  
  29.     print(system.time(cursor <- mongo.find(mongo,ns,list(Friend=list('$gt'=600L)))))  
  30.     mongo.cursor.destroy(cursor)  
  31.  
  32.     print('查詢一條有索引的記錄')  
  33.     print(system.time(p <- mongo.find.one(mongo,ns,list('_id'=3831809L))))  
  34.     print('查詢索引的記錄')  
  35.     print(system.time(p <- mongo.find(mongo,ns,list('_id'=3831809L))))  
  36.  
  37.     print('插入一條記錄')  
  38.     buf <- mongo.bson.buffer.create()  
  39.     mongo.bson.buffer.append(buf,'name',"huangxin")  
  40.     mongo.bson.buffer.append(buf,'age',22L)  
  41.     p <- mongo.bson.from.buffer(buf)  
  42.     print(system.time(mongo.insert(mongo,ns,p)))  
  43.  
  44.     print('找到剛剛插入的記錄')  
  45.     print(system.time(p <- mongo.find.one(mongo,ns,list('name'='huangxin'))))  
  46.     if(!is.null(p))  
  47.     {  
  48.         print('success')  
  49.     }  
  50.  
  51.     print('批量插入')  
  52.  
  53.     buf <- mongo.bson.buffer.create()  
  54.     mongo.bson.buffer.append(buf,'name','huangxin')  
  55.     mongo.bson.buffer.append(buf,'age',22L)  
  56.     p1 <- mongo.bson.from.buffer(buf)  
  57.  
  58.     buf <- mongo.bson.buffer.create()  
  59.     mongo.bson.buffer.append(buf,'name','huangxin')  
  60.     mongo.bson.buffer.append(buf,'age',22L)  
  61.     p2 <- mongo.bson.from.buffer(buf)  
  62.  
  63.     buf <- mongo.bson.buffer.create()  
  64.     mongo.bson.buffer.append(buf,'name','huangxin')  
  65.     mongo.bson.buffer.append(buf,'age',22L)  
  66.     p3 <- mongo.bson.from.buffer(buf)  
  67.  
  68.     print(system.time(mongo.insert.batch(mongo,ns,list(p1,p2,p3))))  
  69.  
  70.     print('找到剛剛批量插入的記錄')  
  71.     print(system.time(cursor <- mongo.find(mongo,ns,list('name'='huangxin'))))  
  72.  
  73.     i <- 0  
  74.     while(mongo.cursor.next(cursor))  
  75.     {  
  76.         i <- i + 1  
  77.     }  
  78.     print(i)  
  79.  
  80.     print('批量更新')  
  81.     print(system.time(mongo.update(mongo,ns,list(name='huangxin'),list('name'= 'kym'))))  
  82.  
  83.     print('查看更新是否成功')  
  84.     print(system.time(p <- mongo.find.one(mongo,ns,list('name'='kym'))))  
  85.     if(!is.null(p))  
  86.     {  
  87.         print('success')  
  88.     }  
  89.  
  90.     print('批量刪除')  
  91.     print(system.time(mongo.remove(mongo,ns,list(name='kym'))))  
  92. }  
  93.  
  94.     print(system.time(p <- mongo.find.one(mongo,ns,list('name'='kym'))))  
  95.     if(!is.null(p))  
  96.     {  
  97.         print('success')  
  98.     }  
 
 
 
  1. [1] "查詢一個(gè)沒有索引的字段,查詢一條" 
  2. user system elapsed  
  3. 0.000 0.000 0.115  
  4. [1] "查詢一個(gè)沒有索引的字段,多條,without buffer" 
  5. user system elapsed  
  6. 0.000 0.000 32.513  
  7. [1] "看看是否有緩存策略" 
  8. user system elapsed  
  9. 0.000 0.000 32.528  
  10. [1] "查詢一個(gè)沒有索引的字段,多條,has buffer" 
  11. user system elapsed  
  12. 0.000 0.000 32.685  
  13. [1] "看看是否有緩存策略" 
  14. user system elapsed  
  15. 0.000 0.000 33.172  
  16. [1] "大于的查詢,查詢一條記錄" 
  17. user system elapsed  
  18. 0.000 0.000 0.001  
  19. [1] "大于的記錄,查詢多條記錄" 
  20. user system elapsed  
  21. 0.000 0.000 0.014  
  22. [1] "查詢一條有索引的記錄" 
  23. user system elapsed  
  24. 0 0 0  
  25. [1] "查詢索引的記錄" 
  26. user system elapsed  
  27. 0 0 0  
  28. [1] "插入一條記錄" 
  29. user system elapsed  
  30. 0 0 0  
  31. [1] "找到剛剛插入的記錄" 
  32. user system elapsed  
  33. 0.00 0.00 35.42  
  34. [1] "success" 
  35. [1] "批量插入" 
  36. user system elapsed  
  37. 0 0 0  
  38. [1] "找到剛剛批量插入的記錄" 
  39. user system elapsed  
  40. 0.004 0.000 35.934  
  41. [1] 7  
  42. [1] "批量更新" 
  43. user system elapsed  
  44. 0.000 0.004 0.000  
  45. [1] "查看更新是否成功" 
  46. user system elapsed  
  47. 0.000 0.000 67.773  
  48. [1] "success" 
  49. [1] "批量刪除" 
  50. user system elapsed  
  51. 0 0 0  
  52. user system elapsed  
  53. 0.000 0.000 91.396 

之前我一直不太理解的就是為什么大于和等于,差距會(huì)差這么多。后來(lái)當(dāng)我在用Python去做同樣的測(cè)試的時(shí)候發(fā)現(xiàn),Python兩者的效率其實(shí)是相同的,所以這就證明了這個(gè)不是MongoDB的問題,而我不相信在數(shù)據(jù)庫(kù)層面,一個(gè)語(yǔ)言的Driver會(huì)有這么大的差別。

后來(lái)我發(fā)現(xiàn)了Python和R的關(guān)于MongoDB Driver的一個(gè)區(qū)別。首先,Python find的時(shí)候,不是將查詢到的數(shù)據(jù)集整體拉回,而是返回一個(gè)cursor,也就是說(shuō),他在執(zhí)行find命令的時(shí)候并不消耗時(shí)間,而如果加上while cursor.next()的時(shí)候,才會(huì)真正地去執(zhí)行這個(gè)查詢。

但是R不一樣,R會(huì)首先考慮數(shù)據(jù)集的大?。ɑ蛘咂渌闆r),然后視情況而定地返回cursor還是將整個(gè)數(shù)據(jù)集整體拉回。如果我們將之前的while mongo.cursor.next(cursor)也算在計(jì)算時(shí)間的時(shí)候,那么我們就會(huì)發(fā)現(xiàn),其實(shí)大于和等于的操作,效率相差并不明顯了.......

在實(shí)際操作中,批量插入是一個(gè)非常常見的應(yīng)用場(chǎng)景,但是對(duì)于R或者M(jìn)atlab語(yǔ)言來(lái)說(shuō),循環(huán)的效率一直是硬傷,所以接下來(lái),我會(huì)嘗試著用apply系列來(lái)解決R語(yǔ)言的循環(huán)問題,如果實(shí)際操作發(fā)現(xiàn)可行,那么接下來(lái)使用mutilab等R的并行計(jì)算庫(kù)來(lái)充分發(fā)揮多核的效率也值得嘗試了!

原文鏈接:http://www.cnblogs.com/kym/archive/2011/09/26/2191501.html


文章標(biāo)題:R對(duì)MongoDB的性能測(cè)試——RMongo
網(wǎng)頁(yè)網(wǎng)址:http://www.5511xx.com/article/dpcgdpg.html