我一直在关注dynamodb,因为它是目前我能找到的唯一一个完全可扩展的nosql系统,它可以消除数据库管理的头痛。
我目前有一个RSS提要索引系统,其中提要数据插入到mongodb中,然后sphinxsearch循环遍历整个数据库并索引各个字段(我使用main+delta索引,但不需要在这里解释)。
使用sphinx,我可以做复杂的查询和排序,它给我一个有序的文章ID数组,一旦我用这些ID查询mongo,我就会重新排序mongo数组以匹配sphinx给我的顺序。
function prepare_for_mongo($keys){
$results_keys_mongo = array();
if(sizeof($keys)>0){
foreach($keys as $key=>$value){
$results_keys_mongo[$key] = new MongoID($value);
}
}
return $results_keys_mongo;
}
function sort_mongo_results($documents,$keys){
$documents_sorted = array();
foreach($keys as $key){
$documents_sorted[$key] = $documents[$key];
}
return $documents_sorted;
}
function retrieve_records($keys) {
$m_keys = $this->prepare_for_mongo($keys);
if(!empty($m_keys)) {
$records = iterator_to_array($this->mongodb->find(array(
'_id' => array('$in' => $m_keys)
)));
$records = $this->sort_mongo_results($records,$keys);
} else {
return array();
}
}
现在,在我的任务迁移到dynamodb,我怎么能实现一个类似的查询与php的dynamodb,我可以传递一个列表的哈希键(唯一的哈希表示文章记录),然后dynamo给我的所有记录包含这些哈希键的结果?
我不确定是否存在解决方案。SphinxSearch似乎就是为了在指向SQL数据库时完成这项任务而构建的。使用DynamoDB (NoSQL),您可能必须自己编写相当于SphinxSearch的程序来索引和搜索数据,同时将备份索引存储在DynamoDB中。在这种情况下,"答案"至少是一个中等规模的开发项目。
我确实找到了解决方案,aws sdk功能为batch_get_item
,然后我可以传递一个haskey的数组。