2013-02-14 14 views
8

Zbudowałem aplikację Django z Neo4j (wraz z Postgresem), znalazłem tę integrację Django o nazwie neo4django, zastanawiałem się, czy możliwe jest użycie tylko neo4restclient, jak, jakie byłyby wady nie używasz Neo4django? Czy korzystanie tylko z klienta neo4-rest daje mi większą elastyczność? Kiedy tworzyłem swoje modele z Neo4Django, wydawało się, że nie ma różnicy między modelowaniem grafów db i relacyjnych baz danych. Czy brakuje mi czegoś?Django i Neo4j bez Neo4Django

Dzięki!

Odpowiedz

9

Możesz całkowicie skorzystać z neo4j-rest-client lub py2neo, bez używania neo4django. W ten sam sposób możesz użyć dowolnego innego sterownika bazy danych, który chcesz użyć Django, dowolnego klienta REST itp.

Co stracisz? Model DSL, wbudowane zapytanie (np. Person.objects.filter(name="Mohamed")), wbudowane indeksowanie oraz Lucene, Gremlin i Cypher za tym. Niektóre rzeczy będą znacznie łatwiejsze - jak ustawienie dowolnej właściwości w węźle - ale musisz dowiedzieć się więcej o działaniu Neo4j.

Utracisz także niektóre skróty, które Django zapewnia pracy z neo4django, np. get_object_or_404() i niektóre widoki oparte na klasach, które działają z zapytaniami.

Co zyskasz? Całkowita moc nad bazą danych i łatwiejsza modyfikacja wydajności bazy danych. Mimo, że neo4django nie jest tak samo dobrą biblioteką jak niektóre tradycyjne ORMy w sferze Pythona, kompromis między mocą a zapewnioną łatwością jest podobny.

To powiedziawszy, te dwa elementy mogą ze sobą współdziałać - możesz zejść z neo4django do podstawowych węzłów i relacji klienta REST w dowolnym momencie. Po prostu użyj model_instance.node, aby pobrać obiekt węzła neo4j-rest-client z modelu, i from neo4django.db import connection, aby uzyskać owinięty klient neo4j-rest GraphDatabase.

O tym, czy czegoś brakuje: neo4django zostało napisane, aby ponownie użyć wydajnego interfejsu programisty - Django ORM - więc powinno być podobne do pisania modeli dla PostgreSQL. Napisałem w przeszłości bit about that odd feeling. Myślę, że częścią problemu może być to, że lib nie podświetla terminologii grafu, której oczekują nowi grafowie, takich jak przechodzenie i dopasowywanie wzorców - i zamiast tego zamienia te techniki w odzież zapytań Django.

Chciałbym poznać twoje myśli lub dowiedzieć się, co chcesz, żeby ta biblioteka nie działała :) Powodzenia!

+1

Wielkie dzięki za wyrafinowaną i jasną odpowiedź Matt! Nie było dla mnie jasne, czy mogę używać zarówno neo4j-rest-client, jak i neo4django w tym samym czasie z mode_instance.node. Brzmi świetnie. Jedną z rzeczy, które zauważyłem, było to, że zapytania są nieco powolne. Poza tym chciałbym używać uwierzytelniania tylko w Neo4j zamiast używać PostgreSQL (lub innego relacyjnego db), więc może zbuduję to jako osobną aplikację Django do wielokrotnego użytku. Myślisz, że to jest tego warte? Mam na myśli, chciałbym użyć 'userena', ale będę miał trzy modele dla jednego użytkownika (model Django, model Userena i neo4django) –

+1

Hm, jakie pytania są dla ciebie zbyt wolne? Jest duża szansa, że ​​mogę coś z tym zrobić :) Pracuję również nad rozwiązaniem dla auth w Neo4j. Naprawdę chciałbym zastąpić 'contrib.auth', który działa z wymiennymi modelami użytkowników Django 1.5 i zachowuje wszystko na wykresie. Wciąż nie jestem pewien, kiedy będę gotowy. –

+0

Coś tak prostego jak "MyModel.objects.filter (username =" mo ")' jest wolniejsze niż to, do czego jestem przyzwyczajony. O auth, to jest dokładnie to, na czym celuję, zastępując 'contrib.auth'. Używam teraz 'django-userena' do obsługi wszystkich autoryzacji, logowania, edycji profilu i wszystkiego, ale jestem pewien, że to niechlujne rozwiązanie. Czy istnieje szansa, że ​​mogę przyczynić się do auth app, ponieważ i tak planowałem zbudować to rozwiązanie?;) –