要求:我将照片存储在 S3 中,并希望用户能够查找包含他们在网页上键入的关键字的所有照片。
我的解决方案:我创建了 2 个表: tblPhotos: Primary Key=HashKey: PhotoID Fields: PhotoID, S3Location
tblKeywords: Primary Key=HashKey (HashID) 和 RangeKey (Keyword) 字段:HashID(始终设置为 1)、Keyword(一大串;关键字后跟 PhotoID) S3Location
我正在使用以下 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 查询实现这种记录过滤的更好方法吗?我试图避免扫描,因为它的效率非常低,尽管我上面的解决方案在它工作时似乎并不是特别优雅!