2013-07-27 2 views
1

Tentative de lot de créer des noeuds & relations - création de lots échoue - retraçage à la fin du postepy2neo - Neo4j - erreur système - Créer lot nœuds/Relations

fonctions de code Remarque avec plus petit sous-ensemble de noeuds - échoue lorsque get dans le nombre massif de relations, pas clair à quelle limite cela se produit.

  • Vous vous demandez si je dois augmenter ulimit au-dessus de 40.000 fichiers ouverts
  • lu quelque part où des personnes étaient en cours d'exécution sur les questions Xstream avec l'API REST tout en effectuant lot créent - ne sait pas si le problème posé est à la fin de py2neo du spectre , ou sur le réglage/configuration du serveur Neo4j, ou sur l'extrémité Python du spectre. Toute indication serait grandement appréciée.

Un cluster dans l'ensemble de données se termine avec environ 625525 relations sur plus de 700 nœuds. Total des relations sera 1M + - en utilisant un Apple Macbook Pro Retina avec x86_64 - Ubuntu 13.04, SSD, 8 Go de mémoire.

  • Neo4j: & configurés auto_indexing auto_relationships réglés sur
  • nœuds en cluster/groupé via python panadas DataFrame.groupby()
  • Nœuds: 3 contiennent des propriétés
  • Rapports Propriétés: 1 -> IN & Out Les relations créées
  • ulimit mis à 40,000 fichiers ouverts

code

https://github.com/alienone/OSINT/blob/master/MANDIANTAPT/spitball.py

  • Système d'exploitation: Ubuntu 13.04
  • Python version: 2.7.5
  • py2neo Version: 1.5.1
  • version Java: 1.7.0_25-b15
  • Version Neo4j: Community Edition 1.9.2

Retraçage

Traceback (most recent call last): File "/home/alienone/Programming/Python/OSINT/MANDIANTAPT/spitball.py", line 63, in main() File "/home/alienone/Programming/Python/OSINT/MANDIANTAPT/spitball.py", line 59, in main graph_db.create(*sorted_nodes) File "/home/alienone/.pythonbrew/pythons/Python-2.7.5/lib/python2.7/site-packages/py2neo/neo4j.py", line 420, in create return batch.submit() File "/home/alienone/.pythonbrew/pythons/Python-2.7.5/lib/python2.7/site-packages/py2neo/neo4j.py", line 2123, in submit for response in self._submit() File "/home/alienone/.pythonbrew/pythons/Python-2.7.5/lib/python2.7/site-packages/py2neo/neo4j.py", line 2092, in submit for id, request in enumerate(self.requests) File "/home/alienone/.pythonbrew/pythons/Python-2.7.5/lib/python2.7/site-packages/py2neo/rest.py", line 428, in _send return self._client().send(request) File "/home/alienone/.pythonbrew/pythons/Python-2.7.5/lib/python2.7/site-packages/py2neo/rest.py", line 365, in send return Response(request.graph_db, rs.status, request.uri, rs.getheader("Location", None), rs_body) File "/home/alienone/.pythonbrew/pythons/Python-2.7.5/lib/python2.7/site-packages/py2neo/rest.py", line 279, in init raise SystemError(body) SystemError: None

Processus terminé avec le code de sortie 1

+0

FYI - Une erreur système se produit lorsque les relations 525K + sont visibles sur le tableau de bord Neo4j - – user2625422

+1

Problème résolu.Spo Neo4j sur le serveur de test avec 32 Go de mémoire et 16CPU. Exécuté Python script py2neo de portable avec 8 Go de mémoire, et tout s'est terminé avec succès en un peu moins de 90 secondes. – user2625422

+0

Serait cool si vous pouvez écrire un post de blog pour les autres? –

Répondre

1

J'ai eu un problème similaire. Une façon d'y faire est de faire le batch.submit() pour les morceaux de vos données et non l'ensemble des données. Ceci est bien sûr plus lent, mais diviser un million de nœuds en blocs de 5000 est toujours plus rapide que d'ajouter chaque nœud séparément.

J'utilise une petite classe d'aide pour ce faire, notez que tous mes nœuds sont indexés: https://gist.github.com/anonymous/6293739

Questions connexes