martedì 25 luglio 2017

MongoDB, C and Bulk Operation


E' molto tempo che voglio provare ad eseguire delle operazione su MongoDB utilizzando il Linguaggio C. Sono tantissimi anni che non uso più il C (circa 18.. dai tempi dei CGI sulla WebSphere Commerce Suite di IBM).

Per prima cosa vediamo come installare sotto Debian/Ubuntu il driver con i relativi sorgenti.

apt-get install libmongoc-1.0-0

A questo punto inizio ad analizzare il funzionamento del driver, la documentazione è molto valida.

Il problema che voglio risolvere è un calcolo su un numero elevato di record. Per testing utilizzo il db del Meteo. Il calcolo prevede di prendere i dati presenti nell'archivio delle piogge (Field RC) che sono in realtà un numero incrementale azzerato ad ogni riavvio della console del meteo. Quindi oggi il contatore è 200, domani 200, dopodomani 201, quindi andando per differenza oggi è caduto 1 mm di pioggia.

La struttura dell'object su cui vengono eseguite le query di mongo è la seguente:


 I record sono circa 1 M.



per la compilazione del pacchetto basta eseguire il comando:


sudo gcc -o raindata raindata.c utils.c $(pkg-config --cflags --libs libmongoc-1.0)

 La cosa molto interessante è la funzionalità di Bulk insert molto simile alle transazione dei classici db relazioni. Ovvero si caricano tutti i dati in una struttura e poi si esegue una flush e tutti i dati vengo inseriti in modo molto veloce.

Non mi soffermo tanto sul calcolo del dato puro ma sulle performance di inserimento. 
La prima esecuzione è con insert ripetitive, la seconda con la funzionalità di bulk. 

Si passa da 8 minuti a 12 secondi!!



come sempre trovate tutto il sorgente sul github https://github.com/marcoberri/mbmeteomongoc

mercoledì 19 aprile 2017

SqlServer 2014 - Spring Oauth2 Sql Table Script


Script per la creazione delle tabelle di Spring Security per la gestione del Oauth2 sul db di SQLServer 2014

https://gist.github.com/marcoberri/b02d5c523c0e511bdd18bda18ee5eb38





sabato 8 aprile 2017

Microservices : Spring Boot + Eureka + Zuul + OAuth2

Esempio completo della gestione a Microservices con Spring Boot e tutto il pacchetto completo  di gestione di proxy e bilanciamento. Per la gestione dell'autenticazione sempre attraverso i services di spring con Oauth2. L'esempio è basato su Jpa su Hibernate e MySql.

Trovate i sorgenti completi https://github.com/marcoberri/microservices-example



Gestione della security


mercoledì 28 dicembre 2016

Syma - X8HW

Regalo di Natale Graditissimo!!!

Un bellissimo Syma X8HW.

Il mio primo drone è stato un syma e questo regalato da Cinzia dimostra come si sono evoluti negli ultimi 4 anni. Abbiamo una stabilità per i filmati ottima, è quasi impossibile schiantarlo per una manovra sbagliata facendolo ribaltare in aria. La stabilità data dalle dimensioni delle eliche e dalle dimensioni è formidabile, certo non è paragonabile ad un 250 da race ma per filmati da molta affidabilità paragonata al prezzo.

Ecco un video fresco fresco...



Il mantenimento dell'altitudine è buono, essendo molto leggero una bava di vento laterale lo rende meno manovrabile e meno stabile. A mio parere per panoramiche a 360 gradi è utile usarlo in assenza di vento per avere un discorso di stabilità laterale.



giovedì 18 agosto 2016

WpScan - Trovare le criticità del vostro blog in Wordpress

Stavo cercando un tool per analizzare le criticità esposte di un Wordpress.
Cosa di meglio di WpScan compreso nella distribuzione linux Kali...
I risultati sono stupefacenti quanto paurosi....

martedì 29 marzo 2016

Bilanciare due Tomcat con apache 2.4

Capita spesso di dover realizzare un servizio session-less che punti a due o più nodi di tomcat pilotati da un classico balancer di apache2.

Ecco l'esperimento su una macchina virtuale.


mercoledì 10 febbraio 2016

MongoDB - Backup di grandi db

Nasce, molte volte, il problema di eseguire un backup su una grande mole di dati.

Uno dei modi possibili (vedi doc) è prendere i file dei db di mongo e semplicemente copiarli.

Il nostro problema nasce che non tutti i db devono essere backuppati per essere ribaltati, e il nome dei file di archivio di mongo non sono parlanti.

Una soluzione e configurare ogni db in una singola cartella con i parametri di configurazione

storage.directoryPerDB

un'altro parametro ottimo è:

storage.wiredTiger.engineConfig.directoryForIndexes

i db vengono archiviati in cartelle separate e divisi in due cartelle collections e index così eventualmente in fase di copia dei dati è possibile escludere le folder degli indici risparmiando spazio e tempo.


Questa configurazione necessita di un mongodump e un mongorestore. In caso di ReplicaSet basta fermare il primario, svuotare le cartelle, cambiare le conf e attendere che si replichi con il secondario che è diventato primario. Al termine il primario diventa nuovamente secondario e viceversa.

MongoDB version 3.0.7