繁体   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