2014-09-29 47 views
1

我有一个ID数组(eventids),它可以是表中的百万或十亿个ID。我正在使用for循环遍历每个id,并使用PHP中的查询操作从Dynamo数据库表中检索项目。但是,由于查询操作会遍历表中的大量信息,因此查询操作需要很长时间才能完成工作。所以,在这种情况下,我没有得到任何结果,因为我得到了一个时间。以下代码尝试执行此操作,该操作无法处理大量信息。我在想,如果您对$sfweventarrayRDS阵列中的大量ID有更快的查询操作和建议,您是否有任何建议或建议?服务器上的DynamoDB查询操作超时从表中获取项目

for ($j = 0 ; $j < count($sfweventarrayRDS) ; $j++){ 
     $keyconditions = array(
      "eventid" => array(
       "ComparisonOperator" => ComparisonOperator::EQ, 
       "AttributeValueList" => array(
        array(Type::NUMBER => $sfweventarrayRDS[$j]["eventid"]) 
       ) 
      ) 
     ); 

     $sfweventarrayDynamo = Dynamo::getItems("eventlocation",$keyconditions,$limit); 

     if (count($sfweventarrayDynamo) > 0){ 

      $timediffepoch = $sfweventarrayDynamo[0]["edatecreated"]["N"] - $sfweventarrayRDS[$j]["edatecreated"]; 
      $timediffstandard = new DateTime("@$timediffepoch"); 

      if ($timediffstandard->format('i') >= 5){ 
       $starttimeepoch = $sfweventarrayRDS[$j]["edatecreated"]; 
       $endtimeepoch = $sfweventarrayDynamo[0]["edatecreated"]["N"]; 
       $starttimestandard = new DateTime("@$starttimeepoch"); 
       $endtimestandard = new DateTime("@$endtimeepoch"); 

       $each_event = array("eventid" => $sfweventarrayDynamo[0]["eventid"]["N"], 
            "organizationid" => $sfweventarrayRDS[$j]["organizationid"], 
            "userid" => $sfweventarrayDynamo[0]["userid"]["N"], 
            "starttime" => $starttimestandard->format('Y-m-d H:i:s'), 
            "endtime" => $endtimestandard->format('Y-m-d H:i:s'), 
            "location" => $sfweventarrayRDS[$j]["location"], 
            "startlatitude" => $sfweventarrayRDS[$j]["latitude"], 
            "startlongitude" => $sfweventarrayRDS[$j]["longitude"], 
            "endlatitude" => $sfweventarrayDynamo[0]["latitude"]["N"], 
            "endlongitude" => $sfweventarrayDynamo[0]["longitude"]["N"]); 
       array_push($safewalkeventsDynamo, $each_event); 
      } 
     } 
    } 

回答

0

可以有两种可能的解决方案,可以提高您的查询操作:

  1. 使用批处理GET:如果您已经知道事件ID和要查询的数据库,以获得更多的信息,然后批量得到将是理想的。您创建了100个ID(允许的最大值),并调用DynamoDB一次获取信息。重复,直到你得到所有的ID。 Here是文档链接。

  2. 您可以根据需要增加表格的读取容量。 (这将导致为dynamoDB支付更多的钱。)

+0

非常感谢您的回答,我一定会用它作为未来的参考。所以,我发现问题不是服务器超时而是ajax调用。因此,我没有把它作为web服务调用,而是创建了一个命令行工具,它可以在服务器上运行,并给出结果,尽管需要一段时间。 – 2014-10-02 15:44:56