1

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

该应用程序可在以下位置免费获得www.linkbook.co

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

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

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

我从http://www.yiiframework.com/wiki/123/multiple-database-support-in-yii/中阅读了所有内容以及 Google 可以找到的内容,并且没有一个完整的示例使用 dinamicaly 连接;

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

及时,主数据库中的数据被删除,但在辅助数据库中仍然可用。

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

Yii 人给出了这个例子,但我需要一个参数,从 1 到 N,N=1->infinite,以便切换到正确的 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 需要动态,这是我的问题。

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

我能写的模型,不难,我只是删除一些字段;

这就是我现在拥有的,只是插入,在一个特定的数据库中,db1 aka 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();

db1 and it's params are mentioned in the config file, as the yii developers say;

4

1 回答 1

1

from your example I can guess you have a secondary database connection configured in your app like

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

the point where you need to get the database connection you have this:

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

So, to have multiple database connections you'd need to add them to your database configuration

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

And in your code you can do something like

self::$dbadvert = Yii::app()->getComponent("dbadvert".Yii::app()->request->getQuery('dbid', ''));
于 2012-10-08T13:33:36.393 回答