我有一个包含多个数据库的php页面。我一直在读,多个数据库都很糟糕,你应该把它们合二为一,但我想把事情分开,以便更好地组织。
所以我想说我会留在多个数据库中。那不好吗?现在我看到了mysql_max_connections的问题。所以我正在寻找用于获取连接的单例方法。但单例类似乎只适用于一个数据库连接。是这样的吗?我是否需要为每个数据库创建一个单独的单例类?
澄清:我预计数据库会变得相当大。我已经在一个数据库上有几百个表,并且添加了更多内容。我听说你不想在任何特定的数据库中有超过几千个表。也许最好的答案是以某种方式将所有内容组合在一起,但这需要进行大修,所以我想坚持使用多个数据库。我只是想知道为多个数据库组织连接的最有效方法是什么。
答案 0 :(得分:1)
典型的单身人士看起来像:
class Singleton{
private static $instance;
private function __construct(){}
private function __clone(){}
public function Instance(){
if(!self::$instance){
self::$instance = new self;
}
return self::$instance;
}
}
但你可以通过拥有多个实例来扩展它,但彼此略有不同:
class MultiSingleton{
private static $instance = array();
private function __construct(){}
private function __clone(){}
public function Instance($index = 'default'){
if(!isset(self::$instance[$index])){
self::$instance[$index] = new MultiSingleton($index);
}
return self::$instance[$index];
}
}
这样你可以有一个类来统治它们;)并且仍然遵循单例模式
答案 1 :(得分:0)
使用多个数据库相当容易。 mysql_connect()返回一个Resource值,用于标识连接。您可以将该值添加到,例如,mysql_query():
$db1 = mysql_connect("localhost");
$db2 = mysql_connect("google.com");
$query1 = mysql_query("select ....", $db1);
$query2 = mysql_query("select ....", $db2);
答案 2 :(得分:0)
我不确定我是否明白这个问题,你的意思是“所以我正在寻找单身方法来获取连接”,我知道单身是什么但是我真的看不到你打算做什么。更多,我没有看到mysql_max_connections与所有这些有什么关系,它与你提出的问题毫无关系。
我可能建议您为所有数据库创建一个公共接口,比如名为“DB”的包装类(如果需要,作为单例),并定义一些查询数据库的方法,以便被调用者不会必须“知道”从哪个DB获取数据。
但所有这一切似乎毫无意义......
编辑:(另见评论)
1)要显着减少连接数,请使用mysql_pconnect()。但仔细阅读文档,我知道有一些问题。
2)通用代码。这需要大量的工作,但这是值得的。我这样做:
如果将来你会删除mysql的其他任何内容,它将在不改变被调用者代码的情况下工作。如果合并两个数据库,则相同。
编辑(2):哦,好像我终于理解了你的要求。您的数据库(或更好的架构)不止一个,但DBMS只是在localhost上运行的MySQL的一个实例?如果是这样的话,您可以简单地编辑您的查询。 “SELECT * FROM database.table WHERE ...”