php - Eloquent 使用远程 MySQL 时非常慢
问题描述
我最近不得不将我的数据库转移到远程服务器。
我使用 Postman 连接到在 localhost 上运行的 PHP 以发出相同的请求。这是结果,
本地主机和 Eloquent 上的 MySQL:~30ms
远程服务器和 Eloquent 上的 MySQL:~2.7 秒
本地主机和 PHP 上的 MySQL:~10ms
远程服务器和 PHP 上的 MySQL:~850ms
从我的计算机到远程服务器 ip 的平均 ping 时间约为 150 毫秒。
这是我使用的 PHP 脚本,
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "select * from `online` where `online`.`id` = 1 limit 1";
$result = $conn->query($sql);
var_dump($result);
对于雄辩,我只是使用Online::find(1)
.
我还没有尝试在服务器上运行 eloquent,但这正常吗?如果我要在不同的服务器上使用远程 mysql 数据库,我应该避免使用 eloquent 吗?
编辑:
我正在更改一些值,当我从 eloquent config 中删除 charset 和 collation 值时,响应时间提高到 1.7 秒,快了 1 秒。
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
解决方案
Eloquent VS MySQLi 原生 RAW 执行
Eloquent ORM
比它慢是Native MySQLi Execution
因为它有很多内置功能。BUT eloquent 会让你的代码简洁明了。并提供更好security
的 .
本地主机VS远程主机
当我们谈论时local server
,性能取决于您的local environment
。但是当你使用Remote Host
时,性能会因为以下原因而改变。
- 网络连通性。
- 远程主机的位置。
- 远程主机的性能。
最佳实践/架构
将应用程序部署到生产环境时,通常我们不会将数据库和应用程序保存在同一台服务器中。在生产中,专家会做以下事情来提高数据库性能。
- 使用数据库复制(跨区域)。
- 索引。
- 使用缓存。
推荐阅读
- vim - vimscript: vim 寄存器的补全
- ios - 单元格视图收缩动画很生涩
- javascript - JavaScript Map 对象中的递增值
- python - 蟒蛇打印错误
- java - 在groovy中将for循环的结果写入csv
- wix - WiX 安装程序 - 如何使用 Wix 3.10 检查 .net framework 3.5 和 4.6
- makefile - Makefile:匹配多个模式规则
- java - 在 ubuntu 16.04 中安装最新的 java 版本
- automated-tests - 如何在 VSTS 中选择某些测试?
- javascript - 如何安装 npm 包(math-simple-integrals)