【问题标题】:Anyway to do MongoDB Sharding in PHP?无论如何要在 PHP 中进行 MongoDB 分片?
【发布时间】:2013-06-16 16:17:49
【问题描述】:

我已经开始在我的一个 PHP 项目中使用 MongoDB。在那个数据库中,我正在尝试使用 MongoDB 分片概念。我得到了以下链接并尝试了,

MongoDB Sharding Example

它运行良好。但问题是,在上面的例子中,一切都是在命令提示符下完成的。但我正在尝试用 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 分片吗?

【问题讨论】:

  • 您可以在 PHP 中将数据库命令发送到 mongodb,但为什么要在 PHP 中执行呢?分片是一个复杂的过程,需要在 mongodb shell 和服务器本身的管理方面进行大量工作,我认为你问这个问题是看错了
  • @Sammaye 感谢您的回复。问题是,我们有很多服务器,比如测试、演示和生产。如果我有一个 php 脚本,我可以在任何需要分片的地方运行。只需进行服务器配置,我就可以在所有服务器中执行。这就是为什么我要找那个

标签: php mongodb bigdata nosql


【解决方案1】:

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

最后,如果您尝试模仿 shell 的功能来在 PHP 中配置分片,您可能会意识到某些 shell methods 不仅仅是数据库命令。对于这些方法中的任何一种,您都可以通过省略括号来获取 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() 函数需要做什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-03
    • 2020-02-21
    相关资源
    最近更新 更多