无论如何要在 PHP 中进行 MongoDB 分片?
Posted
技术标签:
【中文标题】无论如何要在 PHP 中进行 MongoDB 分片?【英文标题】:Anyway to do MongoDB Sharding in PHP? 【发布时间】: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 脚本,我可以在任何需要分片的地方运行。只需进行服务器配置,我就可以在所有服务器中执行。这就是为什么我要找那个 【参考方案1】:MongoDB 的数据库命令区分大小写。您传递的是小写的命令名称,而真正的命令是驼峰式的(请参阅:sharding commands)。此外,shardCollection
的 key
参数需要是一个对象。
上述代码的更正版本如下所示:
$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()
函数需要做什么。
【讨论】:
以上是关于无论如何要在 PHP 中进行 MongoDB 分片?的主要内容,如果未能解决你的问题,请参考以下文章