Ustawiam Mongo i wszystko działa świetnie. Kiedy używam MongoVUE lub powłoki, wszystko jest szybkie jak błyskawica.

Jednak po zainstalowaniu sterowników PHP Mongo dla systemu Windows każde zapytanie trwa ponad 15 sekund. Nawet ten prosty tutorial z PHP.net zajmuje 15 sekund.

Przykład samouczka:

    $time_start = microtime(true);
    // connect
    $m = new Mongo();

    // select a database
    $db = $m->comedy;

    // select a collection (analogous to a relational database's table)
    $collection = $db->cartoons;

    // add a record
    $obj = array( "title" => "Calvin and Hobbes", "author" => "Bill Watterson" );
    $collection->insert($obj);

    // add another record, with a different "shape"
    $obj = array( "title" => "XKCD", "online" => true );
    $collection->insert($obj);

    // find everything in the collection
    $cursor = $collection->find();

    // iterate through the results
    foreach ($cursor as $obj) {
        echo $obj["title"] . "\n";
    }
    $time_end = microtime(true);
    $time = $time_end - $time_start;

    echo "\nOperation took $time seconds\n";

Wynik:

Calvin and Hobbes XKCD Operation took 15.000731945038 seconds

Używam Windows 7, WAMP, MongoDB 2.0.7 i sterowników Windows PHP Mongo (v1.1.12) z Github.

W odpowiedzi na pytanie w komentarzach:

P: Czy przetestowałeś inny kod PHP w swoim systemie i czas jego trwania?
O: W rzeczywistości jest to mały fragment większej aplikacji internetowej i wszystko inne działa dobrze. Chętnie opublikuję wszelkie testy porównawcze, które według was mogą być przydatne.

P: Czy sprofilowałeś zapytanie w Mongo?
O: Tak. Jeśli przepuszczę go przez powłokę, natychmiast otrzyma odpowiedź.

P: Jaka to wersja WAMP?
O: WampServer 2.2

P: Jaka to wersja PHP?
O: 5.3.13

P: Czy mongodb ma już w sobie dane?
O: Wszystkie moje bazy danych zostały usunięte przed opublikowaniem testu porównawczego, więc zawiera tylko dane wstawiane przez poniższy kod.

P: Jaka jest specyfikacja komputera (głównie pamięci)?
O: Procesor AMD Phenom II X4 840T 2,9 GHz, 4 GB pamięci RAM DDR3, 64-bitowy system operacyjny

1
VPel 28 sierpień 2012, 17:56

2 odpowiedzi

Najlepsza odpowiedź

Zgadzam się, że 15 sekund jest śmieszne. Kod samouczka powinien zbliżać się do 0,5 sekundy (jeśli to), nawet przy włączonym SafeMode. Masz SafeMode wyłączony, jak widać po kodzie wstawiania:

// add a record
$obj = array( "title" => "Calvin and Hobbes", "author" => "Bill Watterson" );
$collection->insert($obj);

// add another record, with a different "shape"
$obj = array( "title" => "XKCD", "online" => true );
$collection->insert($obj);

Robisz asynchroniczne wstawianie, co oznacza, że ​​kod PHP nie czeka na powrót z bazy danych, więc teoretycznie wywołanie bazy danych nie powinno stanowić problemu w twoim kodzie.

find() może jednak powodować problemy, więc opiszę to.

Nadal jest możliwe, że kierowca powoduje jakieś spowolnienie, ale jest to bardzo mało prawdopodobne. Aby pomóc nam dalej:

  • Czy testowałeś inny kod PHP w swoim systemie i czas jego trwania?
  • Czy sprofilowałeś zapytanie w Mongo?
  • Jaka to wersja WAMP?
  • Jaka to wersja PHP?
  • Czy mongod ma już w nim dane?
  • Jaka jest specyfikacja komputera (głównie pamięci)?
2
lloiacono 28 marzec 2018, 09:59

Wstawienie do nowej bazy danych zajmie trochę czasu, ponieważ MongoDB musi najpierw wstępnie przydzielić pliki bazy danych. Kolejne wstawki będą szybkie. Poza tym: wykonanie testu porównawczego z dokładnie jedną wstawką nie ma sensu.

1
Kev 1 wrzesień 2012, 06:34