laravel 读操连接了读库和写库
来源:互联网 发布:淘宝创意挂钩 编辑:程序博客网 时间:2024/05/01 08:06
今天在laravel框架中配置读写分离时,发现ORM的读操作分别连接了主库和从库,由于我们的产品是在海外推广,用的AWS 的 RDS Mysql版本,主库在美国,在新加坡开了个从库,发现查询时连接了主库和从库,导致查询非常慢,因此只能通过原生SQL查询。
laravel的读写分离配置如下(database.php):
'connections' => [ 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', 'localhost'), 'port' => env('DB_PORT', 3306), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => env('DB_PREFIX', 'tbl_'), 'timezone' => env('DB_TIMEZONE', '+00:00'), 'strict' => false, 'options' => array( PDO::ATTR_STRINGIFY_FETCHES => true, PDO::ATTR_EMULATE_PREPARES => false ), ], 'mysql-read' => [ 'driver' => 'mysql', 'host' => env('DB_HOST_READ', 'localhost'), 'port' => env('DB_PORT', 3306), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => env('DB_PREFIX', 'tbl_'), 'timezone' => env('DB_TIMEZONE', '+00:00'), 'strict' => false, 'options' => array( PDO::ATTR_STRINGIFY_FETCHES => true, PDO::ATTR_EMULATE_PREPARES => false ), ], 'mysql-write' => [ 'driver' => 'mysql', 'host' => env('DB_HOST_WRITE', 'localhost'), 'port' => env('DB_PORT', 3306), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => env('DB_PREFIX', 'tbl_'), 'timezone' => env('DB_TIMEZONE', '+00:00'), 'strict' => false, 'options' => array( PDO::ATTR_STRINGIFY_FETCHES => true, PDO::ATTR_EMULATE_PREPARES => false ), ], ],
建一个连接数据的类:
class DBConnService{ private static $read_conn = null; private static $write_conn = null; private function __construct() {} public static function writeConn() { if (self::$write_conn === null) { self::$write_conn = DB::connection('mysql-write'); } return self::$write_conn; } public static function readConn() { if (self::$read_conn === null) { self::$read_conn = DB::connection('mysql-read'); } return self::$read_conn; }}
$sql = "SELECT $fields FROM $table WHERE field = ? "; $result = DBConnService::readConn()->select($sql, [$field]);
这样查询时只连接从库一次,而且一次请求中也只连接从库一次
0 0
- laravel 读操连接了读库和写库
- laravel框架写库关联导航栏
- laravel框架写库关联导航栏
- LCD操读问题的解决
- 操符和表达式
- 写了个连接池的类,和大家一起探讨
- laravel 框架 服务器部署 连接其他服务器 redis 和 mysql
- Laravel使用redis库
- Laravel使用redis库
- Laravel常用类库
- MLGB_吾操回复了帖子面试和薪水,一个老生常谈的问题,来吐个槽
- Laravel 4 Sitemap--动手写Laravel CMS
- laravel项目连接redis
- laravel连接mssql (sqlserver)
- 操写一盒酥三字于盒上
- HDFS读和写
- 文件写和读
- File读和写
- [Paper note] Deep Relative Distance Learning: Tell the Difference Between Similar Vehicles
- error LNK2019: 无法解析的外部符号_imp__MessageBoxA@16,该符号在函数 _WinMain@16 中被引用
- MHA+keepalive高可用环境搭建
- 图像处理中消除相机透镜畸变和视角变换
- I2C
- laravel 读操连接了读库和写库
- ANN-人工神经网络
- leetcode~Binary Tree Inorder Traversal
- 谈谈数据库的ACID
- Access数据库相关
- cocos2dx 3.6 屏幕适配
- PCL库使用中出现的一些错误及解决方法
- 车道检测与跟踪
- 查看python的模块和函数帮助文档方法