1

我是第一次使用 MongoDB 并尝试对其性能进行计时。我在带有 Windows 7 64 位主机的 VirtualBox Ubuntu 9.10 客户机上运行 ruby​​。MongoDB 位于远程主机上,而不是位于互联网云中某处的我的局域网上。

这是我的代码:

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

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

4

2 回答 2

1

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

所以,我想你有coll类似的东西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 测试可能会对这个问题有所了解......

于 2009-11-22T04:44:37.817 回答
0

简单的答案:这条线没有做你所期望的:

rows = coll.find(some_criteria)

具体来说,它没有与服务器通信。

于 2010-01-16T02:05:18.000 回答