【问题标题】:Php - Symfony2 - Rest api - huge dataPhp - Symfony2 - Rest api - 海量数据
【发布时间】:2015-11-20 05:29:58
【问题描述】:

我有一个关于使用处理大量数据的 API 的概念性问题。

我有两个 Web 应用程序正在运行:

  • 系统 A,其作用类似于源
  • 系统 B,即目标系统

两者都使用 RESTful API 相互通信。

现在涉及从 A 向 B 发送大量数据(约 100 万行)。

我的概念是从数据库中选择所有数据,即创建一个包含 100 万个子数组的主数组。接下来遍历主数组以获取每一行并将此特定行作为 Post-Request 发送到系统 B。

代码示例:

$data = $sql-to-get-all-data;
$mainArray = $data->fetchAll();

foreach ($mainArray as $subArray) {

    $row = $subArray;

    // create post request and send $row to System B

}

接下来我需要检查系统 B 中是否已经存在该行。如果存在,则发送更新请求而不是发布请求。 另外...如果系统B中存在一行,但系统A中不存在,则应将其从系统A中删除。

我的问题是:

这是正确的方法吗? 我应该考虑并行处理/多线程等概念吗?

【问题讨论】:

    标签: php multithreading api rest symfony


    【解决方案1】:

    您应该在数据库查询中使用偏移量和限制。将整个数据集存储在 PHP 数组中是一个非常糟糕的主意。

    您可以批量发送子集并在响应中返回 id 列表(添加/更新/删除)。

    【讨论】:

    • 感谢您的回答,首先:如果我使用偏移量和限制,我如何才能在最后获取所有数据?第二:如果系统 A 中不存在行,我不明白如何从系统 B 中删除行?
    • 首先:您必须指定您的限制,并在循环中执行查询。首先是偏移量 0 和限制,接下来是偏移量 0+limit+1 和限制等。其次:您可以执行一个删除查询,其中 id 不在您的 id 列表中。向我们提供有关您的业务逻辑的更多信息总是很棒的。也许我们可以简化您的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    相关资源
    最近更新 更多