Ho scritto una MapReduce in MongoDB e vorrei usare una variabile globale come cache per scrivere/leggere da. So che non è possibile avere variabili globali attraverso istanze di funzioni di mappa - Voglio solo una variabile globale all'interno di ogni istanza di funzione. Questo tipo di funzionalità esiste in MapReduce di Hadoop quindi mi aspettavo che fosse lì in MongoDB. Ma quanto segue non sembra funzionare:MongoDB MapReduce: variabili globali all'interno dell'istanza della funzione mappa?
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';
}
}
È questo il non ammessi nell'attuazione MapReduce di MongoDB, o sto facendo qualcosa di sbagliato in JavaScript (non esperto in JS)?
OK, ho sfogliò di nuovo e v'è un punto di confusione qui. Questa funzione è la tua mappa o la tua riduzione? Se si desidera una cache "ad hoc", è sufficiente creare una raccolta temporanea in Mongo e fare riferimento alla mappa o ridurre. Tuttavia, senza conoscere sia la mappa() e ridurre() funziona è difficile da dire, se non si può semplicemente risolvere questo problema in fase di riduzione. –
Questa è la funzione della mappa. Potrei farlo alla funzione di riduzione ma ho altre cose che devo fare a quel punto, cioè aggregare alcuni valori. Potrei anche creare una raccolta in MongoDB per fungere da cache - in effetti è quello che ho fatto in primo luogo. Tuttavia questa non è una soluzione ideale (i problemi di blocco se ci sono più istanze di funzioni di mappe possono rallentare) + questa è una funzionalità già presente in MapReduce di Hadoop, quindi lo aspettavamo anche qui. Sentiti libero di chiamarmi un nitpicker, ma credo che sia qualcosa che deve essere risolto in MongoDB. –