Requette Cypher trop volumineuse

28 views
Skip to first unread message

Sebastien Dieudonne

unread,
Jun 27, 2016, 3:06:30 AM6/27/16
to Neo4jFr
Bonjour,

Je travail sur la base neo4j (et j'utilise Visual Studio 2015 en c#).

Je développe un outils de migration de SGBDR vers neo4j. je but est bien sur de migrer les données de manière intelligente (recréé des donnée en graph et pas bêtement reprendre la table...)

J'utilise donc pour cela la base de donnée de notre erp comme exemple. dans un premier temps je copie bêtement les ligne de l'un vers l'autre. 

Sur une table de log il y as un enregistrement qui fait 12mo (un log avec un fichier XML à l’intérieur) et lors de l'insertion en CYPHER (je créé une requette) sa plante.

Si je supprime le contenu du fichier XML a l’intérieur de la requette CREATE en Cypher sa marche, donc c'est le xml qui me pose problème.

Cette requette étant trop lourd elle ne peu être exécuté dans l'interface web proposé par neo4j. le navigateur ce gèle...

Le message d'erreur est "Expect 2, but got 0" 

et la trace :
à Neo4j.Driver.Internal.Connector.ChunkedInputStream.ReadSpecifiedSize(Byte[] buffer) dans C:\BuildAgent\work\9ae188c903d07190\Neo4j.Driver\Neo4j.Driver\Internal\Connector\ChunkedInputStream.cs:ligne 131
   
à Neo4j.Driver.Internal.Connector.ChunkedInputStream.Ensure(Int32 size) dans C:\BuildAgent\work\9ae188c903d07190\Neo4j.Driver\Neo4j.Driver\Internal\Connector\ChunkedInputStream.cs:ligne 108
   
à Neo4j.Driver.Internal.Connector.ChunkedInputStream.ReadByte() dans C:\BuildAgent\work\9ae188c903d07190\Neo4j.Driver\Neo4j.Driver\Internal\Connector\ChunkedInputStream.cs:ligne 51
   
à Neo4j.Driver.Internal.Packstream.PackStream.Unpacker.UnpackStructHeader() dans C:\BuildAgent\work\9ae188c903d07190\Neo4j.Driver\Neo4j.Driver\Internal\Packstream\PackStream.cs:ligne 556
   
à Neo4j.Driver.Internal.Packstream.PackStreamMessageFormatV1.ReaderV1.Read(IMessageResponseHandler responseHandler) dans C:\BuildAgent\work\9ae188c903d07190\Neo4j.Driver\Neo4j.Driver\Internal\Packstream\PackStreamMessageFormatV1.cs:ligne 53
   
à Neo4j.Driver.Internal.Connector.SocketClient.Receive(IMessageResponseHandler responseHandler) dans C:\BuildAgent\work\9ae188c903d07190\Neo4j.Driver\Neo4j.Driver\Internal\Connector\SocketClient.cs:ligne 107
   
à Neo4j.Driver.Internal.Connector.SocketClient.Send(IEnumerable`1 messages, IMessageResponseHandler responseHandler) dans C:\BuildAgent\work\9ae188c903d07190\Neo4j.Driver\Neo4j.Driver\Internal\Connector\SocketClient.cs:ligne 90
   à Neo4j.Driver.Internal.Connector.SocketConnection.Sync() dans C:\BuildAgent\work\9ae188c903d07190\Neo4j.Driver\Neo4j.Driver\Internal\Connector\SocketConnection.cs:ligne 67
   à Neo4j.Driver.Internal.Session.<>c__DisplayClass8_0.<Run>b__0() dans C:\BuildAgent\work\9ae188c903d07190\Neo4j.Driver\Neo4j.Driver\Internal\Session.cs:ligne 83
   à Neo4j.Driver.Internal.LoggerBase.TryExecute[T](Func`
1 func) dans C:\BuildAgent\work\9ae188c903d07190\Neo4j.Driver\Neo4j.Driver\Internal\LoggerBase.cs:ligne 54
   
à Neo4j.Driver.Internal.Session.Run(String statement, IDictionary`2 statementParameters) dans C:\BuildAgent\work\9ae188c903d07190\Neo4j.Driver\Neo4j.Driver\Internal\Session.cs:ligne 77
   à Neo4jSample.Neo4jConnector.Execute(String p)
   à Neo4jSample.Neo4jConnector.Insert(String TableName, Dictionary`
2 Values, String Alias)

Est ce que qu'elle qu'un aurai une piste ?
merci,

Benoît Simard

unread,
Jun 27, 2016, 4:22:11 AM6/27/16
to Sebastien Dieudonne, Neo4jFr
Bonjour

Je pencherai plus sur le fait que le xml n'est pas échappé dans la requête.

Sincèrement
--
Envoyé de mon appareil Android avec K-9 Mail. Veuillez excuser ma brièveté.

Sebastien Dieudonne

unread,
Jun 27, 2016, 8:02:27 AM6/27/16
to Neo4jFr
J'ai echapé le xml mais peut être pas tout les caractères.

ma fonction remplace les " \ " par " \\ " et les " ' " par " \' " est ce que c'est suffisant ou il y as d'autre caractère spéciaux ?

merci,

Benoit Simard

unread,
Jun 27, 2016, 5:46:10 PM6/27/16
to neo...@googlegroups.com
Re,

Au niveau de l'échappement, cela dépend surtout avec quoi vous encadrez la string correspondant au xml.

Le problème peut provenir à trois endroits :
 * du driver c#
 * de la requête (échappement)
 * d'un bug dans le protocole ou Neo

Quelle version de Neo utilisez vous ?
Quel driver .Net utilisez vous ?

Pouvez-vous essayer de faire votre requête avec le XML avec le neo4j-shell et dire si cela fonctionne ?

Sincèrement.


Le 27/06/2016 09:06, Sebastien Dieudonne a écrit :
Bonjour,

Je travail sur la base neo4j (et j'utilise Visual Studio 2015 en c#).

Je développe un outils de migration de SGBDR vers neo4j. je but est bien sur de migrer les données de manière intelligente (recréé des donnée en graph et pas bêtement reprendre la table...)

J'utilise donc pour cela la base de donnée de notre erp comme exemple. dans un premier temps je copie bêtement les ligne de l'un vers l'autre. 

Sur une table de log il y as un enregistrement qui fait 12mo (un log avec un fichier XML à l’intérieur) et lors de l'insertion en CYPHER (je créé une requette) sa plante.

Si je supprime le contenu du fichier XML a l’intérieur de la requette CREATE en Cypher sa marche, donc c'est le xml qui me pose problème.

Cette requette étant trop lourd elle ne peu être exécuté dans l'interface web proposé par neo4j. le navigateur ce gèle...

Le message d'erreur est "Expect 2, but got 0" 

et la trace :
à Neo4j.Driver.Internal.Connector.ChunkedInputStream.ReadSpecifiedSize(Byte[] buffer) dans C:\BuildAgent\work\9ae188c903d07190\Neo4j.Driver\Neo4j.Driver\Internal\Connector\ChunkedInputStream.cs:ligne 131
   
à Neo4j.Driver.Internal.Connector.ChunkedInputStream.Ensure(Int32 size) dans C:\BuildAgent\work\9ae188c903d07190\Neo4j.Driver\Neo4j.Driver\Internal\Connector\ChunkedInputStream.cs:ligne 108    à Neo4j.Driver.Internal.Connector.ChunkedInputStream.ReadByte() dans C< span style="color: #660;" class="styled-by-prettify">:\BuildAgent\work\9ae188c903d07190\Neo4j.Driver\Neo4j.Driver\Internal\Connector\ChunkedInputStream.cs:ligne 51    à Neo4j.Driver.Internal.Packstream.PackStream.Unpacker.UnpackStructHeader() dans C:\BuildAgent\work\9ae188c903d07190\Neo4j.Driver\Neo4j.Driver\Internal\Packstream\PackStream.cs:ligne 556    à Neo4j.Driver.Internal.Packstream.PackStreamMessageFormatV1.ReaderV1.Read(IMessageResponseHandler responseHandler) dans C:\BuildAgent\work\9ae188c903d07190\Neo4j.Driver\Neo4j.Driver\Internal\Packstream\PackStreamMessageFormatV1.cs:ligne 53    à Neo4j.Driver.Internal.Connector.SocketClient.Receive(IMessageResponseHandler responseHandler) dans C:\BuildAgent\work\9ae188c903d07190\Neo4j.Driver\Neo4j .Driver\Internal\Connector\SocketClient.cs:ligne 107    à Neo4j.Driver.Internal.Connector.SocketClient.Send(IEnumerable`1 messages, IMessageResponseHandler responseHandler) dans C:\BuildAgent\work\9ae188c903d07190\Neo4j.Driver\Neo4j.Driver\Internal\Connector\SocketClient.cs:ligne 90    à Neo4j.Driver.Internal.Connector.SocketConnection.Sync() dans C:\BuildAgent\work\9ae188c903d07190\Neo4j.Driver\Neo4j.Driver\Internal\Connector\SocketConnection.cs:ligne 67    à Neo4j.Driver.Internal.Session.<>c__DisplayClass8_0.<Run>b__0() dans C:\BuildAgent\work\9ae188c903d07190\Neo4j.Driver\Neo4j.Driver\Internal\Session.cs:ligne 83    à Neo4j.Driver.Internal.LoggerBase.TryExecute[T](Func`1 func) dans C:\BuildAgent\work\9ae188c903d07190\Neo4j.Driver\Neo4j.Driver\Internal\LoggerBase.cs:ligne 54    à Neo4j.Driver.Internal.Session.Run(String statement, IDictionary`2 statementParameters) dans C:\BuildAgent\work\9ae188c903d07190\Neo4j.Driver\Neo4j.Driver\Internal\Session.cs:ligne 77    à Neo4jSample.Neo4jConnector.Execute(String p)    à Neo4jSample.Neo4jConnector.Insert(String TableName, Dictionary`2 Values, String Alias)
Reply all
Reply to author
Forward
0 new messages