2012-04-06 8 views
8

He estado jugando con Map Reduce con CouchDB. Algunos de los ejemplos muestran una lógica posiblemente pesada dentro de las funciones de reducción de mapa. En un caso particular, estaban realizando bucles dentro del mapa.Vistas de CouchDB: ¿Cuánto procesamiento es aceptable en la reducción de mapa?

¿El mapa reduce la ejecución en todos los documentos posibles antes de que emita los documentos seleccionados?

Si es así, creo que eso significa que ejecutar cualquier tipo de procesamiento iterativo dentro de las funciones de reducción de mapa aumentarían la carga de procesamiento en un orden de magnitud, al menos.

Básicamente se reduce a la siguiente pregunta: ¿cuánto lógica se puede realizar en el mapa de reducir antes de su consulta un coste excesivo?

Respuesta

8

Un montón de procesamiento caro es aceptable en CouchDB map-reduce.

Las vistas de CouchDB (map-reduce) son más como CREATE INDEX que SELECT FROM.

Específicamente, CouchDB garantiza que una función de mapa ejecuta solo una vez por documento. (Bueno, en realidad una vez por documento cambia alguna vez.) Eso es lo que es el "mapa iterativo-reduzca".

Por lo tanto, supongamos que tiene 10,000 documentos y toman 1 segundo cada uno para procesar (que es mucho más alto que nunca he visto). Eso es 10,000 segundos o 2,8 horas para construir completamente la vista. Sin embargo, una vez que se completa la vista, consultar cualquier fila (?key=...) o segmento de fila (?startkey=...&endkey=...) lleva el mismo tiempo que consultar documentos directamente. El tiempo de búsqueda es O (log n) para el recuento de documentos.

En otras palabras, incluso si se tarda 1 segundo por documento para ejecutar el mapa, tomará unos milisegundos para obtener el resultado. (Por supuesto, la vista debe compilar primero, ya que en realidad es un índice.)

2

Consultar el archivo db es una actividad no relacionada del mapa/reducir de un documento. Por lo tanto, el costo de la consulta no se ve afectado por la complejidad del mapa/reducir.

En couchdb está consultando un índice. Esto significa que es una copia de sus datos en un formato optimizado para velocidad de consultas. Una consulta no es como un tablescan en sql. No recorre los registros.

Entonces, ¿cómo se hace este índice? Se realiza a través de la función de mapa. La función de mapa emite una clave y un valor. La clave se pone en el índice. Algunas funciones de mapas complicadas que usted menciona pueden repetir y emitir muchas claves y valores. Couchdb es inteligente y solo ejecuta un documento cuando lo necesita, generalmente en crear, actualizar y eliminar. Es por eso que es un mapa/reducción incremental.

Como puede ver, una función de mapa complicada puede afectar la creación, actualización y eliminación de velocidad. Pero nuevamente, couchdb es inteligente en cuanto a que puedes especificar qué tan obsoletos pueden estar los datos cuando consultas el índice.

+1

+1 He salido de la palabra "consulta" a favor de "solicitud" porque parece más preciso (para mis oídos). Usted * solicita * algunos datos de CouchDB a través de HTTP. En términos generales, como cualquier servidor web (escalable), la información está casi ahí esperando a que se lea el disco y se envíe por el cable. Sin computación involucrada. – JasonSmith

Cuestiones relacionadas