mango example batch_size alldocs all list mapreduce couchdb

list - example - pouchdb batch_size



¿Por qué el límite de reducción de CouchDB está habilitado por defecto?(¿Es mejor aproximar SQL JOINS en las vistas de MapReduce o en las vistas de lista?) (1)

Estoy usando CouchDB, y quiero hacer un mejor uso de MapReduce al consultar datos.

Mi caso de uso exacto es el siguiente:

Tengo muchas encuestas. Cada encuesta tiene un meterNumber, meterReading y meterReadingDate, por ejemplo:

{ meterNumber: 1, meterReading: 2050, meterReadingDate: 1480000000000 }

Luego utilizo una función de Mapa, produzco lecturas por meterNumber. Hay muchas teclas que se repiten (leyendo el mismo medidor en diferentes fechas). es decir

[ [meterNumber, {reading: xxx, readingDate: xxx}], [meterNumber, {reading: xxx, readingDate: xxx}], [meterNumber, {reading: xxx, readingDate: xxx}], etc ]

Luego, los agrupo antes de enviarlos a la función de reducción, y la función de reducción realmente debe EXPANDIR los valores establecidos. Es decir, quiero esto:

[ [meterNumber, [{reading:xxx, readingDate: xxx}, {reading:xxx, readingDate: xxx}, {reading:xxx, readingDate: xxx}]], [meterNumber, [{reading:xxx, readingDate: xxx}, {reading:xxx, readingDate: xxx}, {reading:xxx, readingDate: xxx}]], [meterNumber, [{reading:xxx, readingDate: xxx}, {reading:xxx, readingDate: xxx}, {reading:xxx, readingDate: xxx}]], etc ]

Para ejecutar esta vista de MapReduce en CouchDB tuve que permitir este tipo de conjunto de resultados ( Couchdb - ¿Es posible desactivar el error de reduction_overflow_error? ).

Esto me sugiere que puedo encontrarme con problemas de rendimiento con grandes conjuntos de resultados. ¿Es este el caso? ¿Por qué tendrías que habilitar específicamente esta configuración en CouchDB?

*** EDITAR

La respuesta aceptada a continuación me indicó que lo que estaba haciendo en MapReduce también era posible (y mejor) usando listas. Aquí hay otra buena respuesta de desbordamiento de pila sobre el mismo tema: La mejor forma de hacer uno-a-muchos "UNIRSE" en CouchDB

*** EDITAR

Aquí hay una referencia de la documentación de CouchDB: http://guide.couchdb.org/draft/transforming.html


Una función de reduce tiene la intención de reducir los valores asociados con claves dadas.

CouchDB reduce_limit está aquí para detectar funciones de reducción mal diseñadas, que es lo que hiciste mediante la concatenación de valores ... Pero no entres en pánico: cualquier recién llegado en CouchDB haría el mismo error.

El problema con la concatenación de valores en una función de reduce es que:

  1. es totalmente innecesario (si necesita toda la lista, solo use una sola función de map ),
  2. es muy ineficiente: su índice será cada vez más grande en su disco, y tendrá más y más tiempo de acceso al disco.

Entonces ... Simplemente escriba una función de map mínima tal como:

function(o){ emit(o.meterNumber); }

No escriba ninguna función de reduce . Y llame a la vista con include_docs=true .

Pero tal vez no estaba satisfecho con el formato de datos? No hay problema: tiene funciones de list para esto. Solo recuerde que reduce funciones de map y reduce deben usarse para el procesamiento de datos puros, no para fines de formateo.