Как я могу создать массив из огромного количества данных? - PullRequest
0 голосов
/ 08 мая 2018

Я выбираю много данных из моей базы данных mySQL:

 $sql = "SELECT * FROM data WHERE id = ?";  
 $q = $pdo->prepare($sql);
 $q->execute([$id]);
 $array = $q->fetchAll(PDO::FETCH_ASSOC);

 var_dump($array);

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

Ответы [ 4 ]

0 голосов
/ 08 мая 2018

Главное, на что нужно обратить внимание:

  1. Будут ли эти данные таблицы увеличиваться дальше? (уже большой :))

Зацикливание 500k записей каждый раз не рекомендуется / не рекомендуется. Это определенно влияет на скорость / производительность.

Предлагаю следующие варианты:

  1. Поместите поле в таблицу, чтобы идентифицировать самую верхнюю папку (что-то вроде поля порядка сортировки) - обновляйте его правильно, когда это необходимо. Чтобы мы могли сначала извлечь самую верхнюю папку, и если есть поле для идентификации родителя, то вы можете легко построить дерево.
  2. Подумайте о таблице, в которой хранятся самые верхние папки с внешним ключом к основной таблице. Обновите его соответствующим образом, чтобы вы могли легко определить самую верхнюю папку.

PS: вы можете подумать об использовании CRON для обработки данных и обновления порядка сортировки, если это необходимо.

0 голосов
/ 08 мая 2018

Пожалуйста, используйте функцию извлечения вместо извлечения всех, как показано ниже:

while ($arr = $stmt->fetch()){
   // do_other_stuff(); 
}

Это уменьшит нагрузку на вашу систему.

Пожалуйста, посмотрите это

0 голосов
/ 08 мая 2018

В настоящее время я обрабатываю 12 000 строк и кодирую их в массивы JSON, и, на мой взгляд, это работает лучше всего для меня.

$sql = mysqli_query($dbconn, "SELECT * FROM data WHERE id = ?");

$rows = array();
    while($r = mysqli_fetch_assoc($sql)) {
    $rows[] = $r;
    }

Затем повторить (или, в моем случае, повторить json_encode) это.

0 голосов
/ 08 мая 2018

Функция fetchAll() отображает запись целом в переменную.

Отображение одной строки за итерацию будет значительно быстрее

$q->execute([$id]);

$i = 0;
while ($row = $q->fetch()) {
    // do something with $row
    $i++;
}
...