Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Azure Table Storage con PHP

Memorizzare entity in tabelle non relazionali (NoSQL) sfruttando le "tables" di Windows Azure
Memorizzare entity in tabelle non relazionali (NoSQL) sfruttando le "tables" di Windows Azure
Link copiato negli appunti

Nell'articolo precendente abbiamo iniziato la realizzazione di una semplice applicazione Web che sfrutta lo storage sul cloud offerto da Windows Azure per permettere l'upload di alcune foto in modo da averle sempre disponibili online attraverso una pagina Web. Abbiamo analizzato ed utilizzato i servizi del Blob Storage per memorizzare file ed immagini, ora aggiungeremo la possibilità per gli utenti di lasciare un commento sfruttando il Windows Azure Table Storage.

Le "Table" consentono di memorizzare entità all'interno di tabelle non relazionali, assomigliando quindi più ad un modello NoSQL che ad un database tradizionale. All'interno di una Table, le righe sono identificate univocamente attraverso una coppia di valori, chiamati Partition Key e Row Key.

Tutti i dati sono sempre accessibili tramite chiamate REST al servizio (verso URL della forma http://myaccountname.table.core.windows.net), permettendo di fatto di accedere utilizzando qualunque linguaggio e piattaforma di sviluppo che sia in grado di effettuare chiamate HTTP.

PHPTableComments

Utilizziamo come base di partenza l'applicazione Web che abbiamo iniziato nello scorso appuntamento e sfruttiamo anche il Windows Azure storage account creato sempre nello scorso articolo.

Come prima cosa, creiamo una nuova classe PHP che rappresenta i dati che vogliamo persistere all'interno del Table Storage, cioè i commenti lasciati dagli utenti del nostro servizio. Aggiungiamo quindi un file che possiamo chiamare Comment.php che conterrà il seguente codice:

Come sempre, analizziamo insieme queste poche righe di codice:

  • Innanzitutto importiamo una libreria fornita dall'SDK per facilitare l'utilizzo del Table Storage service
  • La nostra classe estende Microsoft_WindowsAzure_Storage_TableEntity
  • Le proprietà dell'oggetto che vogliamo siano persistite all'interno della Table sono annotate con la sintassi @azure, specificando il nome della rispettiva colonna nella Table
  • Nel costruttore della classe, assegnamo una coppia di Partition Key e Row Key che siano univoci, utilizzando la data corrente e un GUID generato casualmente ogni volta

Persistere entità nel Table Storage

Cominciamo quindi a costruire la pagina che permetterà agli utenti del nostro servizio di pubblicare i propri commenti in modo che siano visibili a tutti.

Per prima cosa, creiamo una nuova pagina PHP che chiameremo comments.php. In cima a questo file definiamo, come già fatto nello scorso appuntamento, alcune costanti utili per l'accesso al Table Storage, in modo da avere un punto centralizzato in cui poter modificare queste informazioni se necessario:

I dati che abbiamo definito, in questo caso, sono:

  • Una costante che stabilisce se la nostra applicazione è in esecuzione all'interno dell'ambiente di emulazione piuttosto che sul vero cloud di Windows Azure
  • Il nome dell'account di Storage nel quale vogliamo andare ad inserire le foto che caricheremo: è il nome che abbiamo scelto al momento della creazione dell'account sul portale di gestione di Windows Azure, nel nostro caso è "phpblobphotos"
  • La chiave di accesso per l'utilizzo di questo storage account, che si può trovare sempre nel portale di gestione selezionando l'account e premendo il tasto "Visualizza" in alto a destra, nel riquadro "Chiave di accesso primaria"
  • Il nome della tabella in cui vogliamo memorizzare i commenti sotto forma di entità
  • Il nome e la chiave dell'account di storage dovranno ovviamente essere modificati per riflettere le stringhe specifiche del nostro servizio di archiviazione creato su Windows Azure

Creeremo un semplice form HTML in cui l'utente potrà inserire il suo nome e il commento che vuole lasciare. Aggiungiamo quindi in fondo al file comments.php il codice HTML della pagina Web, che contiene per ora solo il form HTML:

<html>
<head>
    <title>PHPTableComments</title>
</head>
<body>
<form action="comments.php" method="post">
    <div>
	    <label for="txtName">Il tuo nome:</label>
        <input type="text" name="txtName" />
    </div>
    <div>
	  <label for="txtName">Il tuo commento:</label>
        <textarea name="txtMessage"></textarea>
    </div>
    <div>
        <input type="submit" value="Pubblica" />
    </div>
</form>
</body>
</html>

Una volta pronto il form possiamo aggiungere, subito sotto alle righe iniziali con le costanti di configurazione, il codice per il salvataggio dei file sul cloud storage:

Approfondiamo rapidamente queste poche istruzioni scritte:

  • La prima riga utilizza require_once per includere la libreria fornita dall'SDK per l'utilizzo del Table Storage dalla nostra applicazione Web
  • Includiamo quindi anche la classe Comment che abbiamo creato in precedenza

  • Creando una nuova istanza della classe Microsoft_WindowsAzure_Storage_Table possiamo specificare alcuni parametri se abbiamo intenzione di utilizzare uno storage reale su Windows Azure, oppure nessun parametro se vogliamo fare uso dello storage emulato in locale. Utilizziamo perciò la costante USING_EMULATOR per stabilire in quale ambiente di esecuzione ci troviamo
  • Tramite il metodo createTableIfNotExists ci assicuriamo di creare la tabella che useremo per persistere i commenti degli utenti
  • Verifichiamo a questo punto se l'utente sta cercando di inserire un nuovo commento: se sì, salviamolo nello cloud storage. Per farlo, istanziamo un oggetto Comment ed impostiamo le sue proprietà in base ai dati inseriti dall'utente
  • Per ultimo, richiamiamo il metodo insertEntity passandogli come parametro il nome della Table all'interno della quale vogliamo persistere il commento e l'oggetto Comment stesso

Leggere dati dal Table Storage

Una volta completata la parte di codice relativa all'aggiunta di nuove entità nella tabella, non resta che scrivere le poche righe che vadano a leggere tutti commenti dal Table Storage e li mostrino all'utente.
È sufficiente inserire il seguente frammento di codice dopo il form HTML e prima del tag di chiusura </body>:

Analizziamo anche questa volta il codice:

  • Il metodo retrieveEntities prende come parametri, nell'ordine, il nome della tabella da cui leggere, un eventuale filtro per le entità, e il nome della classe PHP da istanziare per ogni entità ottenuta dallo storage
  • A questo punto, non resta che scorrere l'array di commenti e per ognuna scrivere pochi tag HTML che mostrino nome, messaggio e data di ognuno

La nostra applicazione completa apparirà quindi in modo simile alla figura qui di seguito:

Figura 18. (clic per ingrandire)


Ora che abbiamo completato la nostra semplice applicazione che fa uso dello storage in the cloud offerto da Windows Azure, nel prossimo appuntamento non resta che vedere la sua soluzione di database relazionale: Microsoft SQL Azure.

Ti consigliamo anche