Visualizzazione post con etichetta Database. Mostra tutti i post
Visualizzazione post con etichetta Database. Mostra tutti i post

domenica 9 ottobre 2016

Visual Studio Dev Essentials

Per chi come me è costantemente alla ricerca di nuovi stimoli per migliorare le proprie conoscenze e di tenersi al passo con lo stato dell’arte, voglio condividere un suggerimento utile a chi vuole implementare soluzioni con il meglio delle tecnologie Microsoft.
Visual Studio Dev Essentials, il cui claim è Everything you need all in one place, ed effettivamente è un po’ un *santo graal* dal quale attingere strumenti di sviluppo, formazione di livello altissimo, e *last but not least*, un credito mensile di 25€ da spendere in servizi Microsoft Azure.


Tra le risorse messe a disposizione, quella, a mio avviso, più preziosa, è proprio l’accesso temporaneo o a tempo indeterminato ai corsi, del quale ho già cominciato ad usufruire, approfondendo gli argomenti relativi allo stato dell’arte del nuovo stack per applicazioni web di Microsoft ASP.Net Core con il corso Building a Web App with ASP.NET Core, MVC 6, EF Core, and Angular.



Enjoy


venerdì 16 settembre 2016

Internet of Things & M.E.A.N Stack - (Part II)

Continuiamo il discorso iniziato con la nota precedente, Internet of Things & M.E.A.N Stack, nel quale abbiamo esplorato alcune opzioni per implementare un web server che fornisse il nostro sistema delle funzionalità C.R.U.D necessarie per interfacciarci al database NoSQL mongoDB.
Lo step successivo è quello di utilizzare il framework M.E.A.N. per creare una Single Page Application che ci consenta di visualizzare i dati storici e real-time prodotti dal nostro sistema IoT.
Per i dettagli relativi all’implementazione, rimandiamo al repository GitHub, nel quale sono disponibili sia i sorgenti che la descrizione degli strumenti utilizzati e dei passi seguiti.
La web app realizzata si compone di una home page che si presenta come:
home-page
La seconda pagina, dedicata alla visualizzazione dei dati storici salvati dal client mqtt realizzato in precedenza mediante il servizio REST, ha una visualizzazione tabellare dei dati
home-page
ed una grafica
home-page
Infine, last but not least, abbiamo una vista nella quale i dati provenienti dal campo, vengono visualizzati in tempo reale.
home-page
Il prossimo obiettivo, è quello di realizzare un caso non simulato di dispositivo IoT. A tal fine proveremo ad utilizzare l’implementazione Embedded C++ del progetto paho,
home-page
in abbinamento ad un controller Arduino Due.
home-page

Have Fun





giovedì 26 aprile 2012

MySQL case sensitiveness on Windows Platform

Come si evince dal titolo, il problema è il seguente: Se creo un database o una tabella su un RDBMS MySQL installato su sistemi windows, i relativi nomi sono sempre minuscoli (lowercase). La ragione di tale comportamento sta nel fatto che il filesystem del sistema operativo di Microsoft è case insensitive, ovvero il nome di files e/o cartelle viene sempre considerato minuscolo. Di norma questo non è un problema, tranne che in queste due situazioni (almeno quelle di cui sono a conoscenza):
  • Voglio fare il deploy del mio database da un server Windows ad uno Linux. Poichè il filesystem quest'ultimo è case sensitive, tutte le queries, procedure e funzioni scritte per la piattaforma Microsoft, con buona probabilità smetteranno di funzionare sul nuovo server;
  • Voglio fare il porting del mio database verso un RDBMS case sensitive come, ad esempio, SQL Server. Stesso problema.
La causa del problema, sta nella configurazione iniziale di MySQL, ed in particolare nella chiave del file di configurazione lower_case_table_names che, per default ha valore 0 (zero, nomi di database e tabelle sono salvati su disco in modo case sensitive) su piattaforme Linux e valore 1 (in nomi di database e tabelle sono salvati sempre in minuscolo) su quelle Windows o Mac OSX. Esiste una terza alternativa che prevede il valore 2 per tale parametro, valore per il quale i nomi di database e tabelle vengono salvati su disco così come sono stati scritti nelle queries di creazione, ma nelle operazioni di confronto, MySQL li tratta tutti come se fossero scritti in minuscolo.  Una trattazione più scientifica è data dalla documentazione ufficiale di MySQL che può essere ragguinta da qui.
Come modificare il parametro in questione? Semplice.
  1. Modificare o aggiungere al file di configurazione di MySQL, my.ini, il valore lower_case_table_names = 2;
  2. Riavviare il servizio di MySQL;

Enjoy

giovedì 8 marzo 2012

Mirroring di MySQL

