CouchDB: Retorna os mais recentes documentos do tipo com base na data e hora

Eu tenho um sistema que aceita atualizações de status de uma variedade de fontes exclusivas e cada atualização de status cria um novo documento na seguinte estrutura:

<code>{
 "type": "status_update",
 "source_id": "truck1231",
 "timestamp": 13023123123,
 "location": "Boise, ID"
}
</code>

Dados puramente exemplo, mas obtém a ideia.

Agora, esses documentos são gerados no intervalo, uma vez por hora. Uma hora depois, podemos inserir:

<code>{
 "type": "status_update",
 "source_id": "truck1231",
 "timestamp": 13023126723,
 "location": "Madison, WI"
}
</code>

Tudo o que estou interessado em fazer é ver a atualização mais recente de cada fonte exclusiva. Atualmente estou fazendo isso pegando um mapa de:

<code>function(doc) {
  if (doc.type == "status_update") {
    emit(doc.source_id, doc);
  }
}
</code>

E uma redução de:

<code>function(keys, values, rereduce) {
  var winner = values[0];
  var i = values.length;
  while (i--) {
    var val = values[i];
    if (val.timestamp > winner.timestamp) winner = val;
  }
  return winner;
}
</code>

E consultar os dados como uma redução comgroup=true. Isso funciona como esperado e fornece um resultado com chave apenas das atualizações mais recentes.

O problema é que é terrivelmente lento e requer que eureduce_limit=false na configuração do CouchDB.

Parece que tem que haver uma maneira mais eficiente de fazer isso. A atualização do mesmo documento não é uma opção - o histórico é importante, embora eu não exija isso neste caso. O processamento dos dados do lado do cliente não é uma opção, já que este é um CouchApp e a quantidade de documentos no sistema é realmente muito grande e não é prática para enviá-los por toda a rede.

Desde já, obrigado.

questionAnswers(3)

yourAnswerToTheQuestion