我試圖編寫一個php benchmark
來比較一些RDBMS,NewSQL和NoSQL。 該腳本只執行查詢並測量執行時間。相當於mongoDB的mysql_query
對於類似MySQL的,我簡單地使用:
$start = microtime(true);
$result = mysql_query($SQL);
$end = microtime(true);
我沒有爲我的基準獲取數據。
但隨着MongoDB中的PHP,功能find()
返回cursor
$start = microtime(true);
$collection = $this->_db->selectCollection($collection);
$cursor = $collection->find($query);
$end = microtime(true);
是否$cursor
和$result
被當量(時間/數據費用)?遊標不加載數據,我必須迭代遊標才能加載數據。那爲什麼執行MySQL和mongoDB之間的查詢的時間是如此不同或只是mongoDB岩石...
我想知道它是否會更公平我的代碼更改爲:
$start = microtime(true);
$result = mysql_query($SQL);
while ($row = mysql_fetch_row($result)) {}
$end = microtime(true);
和
$start = microtime(true);
$cursor = $collection->find($query);
foreach ($cursor as $doc) {}
$end = microtime(true);
最後,是這樣說,每次在MongoDB的光標數據迭代時間都是直接從MongoDB的服務器上獲取,而不是從計算機內存?
好的,謝謝你是對的。但你認爲我的做法很好嗎?或者還有另一個我沒有想到的解決方案?例如:使用MongoDB :: execute? – Kakawait 2012-04-23 12:20:14
執行並不意味着運行查詢,只是爲了運行一些任意的javascript。到目前爲止,我從來沒有必要使用它。基準測試最好的方法是獲得真正的應用程序,或者進行插入測試。 – Derick 2012-04-23 12:33:44
是的,對於我的示例,我選擇了select查詢..但是,我的基準測試將在僞真實應用程序上執行許多不同類型的查詢(選擇,插入,更新等)。但我的問題是關於選擇,因爲mongodb使用光標。 – Kakawait 2012-04-23 12:55:30