logo-mysql-110x57Primo post del 2012 (è ovvio che non sono un blogger molto prolifico, ma la ‘mission’ del blog è quella del quaderno degli appunti ad uso più che altro personale). L’argomento del post è la configurazione di due server, un master ed uno slave, sul quale un database viene replicato al fine di:
  • realizzare un sistema ridondante che garantisca l’immediata disponibilità dei dati in caso di problemi tecnici sul server che ospita il master. In questo modo è possibile commutare sul server che ospita lo slave interrompendo il processo produttivo per un tempo minimo.
  • ottenere un efficace sistema per il bilanciamento del carico del sistema, che consenta di eseguire le operazioni di scrittura sul master e quelle di lettura sullo slave.
  • consentire backup frequenti dei dati senza inficiare le prestazioni del master.
Ovviamente per le informazioni che seguono sono state tratte dalla documentazione ufficiale: http://dev.mysql.com/doc/refman/5.6/en/replication.html.

Configurazione del master

  1. Nel file di configurazione di MySql (my.ini o my.cnf a seconda che il database sia ospitato su server Windows o Linux), individuare il gruppo di parametri sotto la chiave [mysqld], ed aggiungere le seguenti chiavi:
    server-id=1
    log-bin=mysql-bin
  2. Riavviare il server, riavviando il relativo servizio mysqld;
  3. Creare un nuovo utente con privilegi di replica, seguendo I seguenti passi:
    1. Accedere ad una shell di comando mysql con il comando
      mysql –u <username> –p<password>
    2. mysql> GRANT REPLICATION SLAVE ON *.* TO ‘user’@’%’ IDENTIFIED BY ‘password’;oppure
      mysql> GRANT REPLICATION SLAVE ON *.* TO ‘user’@’IP dello slave’ IDENTIFIED BY ‘password’;
      Per precisione l’utente ‘user’ dovrebbe essere creato con il comando:
      mysql> CREATE USER ‘user’@’%’ IDENTIFIED BY ‘password’
      o
      mysql> CREATE USER ‘user’@’IP dello slave’ IDENTIFIED BY ‘password’
      ma l’esecuzione del solo comando GRANT ha come effetto la creazione dell’utente nel caso quest’ultimo non esista.
  4. Bloccare le scritture sul server per consentirne la ‘clonazione’ sullo slave, eseguendo sulla shell di mysql il comando:
    FLUSH TABLES WITH READ LOCK;
  5. Copiare il database dal master allo slave copiando fisicamente I files di mysql o mediante il comando mysqldump
    mysqldump –u ‘user’ –p’password’ db_instance>db_instance.sql;
    mysql –u ‘user’ –p’password’  db_instance< db_instance.sql;

    o, in alternativa, è possibile creare un'istanza vuota del database dal prompt di mySQL
    mysql>CREATE DATABASE db_instance;
    e, successivamente, eseguire il dump via rete:
    mysqldump –u ‘user’ –p’password’ db_instance | mysql –u ‘user’ –p’password’ -h'hostname' db_instance
  6. Sulla shell di mysql eseguire il comando
    SHOW MASTER STATUS;
    che ritornerà lo stato del file di log del master, ed il punto nel file in cui il master si trova prima del blocco eseguito al punto 3. Prendiamo nota di queste informazioni che serviranno nel seguito;

Configurazione dello slave

  1. Nel file di configurazione di mysql aggiungere alla sezione [mysqld] la chiave
    server-id=2
    o qualunque valore intero diverso da quello utilizzato per la configurazione del master;
  2. Riavviare il servizio mysqld;
  3. Da una shell di comando di mysql lanciata sullo slave, lanciare il comando:
    CHANGE MASTER TO
    MASTER_HOST=’X.X.X.X’,
    MASTER_USER=’user’,
    MASTER_PASSWORD=’password’,
    MASTER_PORT=3306,
    MASTER_LOG_FILE=’mysql-bin.000001’,
    MASTER_LOG_POS=98,
    MASTER_CONNECT_RETRY=10;

    modificando il valore dei parametri in modo concorde alla configurazione del master.
  4. Sempre dalla shell di mysql eseguire il comando
    START SLAVE;
  5. Sbloccare la scrittura sul master con il comando (ovviamente da un prompt di mySQL collegato al master)
    UNLOCK TABLES;
Se tutto è andato a buon fine, nel file di log di mysql dello slave dovrebbe esserci qualcosa di simile:
091104 8:42:02 [Note] Slave I/O thread: connected to master ‘root@X.X.X.X:3306?, replication started in log ‘mysql-bin.000001? at position 98
Enjoy.

giovedì 14 aprile 2011

Nel pieno spirito del blog, riporto di seguito un piccolo promemoria per l'installazione di un server LAMP su architettura Ubuntu. Installato con una macchina virtuale (VMWare, Virtual Box o quel che più vi piace) è un ottimo strumento per implementare un server MySql da utilizzare per i vostri progetti software, senza rechiedere l'ennesima installazione sulla vostra workstation di sviluppo. ...Enjoy