2010-03-17 29 views
7

Tôi đã nghiên cứu các tùy chọn nosql có sẵn cho .NET gần đây và MongoDB đang nổi lên như một người chiến thắng rõ ràng về tính khả dụng và hỗ trợ, vì vậy tối nay tôi quyết định cho nó đi. Tôi đã tải về phiên bản 1.2.4 (Windows x64 nhị phân) từ các trang web MongoDB và chạy nó với các tùy chọn sau:Hiệu suất Mongodb trên Windows

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

sau đó tôi được tải lên các tài xế MongoDB-CSharp mới nhất từ ​​http://github.com/samus/mongodb-csharp và ngay lập tức chạy chương trình benchmark. Sau khi nghe nói về MongoDB "cực kỳ nhanh", tôi khá sốc trước màn trình diễn kém.

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... 

Để bắt đầu, tôi có thể có hiệu suất chèn không theo lô tốt hơn từ SQL Server Express. Điều thực sự đánh tôi, tuy nhiên, là hiệu suất chậm của các truy vấn find_nnnn. Tại sao lấy dữ liệu từ MongoDB quá chậm? Tôi đang thiếu gì?

Chỉnh sửa: Đây là tất cả trên máy cục bộ, không có độ trễ mạng hoặc bất kỳ thứ gì. Việc sử dụng CPU của MongoDB chạy khoảng 75% trong suốt thời gian thử nghiệm đang chạy. Ngoài ra, tôi đã chạy một dấu vết trên chương trình điểm chuẩn và xác nhận rằng 50% thời gian CPU đã dành cho MongoDB để trả về dữ liệu, vì vậy nó không phải là vấn đề hiệu năng với trình điều khiển C#.

Trả lời

9

Tôi cũng đã chạy điểm chuẩn đó. Đoạn mã đó có rất nhiều lỗi. Việc tạo ra các chỉ số ví dụ không thành công nhưng ngoại lệ được nuốt để tìm kiếm vẫn còn chậm.

Nhưng cũng lưu ý rằng đối tượng lớn có rất nhiều "đối tượng chi tiết". Nó là một hệ thống phân cấp, không phải là một bản ghi duy nhất. Một tài liệu có 280 bản ghi 'chi tiết'. Không công bằng khi so sánh tài liệu lớn như vậy với một hàng từ bảng rdbms như máy chủ sql.

0

Đây không phải là điển hình. Bạn có bao nhiêu RAM trong hộp đó? Điều gì hiển thị hàng đầu khi các thử nghiệm đang chạy? Trên máy tính xách tay của tôi, tôi có thể dễ dàng có được con số cao hơn nhiều so với w/o quá trình mongodod thực tế thậm chí phá vỡ một mồ hôi.