2010-03-17 3 views
7

Я изучал опции nosql, доступные для .NET в последнее время, и MongoDB становится явным победителем с точки зрения доступности и поддержки, поэтому сегодня я решил отложить это. Я скачал версию 1.2.4 (Windows x64 бинарных) с сайта MongoDB и запустил его со следующими параметрами:Производительность Mongodb в Windows

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

Затем я загрузил последнюю версию драйвера MongoDB-Csharp из http://github.com/samus/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? Что мне не хватает?

Редактировать: Все это было на локальной машине, не было задержки в сети или что-то еще. Использование процессора CPU MongoDB составляло около 75% за все время выполнения теста. Кроме того, я запустил трассировку в тестовой программе и подтвердил, что 50% затраченного времени процессора ожидает, что MongoDB вернет данные, поэтому это не проблема производительности с драйвером C#.

ответ

9

Я тоже запустил этот тест. В этом фрагменте кода много ошибок. Создание индекса, например, не выполняется, но исключение проглатывается, поэтому поиск все еще медленный.

Но также имейте в виду, что на большом объекте много «деталей детали». Это иерархия, а не одна запись. В одном документе содержится 280 подробных «записей». Несправедливо сравнивать такой крупный документ с одной строкой из таблицы rdbms, такой как sql-сервер.

0

Это нетипичный. Сколько у вас RAM на этой коробке? Что показывает топ, когда тесты выполняются? На моем ноутбуке я могу легко получить номера намного выше, чем без реального процесса mongod, даже разбивая пот.

Смежные вопросы