使用Datatables在Laravel中处理大量行的最佳方法是什么?

时间:2018-10-09 00:18:27

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

我在显示3000行以上时遇到了问题(此数字将以指数速率增加)。

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

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

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

如果您可以提供一些可能对您有所帮助的文章的解释,那就太好了。我试图找到一种使我走上处理大量数据的最佳途径的方法,但是没有运气。

关于, 詹姆斯

2 个答案:

答案 0 :(得分:2)

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

  

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

口才更容易进行简单的查询和读取模型,因为它使用Active Record模式,而生成器则更快地处理查询和复杂性,您可能需要检查this answer

  

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

json或collection都由Laravel处理,恕我直言并没有多大区别,但是,如果您正在考虑将某些数据库记录保存在缓冲区json文件中:

让我们考虑一下这些情况(尽管数据库总是很大)

  1. 您在数据库中的事务最少,甚至没有事务,将其保留在Json文件中索引将在确保安全措施的同时加快该过程。
  2. 您的数据库上的交易量很小至中等,json不会那么有用。
  3. 您的交易量巨大,最好开始考虑使用mongodb或您首选的NoSQL DB。
  

有没有一种方法可以添加,删除,编辑数据表中的行,而不必每次都真正返回视图?

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

该过程是:创建一个控制器函数以查询数据库,为此函数创建一个路由,并通过ajax在前端查询该函数,您可能需要检查this tutorial

答案 1 :(得分:1)

当您将所有这些数据提取到后端时,我建议不要混合Eloquent模型。雄辩的模型非常沉重。相反,您可以使用轻量级的stdClasses:

$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具备的功能有所了解。如果您对原始查询感到满意,则数据库引擎可以为您提供性能最高,最灵活的工具。