【问题标题】:What is the best approach to process a huge amount of rows in Laravel using Datatables?使用 Datatables 在 Laravel 中处理大量行的最佳方法是什么?
【发布时间】:2019-03-13 16:21:03
【问题描述】:

我在显示超过 3000 行时遇到问题(这个数字将以指数速度增加)。

  1. 我目前正在从 MYSQL 数据库返回集合中的数据。我应该使用 Laravel Eloquent 还是 Query Builder 以获得更好的控制器性能?

  2. 我是否应该以 JSON 文件格式返回数据,这是否有助于加快处理速度?

  3. 有没有一种方法可以添加、删除、编辑数据表中的行,而无需每次都实际返回视图?

如果您可以通过一些可能有帮助的文章提供解释,那就太好了。我试图找到一些东西让我走上处理大量数据的最佳路径,但没有运气。

问候, 詹姆斯

【问题讨论】:

  • 您永远不需要显示超过 100-200 行(甚至 500 行可能太多了)。始终使用分页。使用索引进行快速搜索和分页显示。您应该始终通过请求传递页码(无论是 AJAX 还是经典的 HTTP POST 重定向获取 GET 值)。这适用于在屏幕上显示数据,因为方法就是这样 - 您永远不需要在屏幕上看到超过 200 个结果。

标签: json database laravel eloquent laravel-query-builder


【解决方案1】:

对于处理大数据,总是首选chunkpaginate 它,您可能需要检查this answer

我应该使用 Laravel Eloquent 还是 Query Builder 以获得更好的控制器性能

Eloquent 使用活动记录模式更容易用于简单查询和阅读模型,因为它使用活动记录模式,而 builder 处理查询和复杂性的速度更快,您可能需要查看this answer

我应该以 JSON 文件格式返回数据,这是否有助于加快处理速度?

json 或集合,两者都由 Laravel 处理,恕我直言,不会有太大区别,但是如果您正在考虑将一些 DB 记录保存在缓冲区 json 文件中:

让我们考虑一下这些场景(虽然数据库总是很大),

  1. 您的数据库中的事务很少甚至没有,将其保存在 Json 文件中会加快处理速度,同时牢记安全措施。
  2. 您的数据库中有最小到中等的事务,json 不会那么有用。
  3. 您有大量事务,最好开始考虑 mongodb 或您喜欢的 NoSQL DB。

有没有一种方法可以添加、删除、编辑数据表中的行,而无需每次都实际返回视图?

添加或删除或更新可以以单一或批量方式完成,关于您的第三个问题,是的,您可以创建控制器功能并通过 ajax 进行通信。

过程是:创建一个controller函数查询数据库,为这个函数创建一个路由,在前端通过ajax这个函数查询这个函数,可以查看this tutorial

【讨论】:

    【解决方案2】:

    当您将所有这些数据提取到后端时,我建议不要对 Eloquent 模型进行水合。 Eloquent 模型相当沉重。相反,您可以使用轻量级标准类:

    $users = DB::table('users')->get();
    

    get 方法返回一个包含结果的 Illuminate\Support\Collection,其中每个结果都是 PHP stdClass 对象的一个​​实例。

    https://laravel.com/docs/5.7/queries#retrieving-results

    除此之外,您真的应该考虑对结果进行分页。获取、转换和呈现大量项目通常会导致糟糕的用户体验。

    https://laravel.com/docs/5.7/pagination

    当然,您可以(并且应该)告诉数据库尽可能多地完成繁重的工作。数据库旨在处理大量数据。

    使用相同数据进行大规模更新: https://laravel.com/docs/5.7/queries#updates

    批量插入: https://laravel.com/docs/5.7/queries#inserts

    更灵活的批量更新/插入包: https://packalyst.com/packages/package/mavinoo/laravel-batch

    另外,看看这个例子: updating table rows in postgres using subquery

    这是您可以使用子查询中的数据更新表的方法。这是一个 Postgres 示例,可能不适合您的情况。只是想让您了解一下 DB 的能力。如果您对原始查询感到满意,您的数据库引擎可以为您提供性能最高、最灵活的工具。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-13
      • 2016-06-27
      • 2018-08-30
      • 2010-09-20
      • 2010-09-06
      • 2021-11-18
      • 2019-09-19
      相关资源
      最近更新 更多