MongoDB'de bir MapReduce yazdım ve yazmak/okumak için bir önbellek olarak global bir değişken kullanmak istiyorum. harita işlev örneklerinde genel değişkenlere sahip olmanın mümkün olmadığını biliyorum - her işlev örneğindeki genel değişkenini istiyorum. Bu tür bir işlev Hadoop'un MapReduce'unda var, bu yüzden MongoDB'de orada olmasını bekliyordum. Ama şu işe görünmüyor:MongoDB MapReduce: Harita fonksiyonu örneğindeki global değişkenler?
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';
}
}
bu mongodb en MapReduce uygulanmasında izin verilmez, yoksa ben (JS deneyimli değil) JavaScript yanlış bir şey yapıyorum? docs baktığımızda
Tamam, bunu tekrar gözden geçirdim ve burada bir karışıklık noktası var. Bu fonksiyon sizin haritanız veya azalmanız mı? "Geçici" önbellek istiyorsanız, Mongo'da geçici bir koleksiyon oluşturabilir ve haritadan ya da küçültün. Ancak, harita() ve küçültme() işlevlerini bilmeden, bu sorunu yalnızca azaltma aşamasında çözemezseniz söylemek zor. –
Bu harita işlevidir. Bunu azaltma işlevinde yapabilirim ama bu noktada yapmam gereken başka şeyler var, yani bazı değerleri topladım. Ayrıca, bir önbellek olarak hizmet vermek için MongoDB'de bir koleksiyon yaratabilirim - aslında ilk yaptığım şey buydu. Ancak bu ideal bir çözüm değildir (birden fazla harita işlevi örneğinin bulunması durumunda kilitleme sorunları yavaşlayabilir) + Bu, Hadoop'un MapReduce'da zaten var olan bir özelliktir, bu yüzden burada da bekliyordu. Bana bir nitpicker demekten çekinmeyin, ama MongoDB'de düzeltilmesi gereken bir şey olduğuna inanıyorum. –