0

PHP プロジェクトの 1 つに MongoDB を使い始めました。そのデータベースでは、MongoDB シャーディングの概念を使用しようとしています。以下のリンクを取得して試してみましたが、

MongoDB シャーディングの例

それはうまくいっています。しかし、問題は、上記の例では、すべてがコマンド プロンプトで行われることです。しかし、私はPHPですべてをやろうとしています。PHPで例を取得できません。

これまでのところ、私はこれらのコードから始めました。

    $connection =   new Mongo();
    $db     =   $connection->selectDB('TestDB');
    $db     =   $connection->TestDB;

    $connection->selectDB('admin')->command(array('addshard'=>'host:port'));
    $connection->selectDB('admin')->command(array('enablesharding'=>'TestDB'));
    $connection->selectDB('admin')->command(array('shardcollection'=>'TestDB.large', 'key' => '_id'));

機能していません。また、PHPでシャードサーバーと構成データベースを設定する方法がわかりません。

PHP で MongoDB シャーディングを行う他の方法はありますか?

4

1 に答える 1

4

MongoDB のデータベース コマンドでは、大文字と小文字が区別されます。小文字のコマンド名を渡していましたが、実際のコマンドはキャメルケースです (参照: sharding commands )。さらに、 のkeyパラメーターはshardCollectionオブジェクトである必要があります。

上記のコードの修正版は次のようになります。

$connection->selectDB('admin')->command(array('addShard'=>'host:port'));
$connection->selectDB('admin')->command(array('enableSharding'=>'TestDB'));
$connection->selectDB('admin')->command(array('shardCollection'=>'TestDB.large', 'key' => array('_id' => 1)));

さらに、コマンドの結果を調べて、これが機能しなかった理由を特定できたはずです。フィールドはokゼロになり、errmsgフィールドはエラーを説明します (たとえば、「no such cmd: addshard」)。

最後に、シェルの機能を模倣して PHP でシャーディングを構成しようとしている場合、シェル メソッドの一部が単なるデータベース コマンド以上のものであることに気付くかもしれません。これらのメソッドのいずれについても、括弧を省略して JS ソースを取得できます。例えば:

> sh.addTagRange
function ( ns, min, max, tag ) {
    var config = db.getSisterDB( "config" );
    config.tags.update( {_id: { ns : ns , min : min } } ,
            {_id: { ns : ns , min : min }, ns : ns , min : min , max : max , tag : tag } ,
            true );
    sh._checkLastError( config );
}

addTagRange()これは、PHPの関数が何をする必要があるかについての有用なヒントになります。

于 2013-06-24T14:37:46.190 に答える