В последнее время я изучал варианты nosql, доступные для .NET, и MongoDB становится явным победителем в плане доступности и поддержки, поэтому сегодня вечером я решил попробовать. Я скачал версию 1.2.4 (двоичный файл для Windows x64) с сайта mongodb и запустил ее со следующими параметрами:
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 происходит так медленно? Чего мне не хватает?
Редактировать: Все это было на локальной машине, без задержек в сети или чего-либо еще. Загрузка процессора MongoDB составляла около 75% за все время выполнения теста. Кроме того, я провел трассировку в тестовой программе и подтвердил, что 50% затраченного времени процессора ждали, пока MongoDB вернет данные, поэтому это не проблема с производительностью драйвера C #.