2013-02-14 6 views
8

Sto costruendo un'app di Django con Neo4j (insieme a Postgres), ho trovato questa integrazione di Django chiamata neo4django, mi stavo chiedendo se è possibile utilizzare solo neo4restclient, quali, quali sarebbero gli svantaggi di non usare Neo4django? Utilizza solo neo4-rest-client, mi dà più flessibilità? Quando stavo creando i miei modelli con Neo4Django, sembrava che non ci fosse alcuna differenza tra la modellazione di un db grafico e db relazionale. Mi sto perdendo qualcosa?Django e Neo4j senza Neo4Django

Grazie!

risposta

9

Si può assolutamente andare avanti con neo4j-rest-client o py2neo, senza usare neo4django. Allo stesso modo, puoi utilizzare qualsiasi altro driver di database che desideri in qualsiasi momento utilizzando Django, qualsiasi client REST, ecc.

Cosa perdi? Il modello DSL, l'interrogazione incorporata (ad esempio, Person.objects.filter(name="Mohamed")), l'indicizzazione incorporata e Lucene, Gremlin e Cypher dietro quello. Alcune cose saranno molto più semplici, ad esempio l'impostazione di una proprietà arbitraria su un nodo, ma sarà necessario saperne di più su come funziona Neo4j.

Perderai anche alcune delle scorciatoie che Django offre che funzionano con neo4django, come get_object_or_404() e alcune delle viste basate su classi che funzionano con i set di query.

Cosa guadagnerai? Potenza assoluta sul DB e tempo più semplice per ottimizzare le prestazioni del DB. Anche se neo4django non è abbastanza buono come un ORM tradizionale nella sfera di Python, il compromesso tra potenza e facilità fornita è simile.

Detto questo, i due possono funzionare insieme: è possibile passare da neo4django ai nodi e alle relazioni client REST sottostanti in qualsiasi momento. Basta usare model_instance.node per ottenere l'oggetto nodo neo4j-rest-client sottostante da un modello e from neo4django.db import connection per ottenere un client neo4j-rest incapsulato GraphDatabase.

Se ti manca qualcosa: neo4django è stato scritto per riutilizzare una potente interfaccia per sviluppatori, l'ORM di Django, quindi dovrebbe sembrare simile alla scrittura di modelli per Postgres. Ho scritto un bit about that odd feeling in passato. Penso che parte del problema potrebbe essere che la lib non mette in evidenza la terminologia del grafico che i nuovi sviluppatori interessati al grafico si aspettano - come attraversamenti e pattern matching - e invece veste quelle tecniche nell'abbigliamento di query di Django.

Mi piacerebbe i tuoi pensieri o sapere tutto quello che vorresti che la libreria facesse che non lo facesse :) Buona fortuna!

+1

Grazie mille per la tua risposta elaborata e chiara Matt! Non mi è stato chiaro che avrei potuto utilizzare sia neo4j-rest-client che neo4django contemporaneamente con model_instance.node. Questo suona alla grande. Una cosa che ho notato è che l'interrogazione è un po 'lenta. Inoltre, mi piacerebbe usare l'autenticazione solo con Neo4j invece di usare Postgres (o un altro db relazionale), quindi forse lo costruirò io stesso come app Django riutilizzabile separata. Pensi che ne valga la pena? Voglio dire, mi piacerebbe usare 'userena', ma poi avrò tre modelli per un utente (il modello di Django, il modello di Userena e quello di neo4django) –

+1

Hm, che tipo di query sono troppo lente per te? C'è una buona possibilità che io possa fare qualcosa a riguardo :) Sto lavorando anche su una soluzione per auth in Neo4j. Quello che mi piacerebbe davvero è un rimpiazzo di "contrib.auth" che funziona con i modelli utente intercambiabili di Django 1.5 e tiene tutto nel grafico. Non sono ancora sicuro quando avrò quello pronto, però. –

+0

Qualcosa di semplice come 'MyModel.objects.filter (username =" mo ")' è più lento di quello a cui sono abituato. Circa l'auth, questo è esattamente ciò a cui sto mirando, sostituendo 'contrib.auth'. Ora sto usando 'django-userena' per gestire tutte le autent, login, modifica del profilo e tutto, ma sono sicuro che sia una soluzione disordinata. Qualche possibilità di contribuire all'app di autenticazione mentre stavo progettando di costruire la soluzione comunque?;) –