【发布时间】:2015-12-14 12:21:06
【问题描述】:
我的应用程序通过 cURL 向我的其他应用程序调用 API,传递 POST 变量,如下所示:
$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 应用程序中,我尝试从一个表中获取 2000 万条记录,然后通过 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 条记录,而不是全部获取。这是唯一的方法吗?最好的方法是什么?
【问题讨论】:
-
我认为您有两个(或更多)选项,进行更多较小的调用,或者通常您可以考虑通过 ssh(或 sftp)进行 rsync
-
详细介绍该架构以及您为什么要创建它。我的第一个任务是数据同步。我了解您有两个独立的应用程序,但您是否也有两个独立的数据库服务器?如果您有两个独立的数据库并且需要数据同步,则需要使用数据库复制或 FEDERATED 存储引擎 (dev.mysql.com/doc/refman/5.1/en/federated-storage-engine.html)