У меня есть вызов API от моего приложения к моему другому приложению через локон, передавая переменный POST, например, так:Извлечение миллионов записей через API
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => $paramString,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_TIMEOUT => 600,
CURLOPT_CONNECTTIMEOUT => 60,
));
В этом $url
приложения я пытаюсь принести 20 млн записей из один стол, а затем передать его через JSON, например:
public function apiMethod()
{
$response = $this -> _db -> fetchAll('SELECT t.hash FROM table t WHERE id BETWEEN 20000000 AND 40000000;');
echo json_encode($response);
}
Использование PDO, конечно.
Хорошо, есть две проблемы с этим: 1. FetchAll() не работает для так много записей - память превышает. 2. Json не работает для стольких записей - для json максимальный размер.
Я думал о вызове cURL много раз и собираю каждый раз, скажем, 100 000 записей вместо того, чтобы получать все. Это единственный способ? Каков наилучший способ сделать это?
Я думаю, у вас есть две (или многие другие) опции, сделать более маленькие звонки или, как правило, вы можете подумать о rsync через ssh (или sftp) – swidmann
Расскажите больше о архитектуре и почему вы хотите ее создать. Мой первый квест - синхронизация данных. Я понимаю, что у вас есть два отдельных приложения, но у вас также есть два разделенных сервера баз данных? если у вас есть две разделенные базы данных и нужна синхронизация данных, вам необходимо использовать репликацию базы данных или механизм хранения FEDERATED (https://dev.mysql.com/doc/refman/5.1/en/federated-storage-engine.html) –