Я пытаюсь написать php benchmark
, чтобы сравнить некоторые СУБД, NewSQL и NoSQL. Этот сценарий просто выполняет запросы и измеряет время выполнения.mysql_query, эквивалентный mongoDB
Для 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 :: выполнить? – Kakawait
Выполнение не предназначено для запуска запросов, просто для запуска произвольного javascript. Мне никогда не приходилось это использовать. Лучшее для бенчмаркинга будет иметь реальное приложение или, возможно, тестирование вставки. – Derick
Да, для моего примера я выбрал select query. Но мой тест выполнит много разных типов запросов (select, insert, update и т. Д.) На псевдо-реальном приложении. Но моя проблема - это просто выбор, потому что mongodb использует курсор. – Kakawait