CouchDB: Devuelve los documentos más nuevos de tipo según la marca de tiempo

Tengo un sistema que acepta actualizaciones de estado de una variedad de fuentes únicas, y cada actualización de estado crea un nuevo documento en la siguiente estructura:

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

Datos puramente de ejemplo, pero da a entender la idea.

Ahora, estos documentos se generan a intervalos, una vez más o menos una hora. Una hora después, podríamos insertar:

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

Todo lo que me interesa es ver la última actualización de cada fuente única. Actualmente estoy haciendo esto tomando un mapa de:

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

Y una reducción 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>

Y consultar los datos como reducir congroup=true. Esto funciona como se esperaba y proporciona un resultado clave de solo las últimas actualizaciones.

El problema es que es terriblemente lento y me obliga areduce_limit=false En la configuración de CouchDB.

Se siente como que tiene que haber una manera más eficiente de hacer esto. Actualizar el mismo documento no es una opción: el historial es importante, aunque no lo requiero en este caso. El procesamiento del lado del cliente de los datos tampoco es una opción, ya que se trata de un CouchApp y la cantidad de documentos en el sistema es bastante grande y no es práctico enviarlos por cable.

Gracias por adelantado.

Respuestas a la pregunta(3)

Su respuesta a la pregunta