簡體   English   中英

無論如何用PHP做MongoDB分片?

[英]Anyway to do MongoDB Sharding in PHP?

我已經開始將MongoDB用於我的PHP項目之一。 在該數據庫中,我嘗試使用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分片嗎?

MongoDB的數據庫命令區分大小寫。 您傳遞的是小寫的命令名稱,而真實的命令是駝峰式的(請參閱: sharding命令 )。 另外, shardCollectionkey參數必須是一個對象。

您的上述代碼的更正版本如下所示:

$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”)。

最后,如果您試圖模仿Shell的功能來配置PHP中的分片,您可能會意識到某些Shell方法不僅僅是數據庫命令。 對於任何一種方法,都可以通過省略括號來獲取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 );
}

對於PHP中的addTagRange()函數需要做什么,這將是一個有用的提示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM