gpt4 book ai didi

mysql - Laravel Web 应用程序的可扩展性

转载 作者:行者123 更新时间:2023-12-01 00:10:18 24 4
gpt4 key购买 nike

我们正在运行一个用 Laravel 编码的基于 MySQL/PHP 的网络应用程序。基本上,我们用它来管理电脑维修店的服务工作/工作单。我们那里有近 2500 个工单,有时运行速度有点慢,尤其是当多个技术人员输入或更新工单时。使它更快、更有效地工作的最佳方法是什么,尤其是当我们继续增加客户和工作订单时。服务器在 Linux Software RAID1 中运行 CentOS 6 x64、cPanel、Intel Xeon E3、2x Enterprise SATA。谢谢!

最佳答案

不确定一个答案在指定解决方案时能深入到什么程度,但有许多最佳实践可供遵循。我认为这就是您所追求的,因为您没有指定任何特定的瓶颈。

一些快速提示是

  • 缓存您的查询:

因此,如果在您的应用程序上运行查询,其数据仅每 x 天更新一次,为什么不将其缓存 x 天,以便您的数据库避免在两者之间被不必要地击中?来自 docs 的示例:

$value = Cache::remember('users', $minutes, function()
{
return DB::table('users')->get();
});
  • 利用队列:

当用户更新工作订单(电子邮件、调用其他逻辑)时,后​​台任务可能正在运行,这可能需要一些时间并导致用户不得不等待。与其让这些任务在那一刻运行并降低用户的速度,不如将它们排队等待稍后运行。 Laravel supports许多不同的队列驱动程序用于此目的。我个人用过Beanstalk但你可以尝试类似 IronMQ 的东西

Beanstalk 的基本用法:更改/app/config/queue.php 以指定您的默认队列驱动程序和任何配置,包括队列名称:

'default' => 'beanstalkd',


'beanstalkd' => array(
'driver' => 'beanstalkd',
'host' => 'localhost',
'queue' => array('default','SendEmail'),
),

然后,在您的 Controller 中,您可以执行以下操作以推送到该队列:

Queue::push('SendEmail', array('message' => 'Something...'));

仅供引用,Fideloper 拥有出色的 tutorial对此。

  • 警惕 n+1 问题并使用预先加载:

docs解释这个问题。

  • 考虑切换到 NoSql 数据库,如 MongoDB(完全取决于要求):

正如我提到的,这完全取决于您的应用程序和您正在做的事情,但在某些情况下,在 MySQL 上使用 NoSql 数据库有其优点。您可以利用分片和复制来帮助使用 MongoDB 扩展您的应用程序,但当然不仅限于 mongo。

您还可以做很多其他事情,但仅凭上述提示,我认为您可以使您的应用更快、更高效。

关于mysql - Laravel Web 应用程序的可扩展性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23448715/

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