当我的“平”时机如此之高的时候,我的Ruby“Time.now”时间怎么会这么低?

我第一次使用MongoDB并试图计时。 我正在使用Windows 7 64位主机在VirtualBox Ubuntu 9.10 guest上运行ruby。 MongoDB在远程主机上,而不是在互联网云中的某处。

这是我的代码:

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

问题是,时间如此之短,我不相信我所看到的。 我看到的时间大约是50,100,200微秒,而我的电脑和远程mongo电脑之间的ping时间大约是40毫秒。 我误解了单位吗? 平时这么高,我的时间怎么会这么低呢?

你可以启动一个数据包嗅探器,启动irb,然后一次一行地发出一些测试命令,但是你似乎已经准确地分析了它的动态行为。

所以,我想你有类似coll = db.collection_names东西? 我想coll必须是一个Enumerable

如果是这样的话,除了用each方法返回一个对象外,在这个调用中什么都不需要发生。 也许没有任何事情发生,直到你 Enumerable中请求什么。

你可以尝试:

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

这不一定需要更长的时间。 当db.collection_names被调用时,可能工作已经完成。 从顶端来看,irb测试可能会对这个问题有所了解。

简单的回答:这行不是你所期望的:

 rows = coll.find(some_criteria) 

特别是,它不与服务器通信。