Как обрабатывать миллионы записей в MySQL и Laravel - PullRequest
0 голосов
/ 27 октября 2018

Как обрабатывать более 10 миллионов записей в MySQL только для операций чтения. У меня есть две таблицы, одна из которых - company, в которой хранятся записи о компании, то есть ее название и предоставляемые ей услуги, то есть 2 столбца и около 3 миллионов записей, а другая таблица employee содержит около 40 столбцов и около 10 миллионов записей. При попытке извлечь данные даже простые запросы, такие как

Employee::paginate(100);
//In terms of mysql it
//select count(*)  as aggregate from 'employee'; 
//Select *  from 'employee' limit 100 offset 0;

раньше занимало около 30 с, а теперь - как всегда.

Если я хочу выполнить поиск, применить фильтр или присоединиться к двум таблицам, т. Е. company и employee, то иногда это работает, а иногда происходит сбой и выдается множество ошибок / предупреждений в журналах сервера SQL. Может кто-нибудь, пожалуйста, скажите мне, как я могу обработать этот объем записей более эффективно, не вызывая распад сервера SQL, особенно во время большого трафика В настоящее время у меня есть только первичные ключи, то есть идентификаторы и объединенные идентификаторы индексируются.

Это своего рода двойное сравнение постов со всеми подобными запросами, которые были сделаны на SO, но они мне не очень помогли.

Вопросы, за которыми я следовал на SO

  1. Лучшее хранилище данных для миллиардов строк
  2. Обработка очень больших данных с помощью mysql
  3. https://dba.stackexchange.com/questions/20335/can-mysql-reasonably-perform-queries-on-billions-of-rows
  4. Является ли InnoDB (MySQL 5.5.8) правильным выбором для многомиллиардных строк?
  5. Насколько большой может быть база данных MySQL до начала снижения производительности
  6. Обработка миллионов записей в массивах из MySQL в PHP?

1 Ответ

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

Сделайте эти изменения:

  • Используйте partitioning в вашей базе данных в зависимости от ваших потребностей. (например, как разбить таблицу на столбцы datetime? )
  • Используйте метод simplePaginate вместо paginate. Он не запрашивает счет. (https://laravel.com/docs/5.7/pagination)
  • Попробуйте улучшить свой indexing. Это влияет. (Google: лучшие практики индексирования MySQL)
  • Если вам нужно количество строк, используйте драйверы caching (например, redis)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...