使用DynamoDB和PHP查询照片中的关键字

时间:2013-03-13 19:21:42

标签: php amazon-dynamodb

要求:我在S3中存储照片,并希望用户能够查找包含他们在网页上输入的关键字的所有照片。

我的解决方案:我创建了2个表: 的 tblPhotos: 主键= HashKey:PhotoID 领域: PHOTOID, S3Loc​​ation

tblKeywords: 主键= HashKey(HashID)和RangeKey(关键字) 领域: HashID(始终设置为1), 关键字(一个大字符串;关键字后跟PhotoID) S3Loc​​ation

我正在使用以下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查询实现这种记录过滤的更好方法吗?我试图避免扫描效率非常低,虽然我的解决方案虽然有效但看起来并不是特别优雅!

1 个答案:

答案 0 :(得分:1)

如果您的主要目标是能够返回给定关键字的所有照片,我认为以下架构会更有意义:

HashKey =关键字

RangeKey = PhotoID

其他可能的字段:S3Name(如果它与PhotoID不同)