2010-03-17 45 views
7

最近我一直在研究可用於.NET的nosql選項,並且MongoDB在可用性和支持方面正在成爲明顯的贏家,因此今晚我決定放棄它。我從網上下載的MongoDB網站1.2.4版(64位的Windows二進制),並用以下選項運行它:Windows上的Mongodb性能

C:\mongodb\bin>mkdir data 
C:\mongodb\bin>mongod -dbpath ./data --cpu --quiet 

我再從http://github.com/samus/mongodb-csharp裝載了最新的MongoDB-CSHARP司機立刻跑了基準測試程序。聽說MongoDB有多麼「驚人」,我對基準表現感到非常震驚。

Starting Tests 
encode (small).........................................320000 00:00:00.0156250 
encode (medium)........................................80000 00:00:00.0625000 
encode (large).........................................1818 00:00:02.7500000 
decode (small).........................................320000 00:00:00.0156250 
decode (medium)........................................160000 00:00:00.0312500 
decode (large).........................................2370 00:00:02.1093750 
insert (small, no index)...............................2176 00:00:02.2968750 
insert (medium, no index)..............................2269 00:00:02.2031250 
insert (large, no index)...............................778 00:00:06.4218750 
insert (small, indexed)................................2051 00:00:02.4375000 
insert (medium, indexed)...............................2133 00:00:02.3437500 
insert (large, indexed)................................835 00:00:05.9843750 
batch insert (small, no index).........................53333 00:00:00.0937500 
batch insert (medium, no index)........................26666 00:00:00.1875000 
batch insert (large, no index).........................1114 00:00:04.4843750 
find_one (small, no index).............................350 00:00:14.2812500 
find_one (medium, no index)............................204 00:00:24.4687500 
find_one (large, no index).............................135 00:00:37.0156250 
find_one (small, indexed)..............................352 00:00:14.1718750 
find_one (medium, indexed).............................184 00:00:27.0937500 
find_one (large, indexed)..............................128 00:00:38.9062500 
find (small, no index).................................516 00:00:09.6718750 
find (medium, no index)................................316 00:00:15.7812500 
find (large, no index).................................216 00:00:23.0468750 
find (small, indexed)..................................532 00:00:09.3906250 
find (medium, indexed).................................346 00:00:14.4375000 
find (large, indexed)..................................212 00:00:23.5468750 
find range (small, indexed)............................440 00:00:11.3593750 
find range (medium, indexed)...........................294 00:00:16.9531250 
find range (large, indexed)............................199 00:00:25.0625000 
Press any key to continue... 

對於初學者,我可以從SQL Server Express中獲得更好的非批量插入性能。但是,真正令我感到震驚的是find_nnnn查詢的性能下降。爲什麼從MongoDB檢索數據這麼慢?我錯過了什麼?

編輯:這是所有在本地機器上,沒有網絡延遲或任何東西。測試運行期間,MongoDB的CPU使用率約爲75%。另外,我在基準測試程序中運行了一個跟蹤,並確認所花費的CPU時間的50%等待MongoDB返回數據,因此這不是C#驅動程序的性能問題。

回答

9

我也運行過那個基準。這段代碼有很多錯誤。索引創建失敗,但異常被吞噬,因此搜索仍然很慢。

但也要注意大對象有很多「細節對象」。它是一個層次結構,而不是單個記錄。一個文件有280個細節「記錄」。將這樣的大文檔與像sql server這樣的rdbms表中的一行進行比較是不公平的。

0

這是非典型的。你在這個盒子上有多少內存?測試正在運行時頂部會顯示什麼?在我的筆記本電腦上,我可以很容易地得到比這個w/o實際的mongod過程更高的數字,甚至可以打出汗水。