2012-10-16 40 views
2

MongoDb有沒有像MySql的SELECT SLEEP(5);模擬mongodb中的慢查詢?

我可以看到一些內部睡眠功能,可以暫停整個服務器,但我只需暫停當前查詢。

免責聲明:只是爲了測試目的

+0

你想模擬慢速查詢嗎? – Gabe

+0

是的,是的... –

+0

我不認爲這樣的東西存在atm,至少我從來沒有聽說過它。我想你可以使用'$ where'和一些鬼鬼祟祟的編碼來讓JS線程休眠,但是隻能用於測試。然而,這將導致發現每次文檔迭代的睡眠或「超時()」。 – Sammaye

回答

5

您可以使用$where operator來調用sleep()。這應該適用於任何語言或ORM/ODM。例如,在Mongoid你可以這樣做:

Model.where(:$where => "sleep(100) || true").count 

調爲集合中的文檔數量睡眠值(它會在每一個延遲)。這對數據庫服務器來說是相當可怕的事情,所以只能用於測試,並且永遠不會(在生產服務器上)。

+0

在我的問題我提到_sleep_將暫停整個服務器,而不僅僅是一個單一的查詢 –

+0

這不會暫停整個服務器(其他查詢仍然會運行在每個文檔上的睡眠調用之間),但它確實會讓它變慢。 –

0

mongo殼可以做睡眠(MS),運行查詢前5秒,如睡眠:

> sleep(5000); db.collection.find(..); 

這不暫停當前查詢,但會在繼續執行下一條語句(相當於MySQL中的select sleep(5))之前,在該連接上暫停執行特定的毫秒數。

3

您可以使用$where運營商作爲code_monkey_steve說,但請確保您使用mongo version >= 2.4。在該版本之前,不能在同一臺服務器上並行運行javascript。 sleep命令是javascript,所以它顯然會阻止您可能製作的其他javascript查詢。