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

R對MongoDB的性能測試——RMongo

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

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

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

  1. library(rmongodb)   
  2.  
  3. mongo <- mongo.create()  
  4.  
  5. if(mongo.is.connected(mongo))  
  6. {  
  7.     ns <- 'rivendell.user' 
  8.     print('查詢一個沒有索引的字段,查詢一條')  
  9.     print(system.time(p <- mongo.find.one(mongo,ns,list(Friend=600))))  
  10.     print('查詢一個沒有索引的字段,多條,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('查詢一個沒有索引的字段,多條,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] "查詢一個沒有索引的字段,查詢一條" 
  2. user system elapsed  
  3. 0.000 0.000 0.115  
  4. [1] "查詢一個沒有索引的字段,多條,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] "查詢一個沒有索引的字段,多條,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 

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

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

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

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

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

【編輯推薦】

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

2011-03-03 10:32:07

Mongodb億級數(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性能測試

2013-12-25 10:32:41

MySQL性能測試

2013-05-08 09:31:32

MangoDB

2023-09-18 16:14:35

性能測試開發(fā)

2017-08-10 14:04:25

前端JavaScript函數(shù)性能

2013-11-19 10:08:06

MongoDB

2010-04-20 17:07:46

Oracle 性能

2010-05-04 18:14:50

Oracle 性能工具

2022-11-17 08:00:18

JavaScript錯誤性能

2022-12-15 08:00:38

JavaScript錯誤性能

2011-03-15 16:34:36

Iptables性能

2021-12-29 10:30:15

JMH代碼Java

2021-05-17 18:33:57

戴爾
點贊
收藏

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