From 7e302fcd1b933886a8f62fa2ed1d811f9b2a6c4e Mon Sep 17 00:00:00 2001 From: FuYouJ <1247908487@qq.com> Date: Fri, 7 Jul 2023 21:01:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E6=96=B9=E6=B3=95=E5=91=BD?= =?UTF-8?q?=E5=90=8D=E9=A3=8E=E6=A0=BC=E6=94=B9=E4=B8=BA=E9=A9=BC=E5=B3=B0?= =?UTF-8?q?=EF=BC=9B=20=E6=9B=B4=E6=96=B0=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- neo4jwriter/doc/neo4jwriter.md | 16 +++++++++------- .../datax/plugin/writer/Neo4jWriterTest.java | 6 +++--- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/neo4jwriter/doc/neo4jwriter.md b/neo4jwriter/doc/neo4jwriter.md index 1e55e77e..0c6e356c 100644 --- a/neo4jwriter/doc/neo4jwriter.md +++ b/neo4jwriter/doc/neo4jwriter.md @@ -47,6 +47,7 @@ LOCAL_DATE, LOCAL_TIME, LOCAL_DATE_TIME, LIST, +//map类型支持 . 属性表达式取值 MAP, CHAR_ARRAY, BYTE_ARRAY, @@ -169,9 +170,10 @@ Object_ARRAY ## 注意事项 -* properties的定义的顺序需要与源端一一对应,但数量不必要对齐,neo4j writer 会取最小值。如果源端的数据列少于neo4j字段怎么办?建议将源端数据加工成json格式,在neo4j端将数据类型设置成map。在cypher中,可以根据jsonpath语法一直取值。比如 unwind $batch as row create (p) set p.name = row.properties.name,set p.age = row.properties.age -* 如果提示事务超时,建议调大事务运行时间或者调小batch_size -* 如果用于更新场景,会遇到死锁问题,建议二开源码加入死锁异常检测,并进行重试,开源版本不提供此功能。 +* properties定义的顺序需要与reader端顺序一一对应。 +* 灵活使用map类型,可以免去很多数据加工的烦恼。在cypher中,可以根据 . 属性访问符号一直取值。比如 unwind $batch as row create (p) set p.name = row.prop.name,set p.age = row.prop.age,在这个例子中,prop是map类型,包含name和age两个属性。 +* 如果提示事务超时,建议调大事务运行时间或者调小batchSize +* 如果用于更新场景,遇到死锁问题影响写入,建议二开源码加入死锁异常检测,并进行重试。 ## 性能报告 @@ -185,7 +187,7 @@ Object_ARRAY **datax 配置** -Channel 20 batchsize = 1000 -任务平均流量:15.23MB/s -记录写入速度:44440 rec/s -读出记录总数:2222013 +* Channel 20 batchsize = 1000 +* 任务平均流量:15.23MB/s +* 记录写入速度:44440 rec/s +* 读出记录总数:2222013 diff --git a/neo4jwriter/src/test/java/com/alibaba/datax/plugin/writer/Neo4jWriterTest.java b/neo4jwriter/src/test/java/com/alibaba/datax/plugin/writer/Neo4jWriterTest.java index 1a2ca24c..53c9235e 100644 --- a/neo4jwriter/src/test/java/com/alibaba/datax/plugin/writer/Neo4jWriterTest.java +++ b/neo4jwriter/src/test/java/com/alibaba/datax/plugin/writer/Neo4jWriterTest.java @@ -87,7 +87,7 @@ public class Neo4jWriterTest { } @Test - public void test_create_node_all_type_field() { + public void testCreateNodeAllTypeField() { final Result checkExists = neo4jSession.run("MATCH (p:Person) RETURN p limit 1"); if (checkExists.hasNext()) { neo4jSession.run("MATCH (p:Person) delete p"); @@ -128,7 +128,7 @@ public class Neo4jWriterTest { * 所以先创建节点再模拟关系 */ @Test - public void test_create_relation() { + public void testCreateRelation() { final Result checkExists = neo4jSession.run("MATCH (p1:Person)-[r:LINK]->(p1:Person) return r limit 1"); if (checkExists.hasNext()) { neo4jSession.run("MATCH (p1:Person)-[r:LINK]->(p1:Person) delete r,p1,p2"); @@ -179,7 +179,7 @@ public class Neo4jWriterTest { * neo4j中,Label和关系类型,想动态的写,需要借助于apoc函数 */ @Test - public void test_use_apoc_create_dynamic_label() { + public void testUseApocCreateDynamicLabel() { List dynamicLabel = new ArrayList<>(); for (int i = 0; i < MOCK_NUM; i++) { dynamicLabel.add("Label" + i);