2012-05-22 7 views
10

Ich verwende derzeit eingebettete Python-Bindung für neo4j. Ich habe derzeit keine Probleme, da mein Graph sehr klein ist (spärlich und bis zu 100 Knoten). Der Algorithmus, den ich entwickle, beinhaltet ziemlich viele Traversierungen auf dem Graph, genauer gesagt DFS auf dem Graphen im Allgemeinen sowie auf verschiedenen Untergraphen. In der Zukunft beabsichtige ich, den Algorithmus auf großen Graphen zu betreiben (angeblich spärlich und mit Millionen von Knoten).Auswählen einer geeigneten Möglichkeit, Neo4j in Python zu verwenden

verschiedenen Threads in Bezug auf die Leistung von Python/Neo4j Bindungen here, here, frage ich gelesen hatte, ob ich schon zu einem gewissen REST-API-Client für Python (wie bulbflow, py2neo, neo4jrestclient) wechseln sollte, bis ich auf Änderung zu weit bin aller Code.

Leider habe ich keine umfassende Informationsquelle gefunden, um verschiedene Ansätze zu vergleichen.

Kann jemand weitere Einblicke in dieses Problem geben? Welche Kriterien sollte ich bei der Wahl einer der Optionen berücksichtigen?

Antwort

0

Nicht wirklich sicher, ich bin kein Experte, aber ich denke, es hängt auch von Ihren Django-Erwartungen ab, und wie viel von einem Framework Sie brauchen. Py2neo ist sehr pragmatisch und schlank, Bulbflow scheint einen ganzen Mapping-Stack aufzubauen, und neo4jrestclient konzentriert sich auf Django (was vielleicht falsch ist)?

+0

Ich muss gestehen, dass ich Django nicht kenne. Handelt es sich nicht um Webanwendungen? Ich mache jetzt alles lokal auf 1 Maschine. Soll ich es noch überprüfen? – npobedina

+0

nicht sicher, ich würde es versuchen. –

8

Django ist ein MVC-Web-Framework, so dass Sie daran interessiert sein könnten, wenn Ihre Web-Anwendung sein soll.

Aus der Sicht von py2neo (von dem ich der Autor bin), versuche ich, mich stark auf die Leistung zu konzentrieren, indem ich den Batch-Ausführungsmechanismus automatisch verwendet, sowie starke Cypher-Unterstützung biete. Ich habe auch vor kurzem eine Menge Arbeit in die Bereitstellung guter Optionen für das Eindeutigkeitsmanagement innerhalb von Indizes investiert - speziell die Methoden get_or_create und add_if_none.

3

Der einfachste Weg, Algorithmen von Python zu laufen ist Gremlin zu verwenden (https://github.com/tinkerpop/gremlin/wiki).

Mit Gremlin Sie alles in einen HTTP-Request bündeln Round-Trip-Overhead zu reduzieren.

Hier ist, wie Gremlin-Skripte ausführen von Zwiebeln (http://bulbflow.com):

>>> from bulbs.neo4jserver import Graph 
>>> g = Graph() 
>>> script = "g.v(id).out('knows').out('knows')" 
>>> params = dict(id=3) 
>>> g.gremlin.execute(script, params) 

Die API-Dokumentation Birnen Gremlin sind hier: http://bulbflow.com/docs/api/bulbs/gremlin/

+1

danke für die Empfehlung. Ich habe bereits einen Vergleich von Gremlin vs Cypher gelesen. Also, ich denke, ich muss beide ausprobieren, um zu entscheiden, welcher in meinem Anwendungsfall angemessener ist. Es scheint ein Problem mit der Bulbflow-Website zu geben. Weißt du, ob es bald soweit ist? – npobedina

+1

Es gab ein DNS-Problem, das aktualisiert wird. Für jetzt können Sie es hier zugreifen: http://bulbflow.herokuapp.com – espeed

+0

ist es möglich, Cypher-Abfragen gegen neo4j mit Bulbflow ausführen? Die Dokumentation zu diesem Thema scheint unklar zu sein. Ist es eigentlich besser (schneller), beim Arbeiten mit Bulbflow am Gremlin zu bleiben? – npobedina