Laravel выдает ошибку SQLite при переходе с локального Homestead на prod в AWS - PullRequest
0 голосов
/ 26 апреля 2018

Я создал приложение, которое использует библиотеку Archon для создания и манипулирования фреймами данных, вот ссылка (Great Library btw!).

Приложение создаст большой массив, содержащийдубликаты.Я использую функциональность dataframe Archon для выполнения операции groupBy, так что я получаю счетчик каждой уникальной записи в массиве.

Этот массив варьируется от нескольких сотен записей до многих тысяч.

Локально, это отлично работает.Я использую Vagrant с VirtualBox - и у меня там работает Homestead Box.Он работает в 64-битной системе Ubuntu.Я недавно развернул свое приложение на экземпляре эластичного бобового стебля, и он работает на 64-битной Amazon Linux / 2.6.6.

После развертывания я получаю ошибку

SQLSTATE[HY000]: General error: 1 too many SQL variables

Похоже, по какой-то причине после смены систем клиент взаимодействует с драйвером SQLite, на котором по-разному построен Archon.Я в недоумении, почему это будет работать локально, но не после развертывания.

Вот код, который я использую, который выдает ошибку:

$df = DataFrame::fromArray($batch_array);
$senders_emails = $df->query("SELECT a,sum(b) AS bFROM dataframe GROUP BY 1ORDER BY 2 DESC")->toArray();

Кто-нибудь понимает SQLite?/ Archon / Homestead vs EB достаточно хорошо, чтобы помочь?Буду очень признателен!

1 Ответ

0 голосов
/ 26 апреля 2018

у вас $batch_array слишком много данных.

рассмотрите этот способ

$sendersEmails = [];
foreach (array_chunk($batch_array, 100) as $chunk) {
    $df = DataFrame::fromArray($chunk);
    $emails = $df->query("SELECT a,sum(b) AS bFROM dataframe GROUP BY 1ORDER BY 2 DESC")->toArray();
    $sendersEmails = array_merge($sendersEmails, $emails);
}

ВНИМАНИЕ: это может привести к переполнению памяти

Для принципиального решения вопроса необходимо уменьшить количество $batch_array данных

Каков максимальный размер запроса для mysql?

...