laravel 读操连接了读库和写库
2017-02-17 14:12
92 查看
今天在laravel框架中配置读写分离时,发现ORM的读操作分别连接了主库和从库,由于我们的产品是在海外推广,用的AWS 的 RDS Mysql版本,主库在美国,在新加坡开了个从库,发现查询时连接了主库和从库,导致查询非常慢,因此只能通过原生SQL查询。
laravel的读写分离配置如下(database.php):
建一个连接数据的类:
在程序中使用:
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]);
这样查询时只连接从库一次,而且一次请求中也只连接从库一次
相关文章推荐
- Laravel下数据库连接相关问题:env配置,database.php配置,php artisan migrant
- Laravel 数据库连接, 数据库名,配置文件修改
- laravel连接mssql (sqlserver)
- Linux平台使用Freetds连接SQL Server服务器,兼容PHP和Laravel
- laravel使用多个数据库连接
- laravel使用多个数据库连接
- laravel 框架 服务器部署 连接其他服务器 redis 和 mysql
- Laravel 连接数据库、操作数据库的三种方式
- Laravel中连接多个数据库
- Linux 连接SQL Server数据库 并配置laravel进行连接
- Laravel5.5源码详解 -- 数据库的启动与连接过程
- mac 环境下laravel 5.1框架与数据库的连接和配置问题
- 在laravel中大家有没有遇到多个应用中数据库连接错乱问题?
- Laravel 连接数据库、操作数据库的三种方式
- laravel 数据库连接 的命名空间
- Laravel框架连接Oracle数据库
- laravel数据库连接问题
- 解决mac下laravel连接mysql错误
- laravel与mysql数据库连接
- laravel连接数据库可能出现的小问题