2017-04-03 58 views
0

我正在构建一个具有此过程的Web应用程序。更好的进程来同时处理大量的数据

1)用户寄存器

2)用户注册后,我运行一个queuing process该刮擦60K +值得客户数据。这些数据来自第三方API,我使用curl来做这件事。

3)我刮这些数据后,我将它存储在数据库中。

4)这些来自第三方的API刮数据具有分页,所以我要做的就是,我检查,如果有另一个页面(nextPageUrl API的响应),如果有反应,我curl然后再次获取所有客户数据并再次存储。这一直持续到api响应中没有nextPageUrl。现在

//this is a pseudo code 

RegisterUser(user); 
CallThirdPartyAPI() 

function RegisterUser(user){ 
insert_in_users_table(user) 
} 

function CallThirdPartyAPI($url=null){ 
    $customers = get_all_customers(); 
    for($customer as $cust){ 
     store_in_customers_table(); 
     if($cust->response_has_next_page_url) 
     CallThirdayPartyAPI($cust->next_page_url); 
     else 
     return false; 
} 
} 

,你可以看到,这是确定的,如果我只有一次在我的web应用程序注册1个用户。但是,由于我有100多个用户在我的网络应用程序中注册,这就成了一个问题,因为抓取数据需要20-30分钟才能完成,而且我正在运行一次只有2个作业的作业队列。所以基本上需要完成2个工作才能执行其他工作。

现在,我正在寻找更好的解决方案,以提高系统效率。

您的建议将不胜感激。

PS:

我正在工作,通过主管

排队我在我的数据库来实现读取副本。我在master数据库中写入数据,同时读取副本以减少数据库的CPU使用量。

+0

排队过程不够吗?一旦另一名工人可用,它会启动下一个工作人员? – James

+0

'100多个用户在我的网络应用程序中注册'此时,您的系统也应该按比例缩放其他许多原因。 – JustOnUnderMillions

+0

您可以为每个nextPage创建一个新的作业实例。但是在这种情况下,您应该限制活动作业的数量 –

回答

0

你在使用sql数据库吗?你有没有考虑使用诸如MongoDB之类的sql。我有一个类似的问题:使用curl来获取大量的数据。使用MongoDB,它更高效,速度更快,因为它不使用sql,并且可以将这些数据存储为json/array,但是您需要。 您也可以使用MongoDB为您的API和SQL数据库为他人。