2009-11-21 7 views
1

Я использую MongoDB в первый раз и пытаюсь выполнить его работу. Я запускаю ruby ​​на гостевом компьютере VirtualBox Ubuntu 9.10 с 64-разрядным хостом Windows 7. MongoDB находится на удаленном хосте, а не на моем lan buit где-то в облаке Интернета.Как мои тайминги «Time.now» Ruby будут такими низкими, когда мои «пинговые» тайминги будут такими высокими?

Вот мой код:

time1 = Time.now 
rows = coll.find(some_criteria) 
puts ((Time.now - time1) * 1000).to_s 

Проблема заключается в том, что время настолько мал, я не верю, что я вижу. Я вижу времена около 50, 100, 200 MICRO секунд, в то время как время ping между моим компьютером и удаленным компьютером монго составляет около 40 MILLI секунд. Я не понимаю единицы? Как мои тайминги могут быть настолько низкими, когда пинг настолько высок?

+0

Вам необходимо исправить свое форматирование. –

+0

40 миллисекунд хорошо – ADAM

ответ

1

Вы можете запустить пакетный сниффер, запустить irb, а затем выдать несколько тестовых команд по одной строке за раз, но вы, похоже, точно проанализировали его динамическое поведение.

Итак, у вас есть coll с чем-то вроде coll = db.collection_names? И я полагаю, coll должен быть Перечислимый?

Если это так, в этом вызове ничего не должно произойти, кроме возврата объекта с помощью метода each. Возможно, на самом деле ничего не происходит, пока вы не попросите что-нибудь отПеречислимый.

Вы можете попробовать:

time1 = Time.now 
rows = coll.find(some_criteria) 
o = rows.first 
puts ((Time.now - time1) * 1000).to_s 

Это не обязательно будет принимать больше. Возможно, что работа была выполнена при вызове db.collection_names. IRB тест, из верхней части, может пролить свет на вопрос ...

+0

Я отправился на удаленный хост, наблюдая за подробным выводом MongoDB, и с этого выхода I * KNOW * происходит кругосветное путешествие по сети. Итак, я просто озадачен разницей в времени ping против времени, которое рубиновые меры. –

+1

Он может просто вернуть 'Enumerable', а также запустить сокет op, для которого ему не нужен синхронный результат. Это запустит поездку туда и обратно, а также немедленно. – DigitalRoss

0

Простой ответ: эта строка не делает то, что вы ожидаете:

rows = coll.find(some_criteria) 

конкретно, это не связывается с сервером ,