gpt4 book ai didi

mysql - Yii2/PHP : Abstracting Database Access for InfluxDB and MySQL

转载 作者:行者123 更新时间:2023-11-29 07:25:30 25 4
gpt4 key购买 nike

在我的 Yii2/PHP 项目中,我需要集成两个数据库:

  • 用于元数据、Web 用户界面的 MySQL,......
  • 用于测量数据的 InfluxDB(大量时间序列数据)

为了降低复杂性,我想先使用 MySQL,然后再添加 InfluxDB。

我的想法是为两个数据库(仅用于测量数据)创建一个抽象/父类(super class),它允许使用 MySQL 进行实现和执行测试,并在项目的后期阶段使用 InfluxDB 实现加速。

抽象应该有方法:

  • 数据库连接管理
  • 写入数据
  • 读取数据(原始数据、聚合数据)

因为我还不是 InfluxDB 专家(还):这种架构是否有意义,或者数据模型和方案从根本上不同,所以抽象将毫无值(value)?是否有可供学习的项目?

最佳答案

首先,您需要像下面这个例子一样配置您的数据库,使用两个 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();

关于mysql - Yii2/PHP : Abstracting Database Access for InfluxDB and MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54005702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com