特定の Web サイトをスキャン/クロール/監視するアプリを開発しています
アプリは無料で入手できますwww.linkbook.co
今、私がやりたいことを説明します:
ウェブサイト、ウェブサイトで見つかった URL、および各ウェブサイトの URL パターンを格納するメイン DB があります。Web サイトは、彼が割り当てられている Db を認識しており、URL は Web サイト ID を認識しています。
2 GB/DB の制限があるため、セカンダリ DB が必要です。
http://www.yiiframework.com/wiki/123/multiple-database-support-in-yii/と Google が見つけたものをすべて読みましたが、接続を動的に使用した完全な例は 1 つもありません。
したがって、アプリが Web サイトをスキャンするたびに、見つかった各 URL がメイン DB に挿入され、URL が属する Web サイトに割り当てられている DB にも挿入されます。
やがて、メイン DB のデータは削除されますが、セカンダリ DB では引き続き使用できます。
したがって、HOT 情報のみがメインに保存されますが、セカンダリ データベースには保存されたままになります。
Yii の連中はこの例を挙げていますが、適切な DB に切り替えるには、1 から N、N=1-> 無限のパラメーターが必要です。
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 のテーブルはまったく同じではありません。すべてのテーブルのすべてのフィールドは必要なく、一部のテーブルも削除されるため、モデルが必要です。
モデルは私が書くことができます。難しいことではありません。いくつかのフィールドを削除するだけです。
これは私が今持っているもので、特定の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 とそのパラメーターは構成ファイルに記載されています。