Escribí un MapReduce en MongoDB y me gustaría utilizar una variable global como caché para escribir/leer. Sé que no es posible tener variables globales en instancias de función de mapa - Solo quiero una variable global dentro de cada instancia de función. Este tipo de funcionalidad existe en MapReduce de Hadoop, así que esperaba que estuviera allí en MongoDB. Pero el siguiente no se parece funcionar:MongoDB MapReduce: ¿Variables globales dentro de la instancia de función de mapa?
var cache = {}; // Does not seem to work!
function() {
var hashValue = this.varValue1 + this.varValue2;
if(typeof(cache[hashValue])!= 'undefined') {
// Do nothing, we've processed at least one input record with this hash
} else {
// Process the input record
// Cache the record
cache[hashValue] = '1';
}
}
No es esto permitido en la implementación de MapReduce de MongoDB, o estoy haciendo algo mal en JavaScript (no experimentado en JS)?
OK, he hojeado esto otra vez y aquí hay un punto de confusión. ¿Es esta función su mapa o su reducen? Si desea un caché "ad-hoc", puede simplemente crear una colección temporal en Mongo y hacer referencia a eso desde el mapa o reducirlo. Sin embargo, sin conocer las funciones map() y reduce() es difícil decir si no puede resolver este problema en la fase de reducción. –
Esta es la función de mapa. Podría hacer esto en la función de reducción, pero tengo otras cosas que debo hacer en ese momento, es decir, agregar algunos valores. También podría crear una colección en MongoDB para servir como caché, de hecho eso es lo que hice en primer lugar. Sin embargo, esta no es una solución ideal (problemas de bloqueo si hay varias instancias de función de mapa pueden desacelerar) + esta es una función que ya existe en MapReduce de Hadoop, por lo que también la esperaba aquí. Siéntase libre de llamarme un pesimista, pero creo que es algo que debe corregirse en MongoDB. –