我有一个API调用从我的应用程序到我的其他应用程序通过cURL,传递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条记录而不是抓取所有记录。这是唯一的办法吗?最好的方法是什么?
你的主要问题是架构。
最好的方法显然是而不是有一个API,每次调用都需要传输无数行。
要么实现只检索一行的方法,这是适合API的,要么重新考虑整个体系结构。例如,磁盘复制或数据库复制等
你绝对不应该使用fetchAll,因为它只会填满你的内存。您确定每次都需要完整的数据传输吗?通常只需要转移差异。这当然会使你的API更加复杂。
您要么必须实现一个稳定的连接并每一万行推送您的数据,要么您可以通过cronjob准备一个文件(也是每一万行),并使用下面的方法传输该文件filetransfer
如果你写一个文件,你可以"伪造"json-Array-Part"["answers"]",然后把所有的行连接起来。
你确定json是正确的格式吗?如果你只有一列,那就没有太多的结构了。