0

我已经开始将 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 分片?

4

1 回答 1

4

MongoDB 的数据库命令区分大小写。您传递的是小写的命令名称,而真正的命令是驼峰式的(请参阅:分片命令)。另外,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字段将解释错误(例如“没有这样的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 );
}

addTagRange()对于PHP 中的函数需要做什么,这将是一个有用的提示。

于 2013-06-24T14:37:46.190 回答