2015-05-26 75 views
3

我們正在試圖尋找一個dynamodb,並需要得到一個分組中的對象的數量,這可怎麼辦呢?DynamoDB數集團通過

我已經試過這一點,但加入第二個數字時,這不起作用:

$search = array(
    'TableName'  => 'dev_adsite_rating', 
    'Select'  => 'COUNT', 
    'KeyConditions' => array(
     'ad_id' => array(
      'ComparisonOperator' => 'EQ', 
      'AttributeValueList' => array(
       array('N' => 1039722, 'N' => 1480) 
      ) 
     ) 
    ) 
); 
$response = $client->query($search); 

的SQL版本會是這個樣子:

select ad_id, count(*) 
from dev_adsite_rating 
where ad_id in(1039722, 1480) 
group by ad_id; 

那麼,有沒有一個我們如何實現這一目標?我找不到任何東西。

回答

1

嘗試這樣的DynamoDB執行查詢比在SQL世界稍微麻煩。要執行這樣的事情,你需要考慮一些事情

  1. EQ ONLY散列鍵:要執行此類型的查詢,你需要做兩個查詢(即ad_id EQ 1039722/ad_id EQ 1480)
  2. 通過分頁查詢:因爲dynamodb返回的結果爲增量單位,你需要通過你的結果進行分頁。 Learn more here.
  3. 運行「計數」:您可以從響應採取「計數」屬性,並將其添加到運行總計爲你通過這兩個查詢的結果分頁。 Query API
+0

是否有另一種方式做到這一點?通過這麼多的數據將是不好的。有些團體將有幾千條記錄。可以說這兩個例子有大約5,000條記錄,這就是我們必須翻閱的10,000條記錄。該網頁一次將顯示9個項目,如果每個項目有5,000個相關記錄是45,000('5,000 * 9')記錄,我們必須對其進行分類。有沒有更好的辦法?也許是第二個AWS服務? –

+0

如果您正在尋找第二種服務讓您使用豐富的查詢語言(如Hive),請隨時查閱EMR http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/EMR_Hive_Commands.html。但是,我會說EMR在規模上(即數百萬到數十億記錄)更有價值。根據您的客戶端機器和數據,通過45,000條記錄可能比您認爲DynamoDB具有可預測的低延遲性能更爲簡單。 –

+0

我們要搜索的表格中有超過25億條記錄(總數),但顯然我們只會得到這些記錄的一個子集(45,000)。 –