1

私はMongoをセットアップしましたが、すべてうまくいきました。MongoVUE またはシェルを使用すると、すべてが電光石火のように高速になります。

ただし、Windows 用の PHP Mongo ドライバーをインストールした後は、すべてのクエリに 15 秒以上かかります。PHP.net のこの簡単なチュートリアルでさえ、15 秒かかります。

チュートリアルの例:

    $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";

出力:

Calvin and Hobbes XKCD Operation took 15.000731945038 seconds

Windows 7、WAMP、MongoDB 2.0.7、およびGithub の Windows PHP Mongo ドライバー (v1.1.12) を使用しています。

コメントの質問に答えて:

Q: システムで他の PHP コードとその期間をテストしましたか?
A:これは実際には、より大きな Web アプリケーションの一部であり、他のすべては問題なく動作します。役に立つと思われるベンチマークを投稿していただければ幸いです。

Q: Mongo でクエリをプロファイリングしましたか?
A:はい。シェルを介して実行すると、即座に応答が得られます。

Q: これはどの WAMP バージョンですか?
A: WampServer 2.2

Q: これはどの PHP バージョンですか?
A: 5.3.13

Q: mongodb には既にデータが入っていますか?
A: 投稿したベンチマークの前にすべてのデータベースを削除したため、含まれているのは以下のコードによって挿入されたデータだけです。

Q:パソコンのスペック(主にメモリ)は?
A: AMD Phenom II X4 840T 2.9GHz プロセッサ、4GB DDR3 RAM、64 ビット OS

4

2 に答える 2

2

15秒がばかげていることに同意します。チュートリアル コードは、on でも 0.5 秒近く実行されるはずです (その場合) SafeModeSafeMode挿入コードからわかるように、オフにしました。

// 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);

PHPコードがDBからの戻りを待たないことを意味する非同期挿入を行っているため、理論的にはDBへの呼び出しはコードの問題ではありません。

ただし、問題が発生するfind()可能性があるため、そのプロファイルを作成します。

ドライバーが何らかの速度低下を引き起こしている可能性は依然としてありますが、その可能性は非常に低いです。私たちをさらに助けるために:

  • システム上の他の PHP コードとその期間をテストしましたか?
  • Mongo でクエリをプロファイリングしましたか?
  • これはどの WAMP バージョンですか?
  • これはどのPHPバージョンですか?
  • mongod はすでにデータを取得していますか?
  • パソコンのスペック(主にメモリ)は?
于 2012-08-28T14:27:19.460 に答える
1

MongoDBは最初にデータベースファイルを事前に割り当てる必要があるため、新しいデータベースへの挿入にはしばらく時間がかかります。後続の挿入は高速になります。それとは別に、1つのインサートだけでベンチマークを実行することは無意味です。

于 2012-08-28T14:05:45.433 に答える