R對MongoDB的效能測試 RMongo

2022-01-31 13:03:15 字數 3537 閱讀 2313

在九月初的時候,rmongodb正式發布了修訂版本,這也就意味著,從事數值計算的語言也可以於nosql產品相接軌了,但是鑑於我身邊並沒有公司真的在使用r和mongodb的結合,所以在效率問題上,我們也不敢掉以輕心,所以就做了乙個這樣的測試。

測試環境是8核,64位機。 用於測試的庫是乙個未經sharding,大概30g左右的collection。用於儲存使用者的喜好資訊,標籤資訊等資料。 

1 library(rmongodb)

23 mongo <- mongo.create()45

if(mongo.is.connected(mongo))

6 50

51print('

批量插入

')52

name

','huangxin

age',22l)

56     p1 <- mongo.bson.from.buffer(buf)

57name

','huangxin

age',22l)

61     p2 <- mongo.bson.from.buffer(buf)

62name

','huangxin

age',22l)

66     p3 <- mongo.bson.from.buffer(buf)

6768

print(system.time(mongo.insert.batch(mongo,ns,list(p1,p2,p3))))

6970

print('

找到剛剛批量插入的記錄

')71

print(system.time(cursor <- mongo.find(mongo,ns,list('

name

'='huangxin

'))))

7273     i <- 0

74while(mongo.cursor.next(cursor))

75     

78print(i)

7980

print('

批量更新

')81

print(system.time(mongo.update(mongo,ns,list(name='

huangxin

'),list('

name

'= '

kym'))))

8283

print('

檢視更新是否成功

')84

print(system.time(p <- mongo.find.one(mongo,ns,list('

name

'='kym

'))))

85if(!is.null(p))

86     

8990

print('

批量刪除

')91

print(system.time(mongo.remove(mongo,ns,list(name='

kym'))))

92 }

9394

print(system.time(p <- mongo.find.one(mongo,ns,list('

name

'='kym

'))))

95if(!is.null(p))

96      

[1] "

查詢乙個沒有索引的字段,查詢一條

"user system elapsed

0.000 0.000 0.115

[1] "

查詢乙個沒有索引的字段,多條,without buffer

"user system elapsed

0.000 0.000 32.513

[1] "

看看是否有快取策略

"user system elapsed

0.000 0.000 32.528

[1] "

查詢乙個沒有索引的字段,多條,has buffer

"user system elapsed

0.000 0.000 32.685

[1] "

看看是否有快取策略

"user system elapsed

0.000 0.000 33.172

[1] "

大於的查詢,查詢一條記錄

"user system elapsed

0.000 0.000 0.001

[1] "

大於的記錄,查詢多條記錄

"user system elapsed

0.000 0.000 0.014

[1] "

查詢一條有索引的記錄

"user system elapsed

0 0 0

[1] "

查詢索引的記錄

"user system elapsed

0 0 0

[1] "

插入一條記錄

"user system elapsed

0 0 0

[1] "

找到剛剛插入的記錄

"user system elapsed

0.00 0.00 35.42

[1] "

success

"[1] "

批量插入

"user system elapsed

0 0 0

[1] "

找到剛剛批量插入的記錄

"user system elapsed

0.004 0.000 35.934

[1] 7

[1] "

批量更新

"user system elapsed

0.000 0.004 0.000

[1] "

檢視更新是否成功

"user system elapsed

0.000 0.000 67.773

[1] "

success

"[1] "

批量刪除

"user system elapsed

0 0 0

user system elapsed

0.000 0.000 91.396

之前我一直不太理解的就是為什麼大於和等於,差距會差這麼多。後來當我在用python去做同樣的測試的時候發現,python兩者的效率其實是相同的,所以這就證明了這個不是mongodb的問題,而我不相信在資料庫層面,乙個語言的driver會有這麼大的差別。

後來我發現了python和r的關於mongodb driver的乙個區別。首先,python find的時候,不是將查詢到的資料集整體拉回,而是返回乙個cursor,也就是說,他在執行find命令的時候並不消耗時間,而如果加上while cursor.next()的時候,才會真正地去執行這個查詢。

但是r不一樣,r會首先考慮資料集的大小(或者其他情況),然後視情況而定地返回cursor還是將整個資料集整體拉回。如果我們將之前的while mongo.cursor.next(cursor)也算在計算時間的時候,那麼我們就會發現,其實大於和等於的操作,效率相差並不明顯了.......

R對MongoDB的效能測試 RMongo

在九月初的時候,rmongodb正式發布了修訂版本,這也就意味著,從事數值計算的語言也可以於nosql產品相接軌了,但是鑑於我身邊並沒有公司真的在使用r和mongodb的結合,所以在效率問題上,我們也不敢掉以輕心,所以就做了乙個這樣的測試。測試環境是8核,64位機。用於測試的庫是乙個未經shardi...

R語言 理解R效能

通過了解限制r計算效能的因素,從而更好的利用起r的效能,影響r的因素 cpu,ram,磁碟i o,演算法。所以,當資料量小時,計算複雜度高,會受到cpu影響。資料量大時,會受到磁碟i o還有ram的影響。r是解釋型語句,即每次執行r程式的時候,r 需要重新解釋翻譯成機器 即使 不變。因為每次執行時,...

R 測試向量相等

假設我們要測試兩個向量是否相等,使用 的樸素方法將不可行 x 1 3 y c 1,3,4 x y 1 true false false 發生什麼了?問題在於,我們處理的是向量化。與r中其他運算子一樣,是乙個函式。事實上,是乙個向量化的函式。語句x y是將函式 應用到x和y的每一組元素上,得到乙個布林...