Hi Michael

Is it possible to do this if the labels and relationships for nodes 
changes, as upon reading i am not able to parameterized labels and 
relationships.

as the batch of per 500 queries may differ on relationships and labels 
being used per query.

On Tuesday, May 6, 2014 3:47:07 PM UTC+8, Michael Hunger wrote:
>
> Don't acquire new connection objects
> Don't create new prepared statements
>
> Sent from mobile device
>
> Am 06.05.2014 um 09:31 schrieb Gene Tan <[email protected] <javascript:>
> >:
>
> Hi Michael,
>
> I have made changes to the query and the code used but it seems the query 
> time for jdbc driver is still slower comapred to Java Rest Binding,
>
> MERGE (firstNode:Soap {id:{1}})
> ON CREATE SET firstNode.brand={2}, firstNode.updated = timestamp()
> ON MATCH SET firstNode.updated=timestamp()
> MERGE (secondNode:Company {id:'{3}'}) 
> ON CREATE SET secondNode.name="{4}", secondNode.updated = timestamp()
> ON MATCH SET secondNode.updated=timestamp()
> WITH firstNode, secondNode 
> OPTIONAL MATCH firstNode - [existing:`manufacturer`] - () 
> DELETE existing 
> MERGE (firstNode)-[r:`manufacturer`]-(secondNode);
>
> public void processList(List<CYPHERExecuteQueryObject> list) {
>         for (CYPHERExecuteQueryObject c : list) {
>             neo4jjdbcinsert(c.getQuery(), c.getParams());
>             ctr++;
>             if (ctr == 500) {
>                 commit();
>                 ctr = 0;
>             }
>         }
>     }
>
>     // set auto commit to false
>     public void neo4jjdbcinsert(String query, Object... params) {
>         try {
>             if (con.isClosed()) {
>                 con = 
> DriverManager.getConnection("jdbc:neo4j://localhost:7474/");
>                 con.setAutoCommit(false);
>             }
>             try {
>                 PreparedStatement preparedStatement = 
> con.prepareStatement(query);
>                 preparedStatement.clearParameters();
>                 for (int i = 0; i < params.length; i++) {
>                     preparedStatement.setObject(i+1, params[i]);
>                 }
>                 preparedStatement.execute();
>             } catch (Exception e) {
>                 e.printStackTrace();
>             }
>         } catch (SQLException e) {
>             e.printStackTrace();
>         }
>     }
>
>     public void commit() {
>         try {
>             con.commit();
>         } catch (SQLException e) {
>             e.printStackTrace();
>         } finally {
>             try {
>                 con.close();
>             } catch (SQLException e) {
>                 e.printStackTrace();
>             }
>         }
>     }
>
>
>
>
> On Tuesday, May 6, 2014 2:37:17 PM UTC+8, Michael Hunger wrote:
>>
>> 1. You still don't use labels and indexes in MERGE, it should look like 
>> this:
>>
>> MERGE (firstNode:Soap {id:{1}})
>> ON CREATE SET firstNode.brand={2}
>>
>> SET firstNode.updated = timestamp()
>> 2. You don't use the API like that, but instead create a single 
>> PreparedStatement then add parameters and execute, then clear, add new 
>> parameters and execute
>> You don't operate on Neo4jConnection but only with the JDBC APIs.
>>
>> Also this doesn't work: firstNode.brand="{2}"
>> it must be: firstNode.brand={2}
>>
>>
>> Am 06.05.2014 um 08:19 schrieb Gene Tan <[email protected]>:
>>
>> Hi Michael.
>>
>> I tried out using jdbc driver using the same scenario mentioned earlier
>>  inserting data by batch of 500 queries
>> and query
>> MERGE (firstNode {id:{1}})
>> ON CREATE SET firstNode.brand="{2}", firstNode.updated = 
>> timestamp(),firstNode
>> :Soap
>> ON MATCH SET firstNode.updated=timestamp()
>> MERGE (secondNode{id:'{3}'}) 
>> ON CREATE SET secondNode.name="{4}", secondNode.updated = timestamp(), 
>> secondNode:Company
>> ON MATCH SET secondNode.updated=timestamp()
>> WITH firstNode, secondNode 
>> //CHANGE MANUFACTURER if there is an existing manufacturer
>> OPTIONAL MATCH firstNode - [existing:`manufacturer`] - () 
>> DELETE existing 
>> CREATE UNIQUE p = (firstNode)-[r:`manufacturer`]-(secondNode) RETURN p;
>> and was wondering why jdbc driver processing time is slower that the java 
>> rest binding, or I am just using the wrong way... because for a small 
>> sample data 619 nodes and 4611 relationships it took the jdbc driver one 
>> minute to insert the data while, it just took 21 seconds for the java rest 
>> binding to insert the data.  
>> Here is the code used for inserting data:
>> public void processList(List<CYPHERExecuteQueryObject> list) {
>>         for (CYPHERExecuteQueryObject c : list) {
>>             neo4jjdbcinsert(c.getQuery(), c.getParams());
>>             ctr++;
>>             if (ctr == 500) {
>>                 commit();
>>                 ctr = 0;
>>             }
>>         }
>>     }
>>
>>     // set auto commit to false
>>     public void neo4jjdbcinsert(String query, Object... params) {
>>         try {
>>             if (con.isClosed()) {
>>                 con = (Neo4jConnection) 
>> DriverManager.getConnection("jdbc:neo4j://localhost:7474/");
>>                 con.setAutoCommit(false);
>>             }
>>             HashMap<String, Object> map = new HashMap<>();
>>             for (int i = 0; i < params.length; i++) {
>>                 map.put(i + 1 +"", params[i]);
>>             }
>>             try {
>>                 con.executeQuery(query, map);
>>             } catch (Exception e) {
>>                 e.printStackTrace();
>>             }
>>         } catch (SQLException e) {
>>             e.printStackTrace();
>>         }
>>     }
>>
>>     public void commit() {
>>         try {
>>             con.commit();
>>         } catch (SQLException e) {
>>             e.printStackTrace();
>>         } finally {
>>             try {
>>                 con.close();
>>             } catch (SQLException e) {
>>                 e.printStackTrace();
>>             }
>>         }
>> }
>>
>>
>> Thanks
>>
>> On Friday, May 2, 2014 4:14:30 PM UTC+8, Gene Tan wrote:
>>>
>>> Thanks! Michael, will try this out
>>>
>>> On Thursday, May 1, 2014 5:15:12 PM UTC+8, Michael Hunger wrote:
>>>>
>>>> 1. Use labels + indexes (or constraints)
>>>>
>>>> Without an label + existing index your first operation (merge) will 
>>>> have to go over all nodes in the graph to find if there is already a 
>>>> duplicate which it would then merge to
>>>> the second CREATE UNIQUE should be a MERGE too.
>>>>
>>>> 2. Use parameters for your literal input values, otherwise cypher has 
>>>> to recompile the query every time and cannot reuse-the pre-compiled query 
>>>> plans.
>>>> 3. you might want to move from Java-Rest-Binding to the JDBC driver, 
>>>> which is much better for cypher interactions with the server.
>>>>
>>>>
>>>>
>>>> On Wed, Apr 30, 2014 at 9:25 AM, Gene Tan <[email protected]> wrote:
>>>>
>>>>> Hello,
>>>>>
>>>>> I am new to neo4j 
>>>>> currently already have a graph that contains at least 180000 nodes and 
>>>>> 1400000 
>>>>> relationships , 
>>>>> I am inserting data by batch of 500 queries, through the java rest 
>>>>> binding library, and have observed that some queries had encountered read 
>>>>> timeout, I was wondering if it is because of my query used for inserting 
>>>>> data. Or is it related to configurations with neo4j..
>>>>> Here is a sample query that I am using for inserting data
>>>>>
>>>>>> MERGE (firstNode {id:'1234'})
>>>>>> ON CREATE SET firstNode.brand="Dove", firstNode.updated = timestamp
>>>>>> (), firstNode:Soap
>>>>>> ON MATCH SET firstNode.updated=timestamp()
>>>>>> MERGE (secondNode{id:'2345'}) 
>>>>>> ON CREATE SET secondNode.name="Dove Manufacturer", secondNode.updated 
>>>>>> = timestamp(), firstNode:Company
>>>>>> ON MATCH SET secondNode.updated=timestamp()
>>>>>> WITH firstNode, secondNode 
>>>>>> //CHANGE MANUFACTURER if there is an existing manufacturer
>>>>>> OPTIONAL MATCH firstNode - [existing:`manufacturer`] - () 
>>>>>> DELETE existing 
>>>>>> CREATE UNIQUE p = (firstNode)-[r:`manufacturer`]-(secondNode) RETURN 
>>>>>> p;
>>>>>>
>>>>>
>>>>> Is there anyway to make this query run faster?
>>>>>
>>>>> Thanks!
>>>>>
>>>>>
>>>>> -- 
>>>>> You received this message because you are subscribed to the Google 
>>>>> Groups "Neo4j" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>>> an email to [email protected].
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>>
>>>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Neo4j" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> For more options, visit https://groups.google.com/d/optout.
>>
>>
>>  -- 
> You received this message because you are subscribed to the Google Groups 
> "Neo4j" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected] <javascript:>.
> For more options, visit https://groups.google.com/d/optout.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Neo4j" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to