Как лучше всего обрабатывать огромное количество строк в Laravel с использованием Datatables? - PullRequest
0 голосов
/ 09 октября 2018

У меня проблема с отображением более 3000 строк (это число будет увеличиваться в геометрической прогрессии).

  1. В настоящее время я возвращаю данные в коллекции из базы данных MYSQL.Стоит ли использовать Laravel Eloquent или Query Builder для повышения производительности моего контроллера?

  2. Должен ли я вернуть данные в формате файла JSON, поможет ли это ускорить процесс?

  3. Есть ли способ добавлять, удалять, редактировать строки в таблицах данных без фактического возврата представления каждый раз?

Если бы вы могли дать объяснение с некоторымистатьи, которые могли бы помочь, это было бы здорово.Я пытался найти что-то, что помогло бы мне выбрать лучший способ обработки огромного количества данных, но безуспешно.

С уважением, Джеймс

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Для обработки больших данных всегда предпочтительнее чанк или paginate , вы можете проверить этот ответ .

Стоит ли использовать Laravel Eloquent или Query Builder для повышения производительности в моем контроллере

Eloquent проще для простых запросов и чтения при использовании моделей, так как использует шаблон Active Record, а компоновщик быстрее дляПри обработке запросов и сложностей вы можете проверить этот ответ

Должен ли я вернуть данные в формате файла JSON, поможет ли это ускорить процесс?

json или коллекция, обе обрабатываются Laravel и не будут иметь большого значения IMHO, однако, если вы планируете сохранить некоторые записи БД в буферном файле json:

Давайте рассмотрим эти сценарии (в то время как база данныхвсегда огромен),

  1. у вас есть минимальные транзакции в вашей базе данных или нет транзакций, хранение их в индексированных файлах Json ускорит процесс, в то время как keepiПринимая во внимание меры безопасности.
  2. у вас есть минимальные или средние транзакции в вашей базе данных, json не будет столь же полезным.
  3. у вас огромные транзакции, лучше начать с рассмотрения mongodb илипредпочитаемая вами база данных NoSQL.

Есть ли способ добавлять, удалять, редактировать строки в таблицах данных без фактического возврата представления каждый раз?

Добавление илиудаление или обновление может быть выполнено единичным или массовым способом, что касается вашего третьего вопроса, да, вы можете создать функцию контроллера и обмениваться данными через ajax.

процесс такой: создайте функцию контроллера для запроса к базе данных, создайте маршрут для такой функции и запросите ajax эту функцию в интерфейсе, вы можете проверить этот урок .

0 голосов
/ 09 октября 2018

Когда вы загружаете все эти данные в бэкэнд, я предлагаю НЕ увлажнять модели 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

Также посмотрите на этот пример: обновление строк таблицы в postgres с помощью подзапроса

Таким образом вы можете обновить таблицу, используяданные из подзапроса.Это пример Postgres и может не подходить для вашего случая.Просто хотел дать вам представление о том, на что способны БД.Если вам удобны необработанные запросы, ваш движок БД может предоставить вам наиболее производительные и гибкие инструменты.

...