Я должен извлечь 800 000 строк (это среда разработки, в действительности это может быть 1, а то и 1,5 млн строк). второй шаг это вставить эти вещи как сериализованные данные в кэш Redis.
Мои проблемы:
Допустимый объем памяти X байтов исчерпан, но … ключ в том, что я не может Измени это.
Я понял, что могу извлекать данные по частям из БД MySQL. Но потом второй шаг проблематично. До сих пор я использовал для хранения данных в Redis тип String (сериализованный массив массивов php с данными MySQL). Пока я не знаю, как правильно добавить каждую часть извлеченных данных. (получать сериализованные данные, десериализовывать их, затем добавлять новую часть данных и сериализовывать их снова … глупо).
Есть ли у вас опыт работы с большими данными? Я понятия не имею, как справиться с этим.
Пожалуйста? 🙂
С наилучшими пожеланиями.
В вашем случае я бы поместил созданный вами контент в файл как команду redis SET, затем запустил файл с помощью redis-cli —pipe, прочитав по следующей ссылке, как должен выглядеть ваш файл данных вставки redis:
<?php
while ($line = mysqli_fetch_assoc($result)) {
$data['data'] = $line['somekey']; // here generate the desired data
$data['key'] = 'thekey'; // make the data key
$redisCommnand = 'SET '.$data['key'].' '.$data['data']; // here you create the redis insert command line someDataKey
file_put_contents('/tmp/data.txt', $redisCommand, FILE_APPEND);// appending the command to redis command file
}// exec command to run the file
exec('cat data.txt | redis-cli --pipe');
// consider removing the data.txt file
// unlink('/tmp/data.txt');
Других решений пока нет …