Yii PHP:用于读/写数据的动态数据库连接



我正在开发一个扫描/爬网/监控某些网站的应用程序

该应用程序在www.linkbook.co免费提供

现在,我将解释我想做什么:

我有一个主数据库,它存储网站、网站上的url和每个网站的url模式;网站知道他被分配到的Db,url知道网站id;

因为我有2GB/DB的限制,所以我需要辅助数据库。

我阅读了所有http://www.yiiframework.com/wiki/123/multiple-database-support-in-yii/以及谷歌能找到什么,而且没有一个完整的例子使用这种连接;

因此,每次我的应用程序扫描网站时,找到的每个url都会插入到主数据库中,也会插入到已分配给该url所属网站的数据库中。

随着时间的推移,主数据库中的数据会被删除,但它在辅助数据库中仍然可用。

因此,只有HOT信息存储在主数据库中,但它们仍保存在辅助数据库的中

Yii的人给出了这个例子,但我需要一个参数,从1到N,N=1->无限,以便切换到正确的DB。

class MyActiveRecord extends CActiveRecord {
...
private static $dbadvert = null;
protected static function getAdvertDbConnection()
{
if (self::$dbadvert !== null)
return self::$dbadvert;
else
{
self::$dbadvert = Yii::app()->dbadvert;
if (self::$dbadvert instanceof CDbConnection)
{
self::$dbadvert->setActive(true);
return self::$dbadvert;
}
else
throw new CDbException(Yii::t('yii','Active Record requires a "db" CDbConnection application component.'));
}
}
...

$dbadvert需要是普通的,这是我的问题。

此外,辅助数据库中的表也不完全相同,因为我不需要所有表中的所有字段,有些表也会被删除,所以我需要一个模型;

模型我可以写,它不难,我只会删除一些字段;

这就是我现在所拥有的,只是插入到一个特定的DB中,db1,也就是linkbookco1

$command = Yii::app()->db1->createCommand("INSERT INTO `url` (
`id` ,
`website_id` ,
`link` ,
`name` ,
`created` ,
`instance_scanner_id` ,
`status`
)
VALUES (
NULL ,  '".($model_url->website_id)."',  '".($model_url->link)."',  '".($model_url->name)."',  '".($model_url->created)."',  '".($model_url->instance_scanner_id)."',  '".($model_url->status)."'
);
");
$command->query();

正如yii开发人员所说,配置文件中提到了db1及其参数;

根据您的示例,我可以猜测您的应用程序中配置了一个辅助数据库连接,如

'dbadvert' => array(
'class' => 'CDbConnection',
...
)

你需要获得数据库连接的点是:

self::$dbadvert = Yii::app()->dbadvert;

因此,要有多个数据库连接,您需要将它们添加到数据库配置中

'dbadvert1' => array(
'class' => 'CDbConnection',
...
)
'dbadvert2' => array(
'class' => 'CDbConnection',
...
)

在你的代码中,你可以做一些类似的事情

self::$dbadvert = Yii::app()->getComponent("dbadvert".Yii::app()->request->getQuery('dbid', ''));