0
要求:我在S3中存儲照片,並希望用戶能夠查找包含他們在網頁上鍵入的關鍵字的所有照片。使用DynamoDB和PHP查詢照片中的關鍵字
我的解決辦法:我已創建2個表: tblPhotos: 主鍵= HashKey:PHOTOID 字段: PHOTOID, S3Location
tblKeywords: 主鍵= HashKey(HashID)和RangeKey(關鍵字) Fields: HashID(始終設置爲1), 關鍵字(一個大字符串;關鍵字後跟PhotoID) S3位置
我用下面的PHP代碼,發現有我的關鍵字中的所有記錄:
$table_name = 'tblKeywords';
$keywordresponse = $dynamodb->query(array(
'TableName' => $table_name,
'HashKeyValue' => array(AmazonDynamoDB::TYPE_STRING => '1'),
'RangeKeyCondition' => array(
'ComparisonOperator' => AmazonDynamoDB::CONDITION_BEGINS_WITH,
'AttributeValueList' => array(
array(AmazonDynamoDB::TYPE_STRING => $_GET['sSearch'])
),
)
));
if ($keywordresponse->isOK())
{
foreach ($keywordresponse->body->Items as $item)
{
$aaData[] = array(
'Keyword' => (string) $item->Keyword->{AmazonDynamoDB::TYPE_STRING},
'S3Location' => (string) $item->S3Location->{AmazonDynamoDB::TYPE_STRING}
);
}
echo json_encode(array('keywordstatus' => 1, 'aaData' => $aaData));
}
else
{
echo json_encode(array('keywordstatus' => 0));
}
正如你可以看到我傳遞SSEARCH作爲對搜索結果進行過濾的關鍵字。我的問題是,您是否知道使用DynamoDB查詢實現記錄過濾的更好方法?我試圖避免掃描效率非常低,雖然我的解決方案雖然工作,但它似乎並不特別優雅!
感謝您的答覆,但我認爲它只會讓我有一個「行」每個主鍵?換句話說,每個關鍵字只有一個記錄。我希望數以百計的photoID擁有相同的關鍵字。除非我錯過了什麼? – SRG 2013-03-13 23:38:34
我應該調用密鑰的第一部分「哈希」而不是「主」(上面編輯)......當你有一個「哈希和範圍類型主鍵」時,第一個哈希值被假定爲有重複。哈希和範圍的組合是唯一的「主鍵」值... – Scrappydog 2013-03-14 20:10:28
啊有趣的 - 我試過它的另一種方式,與PhotoID是哈希鍵和關鍵字是rangekey沒有工作。 1 PhotoID可能有多個關鍵字,所以我需要測試一下,看看它是否可以應對。我會盡力讓你知道,謝謝! – SRG 2013-03-14 20:16:30