php - 通过 API 获取数百万条记录

标签 php mysql json curl pdo

我有一个从我的应用程序通过 cURL 传递 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 应用程序中,我尝试从一个表中获取 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,要么重新考虑整个架构。比如,磁盘复制或数据库复制等。

关于php - 通过 API 获取数百万条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32633580/

相关文章:

c# - Json 反序列化器将对象读取到数组

javascript - ui-bootstrap timepicker 和 ng-model 值转换器

php - Mysql 多个查询来计算月份值

php - select2 成功时检索新创建的标签 ID

php - PHP 单例类是否以某种方式在请求之间共享?

php - 如何规范这个汽车零件数据库?

php - 如何避免在codeigniter中重复插入表?

php - 无法使用 PHP 和 Mysql 退出循环

php - 在 laravel eloquent 中处理映射表

java - Grails:Linux 上的 JSON.parse() 错误 - 适用于 Windows - 难住了