代码之家  ›  专栏  ›  技术社区  ›  Skeletor

如何在不耗尽内存限制的情况下,将web服务中的数据提取到数组中,然后存储到数据库中?

  •  0
  • Skeletor  · 技术社区  · 6 年前

    我在本地数据库中存储了类别。要获取某个类别的特性,我只需使用该类别的id,服务就会返回该类别的特性。我可以将返回的数据立即存储到数据库中,但这样我就不能在整个过程中使用这些特性。

    相反,我尝试将所有结果数据存储到一个数组中,并在整个循环结束后将所有数组存储到db中。这样的话,只有在写作过程中(大约5分钟),功能才会被屏蔽。

    粗略地说:

    foreach($categories as $category){
        $features = $webService->getCategoryFeatures($category->id);
        // ...and some other logics
    }
    
    foreach($features = $feature){
        App\Feature::create($feature);
        // ...and some other logics
    }
    

    我需要一种方法,我可以暂时存储返回的功能,而不会得到内存错误。而且我不想增加限制。

    2 回复  |  直到 6 年前
        1
  •  0
  •   syam    6 年前

    通过输入页码使web服务返回有限的记录。以递增的页码调用web服务,并将结果存储在数据库中。用下一个页码再次呼叫,直到您从一个页码得到0个结果。之后停止调用web服务。

        2
  •  0
  •   Skeletor    6 年前

    实际上我想出了一个简单的解决办法。我创建了一个临时(categoryies\u temp)表,并用这个表开始了整个过程。因此,即使需要很长时间,原始表仍然可以运行。