Questo script esegue la compact su tutte le collection per tutti i db di tutto il server.
mongo --host <servername> compact.js
utile quando si prova a risparmia spazio su disco anche se non è sempre detto che funzioni...
mercoledì 4 febbraio 2015
MongoDB - Script di compact per tutto il server
Etichette:
mongodb,
performance,
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
lunedì 17 novembre 2014
Client Retrofit - Problemi con java.util.Date
Nell'ultimo periodo sto utilizzando Retrofit per creare client di accesso a api rest.
Un problema comune è quando si vuole passare nella richiesta in @Body in post un parametro con un modello di classe che contenga un campo java.util.Date. Il problema nasce dalla conversione in Json per il client che si aspetta tutti dati in json in ingresso e a sua volta restituisce un json.
Ho risolto il problema configurando il serializzatore e deserializzatore per il client okclient:
private static RestAdapter buildClientRestAdapter(String uri) {
final OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.setReadTimeout(ClientDispatcher.timeout, TimeUnit.MILLISECONDS);
okHttpClient.setConnectTimeout(ClientDispatcher.timeout, TimeUnit.MILLISECONDS);
final OkClient httpClient = new OkClient(okHttpClient);
final GsonBuilder builder = new GsonBuilder();
builder.setDateFormat(DateFormat.MILLISECOND_FIELD);
builder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
@Override
public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
return new Date(json.getAsJsonPrimitive().getAsLong());
}
});
builder.registerTypeAdapter(Date.class, new JsonSerializer<Date>() {
@Override
public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) {
return src == null ? null : new JsonPrimitive(src.getTime());
}
});
final Gson gson = builder.create();
return new RestAdapter.Builder().setEndpoint(uri).setLogLevel(RestAdapter.LogLevel.FULL).setConverter(new GsonConverter(gson)).setClient(httpClient).build();
}
Un problema comune è quando si vuole passare nella richiesta in @Body in post un parametro con un modello di classe che contenga un campo java.util.Date. Il problema nasce dalla conversione in Json per il client che si aspetta tutti dati in json in ingresso e a sua volta restituisce un json.
Ho risolto il problema configurando il serializzatore e deserializzatore per il client okclient:
private static RestAdapter buildClientRestAdapter(String uri) {
final OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.setReadTimeout(ClientDispatcher.timeout, TimeUnit.MILLISECONDS);
okHttpClient.setConnectTimeout(ClientDispatcher.timeout, TimeUnit.MILLISECONDS);
final OkClient httpClient = new OkClient(okHttpClient);
final GsonBuilder builder = new GsonBuilder();
builder.setDateFormat(DateFormat.MILLISECOND_FIELD);
builder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
@Override
public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
return new Date(json.getAsJsonPrimitive().getAsLong());
}
});
builder.registerTypeAdapter(Date.class, new JsonSerializer<Date>() {
@Override
public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) {
return src == null ? null : new JsonPrimitive(src.getTime());
}
});
final Gson gson = builder.create();
return new RestAdapter.Builder().setEndpoint(uri).setLogLevel(RestAdapter.LogLevel.FULL).setConverter(new GsonConverter(gson)).setClient(httpClient).build();
}
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
mercoledì 23 aprile 2014
Cloudconf 2014 - Torino
Iscriviti a:
Post (Atom)