成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

R對MongoDB的性能測試——RMongo

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

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

測試環(huán)境是8核,64位機(jī)。 用于測試的庫是一個(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ì)差這么多。后來當(dāng)我在用Python去做同樣的測試的時(shí)候發(fā)現(xiàn),Python兩者的效率其實(shí)是相同的,所以這就證明了這個(gè)不是MongoDB的問題,而我不相信在數(shù)據(jù)庫層面,一個(gè)語言的Driver會(huì)有這么大的差別。

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

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

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

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

【編輯推薦】

  1. MongoDB之父:MongoDB勝過BigTable
  2. 主流NoSQL數(shù)據(jù)庫全方位評測之MongoDB
  3. 教你如何利用MySQL學(xué)習(xí)MongoDB
  4. 在Windows環(huán)境下MongoDB搭建和簡單操作
  5. 教你五步優(yōu)化你的MongoDB
責(zé)任編輯:艾婧 來源: 飛林沙的博客
相關(guān)推薦

2011-03-03 10:32:07

Mongodb億級(jí)數(shù)據(jù)量

2021-07-08 14:59:05

JMHMongodb數(shù)據(jù)

2011-02-23 11:18:48

MongoDBMySQL性能測試

2019-01-11 17:47:54

華為云

2015-07-20 16:41:16

MongoDBJavaScript

2024-01-22 09:41:05

MongoDB索引

2023-06-21 07:49:08

R9-7945HX性能處理器

2011-07-28 09:08:14

MongoDB性能測試

2017-08-10 14:04:25

前端JavaScript函數(shù)性能

2013-05-08 09:31:32

MangoDB

2013-12-25 10:32:41

MySQL性能測試

2023-09-18 16:14:35

性能測試開發(fā)

2022-12-15 08:00:38

JavaScript錯(cuò)誤性能

2010-05-04 18:14:50

Oracle 性能工具

2022-11-17 08:00:18

JavaScript錯(cuò)誤性能

2010-04-20 17:07:46

Oracle 性能

2013-11-19 10:08:06

MongoDB

2011-03-15 16:34:36

Iptables性能

2021-12-29 10:30:15

JMH代碼Java

2011-07-04 17:38:47

性能測試
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 午夜在线免费观看 | 欧美无乱码久久久免费午夜一区 | 波波电影院一区二区三区 | 日韩电影免费在线观看中文字幕 | 在线观看中文字幕 | 欧美精选一区二区 | 浮生影院免费观看中文版 | 天天弄天天操 | 国产精品日韩欧美一区二区三区 | 亚洲精品久久久一区二区三区 | 在线观看亚洲 | 久久狼人天堂 | 日日噜噜噜夜夜爽爽狠狠视频, | avtt国产 | 精品日韩 | 91视频三区 | 91精品国产91久久久久久最新 | 午夜三区 | 国产欧美一区二区三区日本久久久 | 91视频在线观看免费 | 羞羞视频在线观看 | 久久久久无码国产精品一区 | 91精品在线播放 | 欧美一区二区三区在线视频 | 精品在线看 | 成人羞羞国产免费视频 | 精品久久久久久久久久久久 | 久久国产欧美日韩精品 | 免费成年网站 | 亚洲成人精品一区 | 日本成人中文字幕 | 99亚洲国产精品 | 国产精品久久久亚洲 | 婷婷久久五月 | 欧美精品欧美精品系列 | 欧美日韩在线成人 | 91在线视频观看免费 | 伊人在线 | 欧美国产中文字幕 | 国产精品乱码一区二三区小蝌蚪 | 国产一区二区电影 |