GraphDB … presto anche per PHP

Graph

Come ci dobbiamo comportare se dall’analisi di fattibilità del nostro progetto scopriamo che i dati da persistere sul db vanno oltre le features messe a disposizione da un db relazionale, anzi si comportano proprio come una rete di contatti … un grafo. Possiamo prendere in considerazione due tipologie di comportamenti.

Il primo insiste sul db relazionale. Nonostante non sia stato pensato per risolvere questa tipologia di problematiche troviamo dei workAround per fargli fare quello che non sarebbe in grado di fare. Un esempio pratico è la rottura dell’integrità referenziale. Quando abbiamo la necessità di aggregare dati eterogenei, le “foreign Key” non possono più aiutarci, si introduce all’interno dei campi di una tabella il campo che indica il nome della tabella correlata al quale fa riferimento l’id del campo a fianco.

entity entity_id
user 110

A questo punto il db non sà più fare il suo lavoro  poiché non è più in grado di conoscere la tipologià di informazione estratta. Il che significa che, per far funzionare le cose,  dobbiamo integrare la logica( che normalmente sarebbe gestita dal db) della nostra applicazione di queste informazioni aggiuntive.

La seconda scelta consiste nel prendere in considerazione un prodotto studiato appositamente per risolvere questa tipologia di problematiche. Ed è proprio la soluzione che vogliamo valutare.

A questo punto ci siamo spostati nel dominio NoSql, quel ambito nel quale i database non sono solo relazionali. Si può spaziare da database key-value come Redis, a Documentali come Couch DB e Mongo DB. Tra questi ce ne sono anche alcuni che si occupano di prendere in considerazione strutture dati a grafi. Wikipedia ne mette in mostra molti, ma quello che  ci interessa è OrientDB.

OrientDB è in grado di garantire altissime prestazioni, è orientato al Documento (Document Oriented) è schema full/less/mixed, è affidabile (ACID), ha una sintassi di quering molto simile a quella SQL ed è molto semplice fare le traversal (attraversamento dei nodi)

Ecco una presentazione di Orient DB direttamente dal suo Lead developer

Da qualche mese a questa parte Alessandro (il mio collega) ed io, abbiamo cominciato a scrivere una libreria in PHP per interagire con OrientDB. L’esigenza è stata percepita principalmente quando ci siamo scontrati con la progettazione di un CMF, nella necessità di un grafo per persistere le nostre strutture dati.

La libreria si trova su github è un componente del CMF che stiamo progettando ma è assolutamente indipendente e puo essere utilizzata anche esternamente.

Si compone di tre componenti software:

  1. binding: di piu basso livello è la libreria di base che permette di collegarsi a Orient attraverso uno dei due protocolli disponibili HTTP (sempre fatto da noi) e binario
  2. query-builder: una libraria ad oggetti che mette a disposizione dei metodi per la creazione di query, un po come avviene con quelle di Doctrine/Propel
  3. mapper: la libreria di piu alto livello, prende spunto sia in architettura che in funzionalità  dall’ODM di docrine per mongo che ha le seguenti caratteristiche
    • mappa i campi da persistere nel db attraverso l’utilizzo di annotation
    • Idrata gli oggetti con i risultati ottenuti dal db
    • Persiste i dati sul db

I primi due componenti sono già funzionanti (test di integrazione compresi) e ci stiamo accingendo a concludere anche il terzo che è quello con complessità un po’ più elevata. Il passo conclusivo consisterà nell’incapsulare questa libreria all’interno di un bundle per il nuovo Symfony2.

Quindi ben presto anche gli sviluppatori PHP, e soprattutto quelli che hanno cercato in tutti i modi di far cambiare natura ai database relazionali (mySql per esempio), potranno lavorare con database a grafo e riuscire a trarre vantaggi da questo tipo di tecnologia.

Nei prossimi articoli verrà mostrato come interagire con questa libreria. Dimenticavo, se volete dare il vostro contribuito…benvenuti.

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...