Semplice script per eliminare tutte le collection di un db ad esclusione di una lista di collection.
Visualizzazione post con etichetta javascript. Mostra tutti i post
Visualizzazione post con etichetta javascript. Mostra tutti i post
martedì 9 febbraio 2016
MongoDB - Script to Delete all collection with exclusion
Etichette:
javascript,
mongodb,
script
Ubicazione:
13048 Santhià VC, Italia
giovedì 4 febbraio 2016
MongoDB - Script per eseguire una purge di dati dalle varie collection di log
Capita alle volte di voler svuotare delle collection che contengo informazioni di log.
Questo script partendo dal nome del server ricerca tutti i db che iniziano con un certo nome, cicla tutte le collection (ad esclusione di quelle specificate), esegue una query per conteggiare i record che devono essere eliminati e poi elimina in base al numero di giorni che vogliamo mantenere sui log a partire da oggi.
Il campo di controllo di data è chiamato ts.
Questo script partendo dal nome del server ricerca tutti i db che iniziano con un certo nome, cicla tutte le collection (ad esclusione di quelle specificate), esegue una query per conteggiare i record che devono essere eliminati e poi elimina in base al numero di giorni che vogliamo mantenere sui log a partire da oggi.
Il campo di controllo di data è chiamato ts.
Etichette:
javascript,
mongodb,
script
Ubicazione:
13048 Santhià VC, Italia
venerdì 18 settembre 2015
MongoDB - Script di MapReduce con uso di scope su map dinamico
Dovendo realizzare una MapReduce per il calcolo dei valori massimi e minimi in un determinato periodo (meteorologico) mi sono scontrato col il problema di passare ad una funzione di Map dei parametri dinamici provenienti da un ciclo.
Per risolvere questo problema bisogna utilizzare un parametro di scope quando si lancia l'esecuzione della MapReduce:
es:
var KEYS = {FIELD : 'test',PERIOD : 'Day'};
dbOne.rawdata.mapReduce(map,reduceMax,{out:{inline:1}, scope : {KEYS:KEYS}}).results;
e nella map posso usarlo:
var map = function(){
if(KEYS.PERIOD == 'Day')
...
emit(somefunction, this[KEYS.FIELD]);
};
Per risolvere questo problema bisogna utilizzare un parametro di scope quando si lancia l'esecuzione della MapReduce:
es:
var KEYS = {FIELD : 'test',PERIOD : 'Day'};
dbOne.rawdata.mapReduce(map,reduceMax,{out:{inline:1}, scope : {KEYS:KEYS}}).results;
e nella map posso usarlo:
var map = function(){
if(KEYS.PERIOD == 'Day')
...
emit(somefunction, this[KEYS.FIELD]);
...
};
esempio completo:
Etichette:
javascript,
MapReduce,
meteo,
mongodb,
script
Ubicazione:
13048 Santhià VC, Italia
giovedì 4 dicembre 2014
MongoDB - Script per rigenerare _id
Alle volte capita che per sbaglio vengano inseriti dei valori non generati da mongo per _id.
es:
{"_id":1, "a":1},
{"_id":2, "a":3}.. etc..etc
Mongo non prevede l'unset del _id
uno script del genere
db.events.update({},{$set : {_id:new ObjectId()}},{multi:true});
ritorna questo errore:
After applying the update to the document {_id: 4 , ...}, the (immutable) field '_id' was found to have been altered to _id: ObjectId('54801ec49103c90347485eaf')
il modo migliore è quello di prendere tutti i valori ribaltarli su una collection di appoggio (eliminando il vecchio _id) e rinominare la collection in quella sorgente.
es:
{"_id":1, "a":1},
{"_id":2, "a":3}.. etc..etc
Mongo non prevede l'unset del _id
uno script del genere
db.events.update({},{$set : {_id:new ObjectId()}},{multi:true});
ritorna questo errore:
After applying the update to the document {_id: 4 , ...}, the (immutable) field '_id' was found to have been altered to _id: ObjectId('54801ec49103c90347485eaf')
il modo migliore è quello di prendere tutti i valori ribaltarli su una collection di appoggio (eliminando il vecchio _id) e rinominare la collection in quella sorgente.
Etichette:
javascript,
mongodb
Ubicazione:
13048 Santhià VC, Italia
giovedì 13 novembre 2014
MongoDB - Script per profile su tutto il server
Abilita il profile per tutti i db del mongo server esclusi local e admin.
per interrogare tutti i profile con l'elenco delle ultime 5 query che superano i 5 millis
Etichette:
javascript,
mongodb,
performance,
profile
Ubicazione:
13048 Santhià VC, Italia
lunedì 21 luglio 2014
MongoDB - Script to check Collections Size
Script di utils per recuperare la collection size di ogni db del vostro mongo.
da lanciare con: mongo mongo check_collection_size.js
permette di ottenere la size delle collection di tutti i db in modo da poterla monitorare con qualche app tipo jmeter o nagios.
il risultato:
[ {
"name" : "meteoArpa",
"collections" : [
{
"name" : "data",
"storageSize" : "680.00 KB",
"size" : "510.89 KB",
"count" : 519
},
{
"name" : "pluvio",
"storageSize" : "21.46 MB",
"size" : "19.97 MB",
"count" : 20779
},
{
"name" : "system.indexes",
"storageSize" : "8.00 KB",
"size" : "336 B",
"count" : 3
},
{
"name" : "temperature",
"storageSize" : "21.46 MB",
"size" : "20.00 MB",
"count" : 20807
}
]
},
{
"name" : "pcat",
"collections" : [
{
"name" : "products",
"storageSize" : "8.00 KB",
"size" : "3.58 KB",
"count" : 11
},
{
"name" : "system.indexes",
"storageSize" : "8.00 KB",
"size" : "112 B",
"count" : 1
}
]
},
{
"name" : "admin",
"collections" : [ ]
}
]
da lanciare con: mongo mongo check_collection_size.js
permette di ottenere la size delle collection di tutti i db in modo da poterla monitorare con qualche app tipo jmeter o nagios.
il risultato:
[ {
"name" : "meteoArpa",
"collections" : [
{
"name" : "data",
"storageSize" : "680.00 KB",
"size" : "510.89 KB",
"count" : 519
},
{
"name" : "pluvio",
"storageSize" : "21.46 MB",
"size" : "19.97 MB",
"count" : 20779
},
{
"name" : "system.indexes",
"storageSize" : "8.00 KB",
"size" : "336 B",
"count" : 3
},
{
"name" : "temperature",
"storageSize" : "21.46 MB",
"size" : "20.00 MB",
"count" : 20807
}
]
},
{
"name" : "pcat",
"collections" : [
{
"name" : "products",
"storageSize" : "8.00 KB",
"size" : "3.58 KB",
"count" : 11
},
{
"name" : "system.indexes",
"storageSize" : "8.00 KB",
"size" : "112 B",
"count" : 1
}
]
},
{
"name" : "admin",
"collections" : [ ]
}
]
Etichette:
javascript,
json,
mongodb,
monitoring,
performance
Ubicazione:
13048 Santhià VC, Italia
giovedì 24 aprile 2014
MongoDB - esempi di scripting
In questo file potete trovare vari esempi di scripting per mongo divisi in classi/metodi js
L'uso è semplice
mongo --host localhost
> load("global.js")
a questo punto avete caricato gli script e potete usarli es: meteolog.extract();
Gli script sono molto utili per seguire fix o altri tipi di operazioni massive lato db. molto più veloce che realizzarle sulle app client.
Un classico esempio è quello di estrarre i dati dopo averli elaborati in tempo reale csv o simili.
meteolog = {};
var dbMeteo = db.getSisterDB("Meteo");
meteolog.extract = function(){
var coll = dbMeteo.Meteolog;
var count = coll.count();
print("Tot record :" + count);
var cursor = coll.find();
var line = "";
cursor.forEach(function(logData) {
line += logData.n + ", " + logData.time;
print(line);
});
}
L'uso è semplice
mongo --host localhost
> load("global.js")
a questo punto avete caricato gli script e potete usarli es: meteolog.extract();
Gli script sono molto utili per seguire fix o altri tipi di operazioni massive lato db. molto più veloce che realizzarle sulle app client.
Un classico esempio è quello di estrarre i dati dopo averli elaborati in tempo reale csv o simili.
meteolog = {};
var dbMeteo = db.getSisterDB("Meteo");
meteolog.extract = function(){
var coll = dbMeteo.Meteolog;
var count = coll.count();
print("Tot record :" + count);
var cursor = coll.find();
var line = "";
cursor.forEach(function(logData) {
line += logData.n + ", " + logData.time;
print(line);
});
}
Etichette:
javascript,
mongodb
Ubicazione:
13048 Santhià VC, Italia
venerdì 28 dicembre 2012
MongoDB - MapReduce - Max e Min nel periodo
Utilizzo la piccola app del Meteo per fare qualche esperimento con le Map/Reduce
Devo ottenere il valore massimo e minino dei valori giornalieri, mensili e annuali da una collection contentente i logger raccolti ogni 5 minuti.
la collection sorgente (Meteolog):
la funzionalità di map sul singolo giorno (variabile time_short)
La funzionalità di reduce:
Usiamo le funzionalità:
db.Meteolog.mapReduce(map,reduce,{out:{merge:"reduceMaxMinDay"}});
db.reduceMaxMinDay.find();
result:
per modificare il periodo di calcolo basta modficare la variabile che permette il raggruppamento delle info:
es: mesile --> var time_short = this.time.getFullYear() + "-" + this.time.getMonth();
es: annulale --> var time_short = this.time.getFullYear();
Devo ottenere il valore massimo e minino dei valori giornalieri, mensili e annuali da una collection contentente i logger raccolti ogni 5 minuti.
la collection sorgente (Meteolog):
{ "_id" : ObjectId("50d5a8a01e05acfe08c086fb"), "className" : "it.marcoberri.mbmeteo.model.Meteolog" , "n" : 1643, "time" : ISODate("2012-12-09T00:33:00Z"), "interval" : 5, "indoorHumidity" : 65, "indo orTemperature" : 19.5, "outdoorHumidity" : 72, "outdoorTemperature" : -0.6, "absolutePressure" : 997 .2, "wind" : 0, "gust" : 0.3, "direction" : "SE", "relativePressure" : 1025, "dewpoint" : -5, "windc hill" : -0.6, "hourRainfall" : 0, "dayRainfall" : 6.9, "weekRainfall" : 12.3, "monthRainfall" : 12.3 , "totalRainfall" : 12.3, "windLevel" : 0, "gustLevel" : 1 }{ "_id" : ObjectId("50d5a8a01e05acfe08c086fc"), "className" : "it.marcoberri.mbmeteo.model.Meteolog" , "n" : 1644, "time" : ISODate("2012-12-09T00:38:00Z"), "interval" : 5, "indoorHumidity" : 65, "indo orTemperature" : 19.5, "outdoorHumidity" : 71, "outdoorTemperature" : -0.8, "absolutePressure" : 997 .3, "wind" : 0.3, "gust" : 0.7, "direction" : "S", "relativePressure" : 1025.1, "dewpoint" : -5.4, " windchill" : -0.8, "hourRainfall" : 0, "dayRainfall" : 6.9, "weekRainfall" : 12.3, "monthRainfall" : 12.3, "totalRainfall" : 12.3, "windLevel" : 1, "gustLevel" : 1 } etc.la funzionalità di map sul singolo giorno (variabile time_short)
map = function(){
var fields =['outdoorTemperature','outdoorHumidity','absolutePressure','relativePressure','wind','gust','dewpoint','windchill','hourRainfall','dayRainfall','weekRainfall','monthRainfall','totalRainfall','windLevel','gustLevel'];
var objs = {};
for( var f=0; f<fields.length;f++) {
var k = fields[f];
objs[k] = { "min" : this[k], "max" : this[k]};
}
var time_short = this.time.getFullYear() + "-" + this.time.getMonth() + "-" + this.time.getDate();
emit(time_short,objs)
}La funzionalità di reduce:
reduce = function(key, values){
var fields =['outdoorTemperature','outdoorHumidity','absolutePressure','relativePressure','wind','gust','dewpoint','windchill','hourRainfall','dayRainfall','weekRainfall','monthRainfall','totalRainfall','windLevel','gustLevel'];
var res = values[0];
for ( var i=1; i<values.length; i++ ) {
for( var f=0; f<fields.length;f++) {
var k = fields[f];
var v = values[i][k];
if ( v.min < res[k].min )
res[k].min = v.min;
if ( v.max > res[k].max )
res[k].max = v.max;
}
}
return res;
}Usiamo le funzionalità:
db.Meteolog.mapReduce(map,reduce,{out:{merge:"reduceMaxMinDay"}});
db.reduceMaxMinDay.find();
result:
{ "_id" : "2012-11-23", "value" : { "outdoorTemperature" : { "min" : -2.3, "max" : 5.6 }, "outdoorHu midity" : { "min" : 79, "max" : 90 }, "absolutePressure" : { "min" : 996.8, "max" : 999 }, "relative Pressure" : { "min" : 1024.6, "max" : 1026.8 }, "wind" : { "min" : 0, "max" : 0.7 }, "gust" : { "min " : 0, "max" : 1 }, "dewpoint" : { "min" : -4.7, "max" : 2.4 }, "windchill" : { "min" : -2.3, "max" : 5.6 }, "hourRainfall" : { "min" : 0, "max" : 0 }, "dayRainfall" : { "min" : 0, "max" : 0 }, "weekR ainfall" : { "min" : 0, "max" : 0 }, "monthRainfall" : { "min" : 4.2, "max" : 4.2 }, "totalRainfall" : { "min" : 4.2, "max" : 4.2 }, "windLevel" : { "min" : 0, "max" : 1 }, "gustLevel" : { "min" : 0, "max" : 1 } } }{ "_id" : "2012-11-9", "value" : { "outdoorTemperature" : { "min" : -2.3, "max" : 13.4 }, "outdoorHu midity" : { "min" : 26, "max" : 75 }, "absolutePressure" : { "min" : 992.9, "max" : 999.4 }, "relati vePressure" : { "min" : 1020.7, "max" : 1027.2 }, "wind" : { "min" : 0, "max" : 1 }, "gust" : { "min " : 0, "max" : 1.7 }, "dewpoint" : { "min" : -7.3, "max" : 0.3 }, "windchill" : { "min" : -2.3, "max " : 13.4 }, "hourRainfall" : { "min" : 0, "max" : 8.1 }, "dayRainfall" : { "min" : 0, "max" : 12.3 } , "weekRainfall" : { "min" : 0, "max" : 20.4 }, "monthRainfall" : { "min" : 0, "max" : 20.4 }, "tota lRainfall" : { "min" : 0, "max" : 20.4 }, "windLevel" : { "min" : 0, "max" : 1 }, "gustLevel" : { "m in" : 0, "max" : 2 } } } etc.per modificare il periodo di calcolo basta modficare la variabile che permette il raggruppamento delle info:
es: mesile --> var time_short = this.time.getFullYear() + "-" + this.time.getMonth();
es: annulale --> var time_short = this.time.getFullYear();
Etichette:
javascript,
MapReduce,
mongodb
Ubicazione:
13048 Santhia' VC, Italia
Iscriviti a:
Post (Atom)