測試目標:mongodb gridfsjava
1 海量小文件(1K-50K)的插入速度測試mongodb
2 億級文件存儲的讀取速度測試測試
3 瞭解mongodb擴展對存儲容量、讀寫速度的影響優化
4 mongodb的穩定性和缺陷ui
測試一:單節點測試(4核 * 32G內存)官方Clientspa
每秒插入速度:8000條(4000個1K文件)server
單節點保存1億個文件後,硬盤寫滿了內存
測試二:shard集羣測試一,每一個Replica Set中member數量爲3,總共2個集羣 本身重寫Client同步
shard1: dxud3c006 + dxud3c007 + dxud3c008io
shard2: dxud3c009 + dxud3c010 + dxud3c011
config server: dxud3c006 + dxud3c009 + dxud3c005
mongos: dxud3c005(4個)
每秒插入速度:3500條(1750個1K文件)
平均每一個shard插入速度:1500-2000條(750-1000個1K文件)
測試三:shard集羣測試二,每一個Replica Set中member數量爲2,總共3個集羣 本身重寫Client
shard1: dxud3c006 + dxud3c007
shard2: dxud3c008 + dxud3c009
shard3: dxud3c010 + dxud3c011
config server: dxud3c006 + dxud3c008 + dxud3c010
mongos: dxud3c005(4個)
每秒插入速度:6000條(2000個1K文件)
平均每一個shard插入速度:1800-2300條(900-1150個1K文件)
說明:
1 官方的java-client中沒有對shard集羣模式作任何優化
2 針對本項目的場景(按ID存取文件)對java-client進行優化:
a 建立collection(files,chunks)時,指定使用_id做爲files的shard key,使用files_id做爲chunks的shard key
b 建立files的collection時,使用本身生成的uuid做爲_id,以免插入時,壓力集中在一個shard
c 建立collection(files,chunks)後,手動建立15個chunks,min~1,1~2,2~3......f~max,而且手動將chunks移動到不一樣的shard上面去
d 因爲項目的性質問題,對數據的完整性和一致性要求很高,致使insert時指定使用REPLICAS_SAFE模式
測試過程當中發現的問題:
1 mongodb的集羣模式感受不是很穩定,常出現RS102的問題:指primary節點與secondary節點同步差距過大,而致使secondary節點變爲不可用狀態。須要手動將primary的數據文件到secondary上(當數據文件很大時,很是慢很是慢)
2 mongodb在插入時的速度不是很穩定,常常會出現3-5秒沒有插入一條數據的狀況
讀取速度的測試稍後放出