2014-09-29 48 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