yii2/php:为xdb和mysql抽象数据库访问

cvxl0en2  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(472)

在我的yii2/php项目中,我需要集成两个数据库:
mysql的元数据,网页界面。。。
用于测量数据的influxdb(时间序列数据的重载)
为了降低复杂性,我只想从mysql开始,稍后再添加xdb。
我的想法是为这两个数据库创建一个抽象/超类(仅用于度量数据),它允许使用mysql进行实现和执行测试,并在项目的后期使用influxdb实现加速。
抽象应具有以下方法:
数据库连接管理
写入数据
读取数据(原始数据、聚合)
既然我还不是XDBMaven:这个体系结构有意义吗?或者数据模型和方案根本不同,所以抽象就毫无价值了?有没有值得学习的项目?

ui7jx7zq

ui7jx7zq1#

我不确定把mysql和xdb放在同一个模子里是否有意义。
更好的方法是,首先使用mysql为您的计算提供某种帮助类(即:stats::getviews(),stats::getvisitors(),…),然后重写它以使用influxdb,保持相同的方法签名和响应格式。

mzaanser

mzaanser2#

首先,您需要像下面这样配置您的数据库本例使用两个mysql数据库:

return [
'components' => [
    'db1' => [
        'class' => 'yii\db\Connection',
        'dsn' => 'mysql:host=localhost;dbname=db1name', //maybe other dbms such as psql,...
        'username' => 'db1username',
        'password' => 'db1password',
    ],
    'db2' => [
        'class' => 'yii\db\Connection',
        'dsn' => 'mysql:host=localhost;dbname=db2name', // Maybe other DBMS such as psql (PostgreSQL),...
        'username' => 'db2username',
        'password' => 'db2password',
    ],
],
];

然后你可以简单地:

// To get from db1
Yii::$app->db1->createCommand((new \yii\db\Query)->select('*')->from('tbl_name'))->queryAll()

// To get from db2
Yii::$app->db2->createCommand((new \yii\db\Query)->select('*')->from('tbl_name'))->queryAll()

如果使用的是活动记录模型,则可以在模型中定义:

public static function getDb() {
    return Yii::$app->db1;
}

//Or db2
public static function getDb() {
    return Yii::$app->db2;
}

然后:
如果在getdb()方法中设置了db1,则将从db1中获取结果,依此类推。

ModelName::find()->select('*')->all();

相关问题