2013-03-09 22 views
5

Sono stato recentemente esposto al mondo dei database di grafici. È un cambio di paradigma abbastanza interessante per un vecchio cane relazionale come me.Gestione delle modifiche per i database di grafici?

Anche recentemente, ho iniziato ad armeggiare con Liquibase ed è stato uno strumento abbastanza accurato nella gestione dei database.

Quindi, due mondi si scontrano e mi stavo chiedendo se ci sono strumenti là fuori che fanno la gestione delle modifiche di liquibase per i database di grafici. Sono particolarmente interessato a neo4j e orientdb.

risposta

2

Pramod Sadalage e l'influente articolo di Martin Fowler del 2003 su Evolutionary Database Design hanno avuto un grande impatto sul modo in cui mi sono avvicinato alla gestione delle modifiche dello schema in un database. Ho continuato a utilizzare DbDeploy e DbDeploy.net negli ecosistemi Java e .NET e ora utilizzo ActiveRecord migrations. Se trovi interessante il liquibase, ti consiglio di dare un'occhiata a questi strumenti.

Il Neo4j.rb documentation discute questo tipo di migrazione contro Neo4j.

Personalmente non ho usato uno strumento per gestire le migrazioni in Neo4j, ma ho scritto degli script di migrazione che hanno fatto cose come rinominare le proprietà, cambiare le etichette dei bordi o creare indici. Come un caso ad esempio l'uso, ecco un frammento da uno script Gremlin Groovy Ho usato per rimappare alcune chiavi esterne memorizzate in un grafico Neo4j e aggiornare un indice:

try { 
    projects.each { node -> 
    old_id = node.ref_id 
    new_id = old_to_new_ids[old_id] 
    index.remove('project', old_id, node) 
    node.ref_id = new_id 
    index.put('project', new_id, node) 
    } 
} catch (Throwable e) { 
    println(e) 
} finally { 
    g.shutdown() 
} 

Come di Neo4j versione 1.8, c'è un PropertyContainer che può essere utilizzato per i metadati del grafico. Sarebbe semplice usare questo contenitore per aggiornare una proprietà 'schema_version'. Il codice dovrebbe essere simile:

EmbeddedGraphDatabase db = new EmbeddedGraphDatabase(dbFilename);   
Transaction tx = db.beginTx(); 
PropertyContainer properties = db.getNodeManager().getGraphProperties(); 
properties.setProperty("schema_version", 3); 
tx.success(); 
tx.finish(); 
+0

Credito extra per DBDeploy! – critium

8

Liquigraph esiste ora e anche se ancora abbastanza nuovo, l'autore è molto ricettivi al feedback e sta lavorando attivamente al progetto.

+0

upvoting per aumentare la consapevolezza e dare l'incentivo dell'autore a continuare a lavorare su di esso. – critium

0

Personalmente, sarei più interessato a qualcosa basato su API TinkerPop. Penso che questa API sia supportata da più database diversi, ecco perché è stata progettata. Preferirei essere in grado di definire le etichette dei miei vertici, le etichette dei bordi, le proprietà, gli indici ecc. - non cercando di allinearmi con una (grande) tecnologia progettata per i database relazionali.

Problemi correlati