我一直将 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 为我提供包含这些哈希键的所有记录的结果?