Commit 400e2554 by qiuchaofei

返回节点添加属性

parent 1366f723
...@@ -453,18 +453,25 @@ public class TableServiceImpl implements ITableService { ...@@ -453,18 +453,25 @@ public class TableServiceImpl implements ITableService {
@Override @Override
public ReturnReslult getTableAndColumnRelation(String tableId) { public ReturnReslult getTableAndColumnRelation(String tableId) {
ReturnReslult returnReslult = new ReturnReslult(); ReturnReslult returnReslult = new ReturnReslult();
long timeStart = System.currentTimeMillis();
Map<String,ReturnNode> returnNodeMap = new HashMap<>(); Map<String,ReturnNode> returnNodeMap = new HashMap<>();
Map<String,ReturnEdge> returnEdgeMap = new HashMap<>(); Map<String,ReturnEdge> returnEdgeMap = new HashMap<>();
Neo4jConfig neo4jConfig = new Neo4jConfig(); Neo4jConfig neo4jConfig = new Neo4jConfig();
Driver neo4jConnection = neo4jConfig.getNeo4jConnection(); Driver neo4jConnection = neo4jConfig.getNeo4jConnection();
Session session = neo4jConnection.session(); Session session = neo4jConnection.session();
int runCypherCount = 0;
long runCypherTime = 0;
//先找出 表的前后关系,再找出表的字段,然后找出字段的前后关系, //先找出 表的前后关系,再找出表的字段,然后找出字段的前后关系,
String targetTablecypher = "match (n:Neo4jTable{metadataId:\""+ tableId +"\"})-[r1:流向]->(n1)-[r0:TempRelation*0..]->(m2)-[r:流向]->(m1) return m1"; String targetTablecypher = "match (n:Neo4jTable{metadataId:\""+ tableId +"\"})-[r1:流向]->(n1)-[r0:TempRelation*0..]->(m2)-[r:流向]->(m1) return m1";
String sourceTablecypher = "match (n:Neo4jTable{metadataId:\""+ tableId +"\"})<-[r1:流向]-(n1)<-[r0:TempRelation*0..]-(m2)<-[r:流向]-(m1) return m1"; String sourceTablecypher = "match (n:Neo4jTable{metadataId:\""+ tableId +"\"})<-[r1:流向]-(n1)<-[r0:TempRelation*0..]-(m2)<-[r:流向]-(m1) return m1";
long time01=System.currentTimeMillis();
StatementResult sourceTableResult = session.run(sourceTablecypher); StatementResult sourceTableResult = session.run(sourceTablecypher);
long time11=System.currentTimeMillis();
runCypherTime += (time11-time01);
runCypherCount++;
// 先找出目标表 // 先找出目标表
while(sourceTableResult.hasNext()){ while(sourceTableResult.hasNext()){
Record record = sourceTableResult.next(); Record record = sourceTableResult.next();
...@@ -484,19 +491,25 @@ public class TableServiceImpl implements ITableService { ...@@ -484,19 +491,25 @@ public class TableServiceImpl implements ITableService {
returnNode.setName(metaData.getName()); returnNode.setName(metaData.getName());
returnNode.setCnName(metaData.getCnName()); returnNode.setCnName(metaData.getCnName());
returnNode.setDataPath(metaData.getPath()); returnNode.setDataPath(metaData.getPath());
returnNode.setType("Table");
returnNodeMap.put(returnNode.getId(),returnNode); returnNodeMap.put(returnNode.getId(),returnNode);
ReturnEdge returnEdge = new ReturnEdge(); ReturnEdge returnEdge = new ReturnEdge();
String edgeId =returnNode.getId() +"_"+ tableId; String edgeId =returnNode.getId() +"_"+ tableId;
returnEdge.setFromId(returnNode.getId()); returnEdge.setFromId(returnNode.getId());
returnEdge.setToId(tableId ); returnEdge.setToId(tableId );
returnEdge.setType("流向"); returnEdge.setType("To");
returnEdge.setEdgeId(edgeId);
returnEdgeMap.put(edgeId,returnEdge); returnEdgeMap.put(edgeId,returnEdge);
} }
} }
} }
long time20=System.currentTimeMillis();
StatementResult targetTablecResult = session.run(targetTablecypher); StatementResult targetTablecResult = session.run(targetTablecypher);
runCypherCount++;
long time21=System.currentTimeMillis();
runCypherTime += (time21-time20);
// 先找出目标表 // 先找出目标表
while(targetTablecResult.hasNext()){ while(targetTablecResult.hasNext()){
Record record = targetTablecResult.next(); Record record = targetTablecResult.next();
...@@ -516,26 +529,40 @@ public class TableServiceImpl implements ITableService { ...@@ -516,26 +529,40 @@ public class TableServiceImpl implements ITableService {
returnNode.setName(metaData.getName()); returnNode.setName(metaData.getName());
returnNode.setCnName(metaData.getCnName()); returnNode.setCnName(metaData.getCnName());
returnNode.setDataPath(metaData.getPath()); returnNode.setDataPath(metaData.getPath());
returnNode.setType("Table");
returnNodeMap.put(returnNode.getId(),returnNode); returnNodeMap.put(returnNode.getId(),returnNode);
ReturnEdge returnEdge = new ReturnEdge(); ReturnEdge returnEdge = new ReturnEdge();
String edgeId = tableId+"_"+returnNode.getId(); String edgeId = tableId+"_"+returnNode.getId();
returnEdge.setFromId(tableId); returnEdge.setFromId(tableId);
returnEdge.setToId(returnNode.getId()); returnEdge.setToId(returnNode.getId());
returnEdge.setType("流向"); returnEdge.setType("To");
returnEdge.setEdgeId(edgeId);
returnEdgeMap.put(edgeId,returnEdge); returnEdgeMap.put(edgeId,returnEdge);
} }
} }
} }
int respossitoryCount= 0;
int respossitoryTime= 0;
long time101 = System.currentTimeMillis();
List<Neo4jColumn> neo4jColumns = neo4jTableRepository.getColumnByTableId(tableId); List<Neo4jColumn> neo4jColumns = neo4jTableRepository.getColumnByTableId(tableId);
long time102 = System.currentTimeMillis();
respossitoryTime += (time102 - time101);
respossitoryCount++;
logger.info("d");
for(Neo4jColumn neo4jColumn:neo4jColumns){ for(Neo4jColumn neo4jColumn:neo4jColumns){
String currentColumnId = neo4jColumn.getMetadataId(); String currentColumnId = neo4jColumn.getMetadataId();
String targetColumncypher = "match (m:Neo4jColumn{metadataId:\""+currentColumnId+"\"})-[r1:流向]->(n1)-[r0:TempRelation*0..]->(m2)-[r:流向]->(m1) return m1"; String targetColumncypher = "match (m:Neo4jColumn{metadataId:\""+currentColumnId+"\"})-[r1:流向]->(n1)-[r0:TempRelation*0..]->(m2)-[r:流向]->(m1) return m1";
String sourceColumncypher = "match (m:Neo4jColumn{metadataId:\""+currentColumnId+"\"})<-[r1:流向]-(n1)<-[r0:TempRelation*0..]-(m2)<-[r:流向]-(m1) return m1"; String sourceColumncypher = "match (m:Neo4jColumn{metadataId:\""+currentColumnId+"\"})<-[r1:流向]-(n1)<-[r0:TempRelation*0..]-(m2)<-[r:流向]-(m1) return m1";
long time30=System.currentTimeMillis();
StatementResult targetColumnResult = session.run(targetColumncypher); StatementResult targetColumnResult = session.run(targetColumncypher);
long time31=System.currentTimeMillis();
runCypherTime += (time31-time30);
runCypherCount++;
while(targetColumnResult.hasNext()){ while(targetColumnResult.hasNext()){
Record record = targetColumnResult.next(); Record record = targetColumnResult.next();
List<Value> values = record.values(); List<Value> values = record.values();
...@@ -553,6 +580,7 @@ public class TableServiceImpl implements ITableService { ...@@ -553,6 +580,7 @@ public class TableServiceImpl implements ITableService {
returnNode.setId(metaData.getMetadataId()); returnNode.setId(metaData.getMetadataId());
returnNode.setName(metaData.getName()); returnNode.setName(metaData.getName());
returnNode.setCnName(metaData.getCnName()); returnNode.setCnName(metaData.getCnName());
returnNode.setType("Column");
returnNode.setDataPath(metaData.getPath()); returnNode.setDataPath(metaData.getPath());
returnNodeMap.put(returnNode.getId(),returnNode); returnNodeMap.put(returnNode.getId(),returnNode);
...@@ -560,12 +588,17 @@ public class TableServiceImpl implements ITableService { ...@@ -560,12 +588,17 @@ public class TableServiceImpl implements ITableService {
String edgeId = tableId+"_"+returnNode.getId(); String edgeId = tableId+"_"+returnNode.getId();
returnEdge.setFromId(currentColumnId); returnEdge.setFromId(currentColumnId);
returnEdge.setToId(returnNode.getId()); returnEdge.setToId(returnNode.getId());
returnEdge.setType("流向"); returnEdge.setType("To");
returnEdge.setEdgeId(edgeId);
returnEdgeMap.put(edgeId,returnEdge); returnEdgeMap.put(edgeId,returnEdge);
} }
} }
} }
long time40=System.currentTimeMillis();
StatementResult sourceColumnResult = session.run(sourceColumncypher); StatementResult sourceColumnResult = session.run(sourceColumncypher);
runCypherCount++;
long time41=System.currentTimeMillis();
runCypherTime += (time41-time40);
while(sourceColumnResult.hasNext()){ while(sourceColumnResult.hasNext()){
Record record = sourceColumnResult.next(); Record record = sourceColumnResult.next();
List<Value> values = record.values(); List<Value> values = record.values();
...@@ -584,13 +617,15 @@ public class TableServiceImpl implements ITableService { ...@@ -584,13 +617,15 @@ public class TableServiceImpl implements ITableService {
returnNode.setName(metaData.getName()); returnNode.setName(metaData.getName());
returnNode.setCnName(metaData.getCnName()); returnNode.setCnName(metaData.getCnName());
returnNode.setDataPath(metaData.getPath()); returnNode.setDataPath(metaData.getPath());
returnNode.setType("Column");
returnNodeMap.put(returnNode.getId(),returnNode); returnNodeMap.put(returnNode.getId(),returnNode);
ReturnEdge returnEdge = new ReturnEdge(); ReturnEdge returnEdge = new ReturnEdge();
String edgeId =returnNode.getId() +"_"+tableId; String edgeId =returnNode.getId() +"_"+tableId;
returnEdge.setFromId(returnNode.getId() ); returnEdge.setFromId(returnNode.getId() );
returnEdge.setToId(currentColumnId); returnEdge.setToId(currentColumnId);
returnEdge.setType("流向"); returnEdge.setType("To");
returnEdge.setEdgeId(edgeId);
returnEdgeMap.put(edgeId,returnEdge); returnEdgeMap.put(edgeId,returnEdge);
} }
} }
...@@ -603,25 +638,74 @@ public class TableServiceImpl implements ITableService { ...@@ -603,25 +638,74 @@ public class TableServiceImpl implements ITableService {
String currentTableId = (String)obj; String currentTableId = (String)obj;
List<Neo4jColumn> currentNeo4jColumns = neo4jTableRepository.getColumnByTableId(currentTableId); if(!currentTableId.startsWith("Table=")){
for(Neo4jColumn currentNeo4jColumn:currentNeo4jColumns){ continue;
String columnId = currentNeo4jColumn.getMetadataId(); }
if(!returnNodeMap.containsKey(columnId)){ long time103 = System.currentTimeMillis();
String table2CoumnCypher = "match (n:Neo4jTable{metadataId:\""+currentTableId+"\"})-[r2:Composition]->(m:Neo4jColumn) return m";
runCypherCount++;
StatementResult table2CoumnResult = session.run(table2CoumnCypher);
long time104 = System.currentTimeMillis();
runCypherTime += (time104 - time103);
while(table2CoumnResult.hasNext()){
Record record = table2CoumnResult.next();
List<Value> values = record.values();
for (Value value : values) {
if(value.type().name().equals("NODE")){
Node node = value.asNode();
Map<String, Object> stringObjectMap = node.asMap();
MetaData metaData = new MetaData();
Neo4jTool.transMap2Bean(stringObjectMap, metaData);
if(metaData.getMetadataId() == null ){
metaData.setMetadataId("System="+metaData.getName());
}
String columnId = metaData.getMetadataId();
if(!returnNodeMap.containsKey(columnId)){
ReturnNode returnNode = new ReturnNode(); ReturnNode returnNode = new ReturnNode();
returnNode.setId(currentNeo4jColumn.getMetadataId()); returnNode.setId(metaData.getMetadataId());
returnNode.setName(currentNeo4jColumn.getName()); returnNode.setName(metaData.getName());
returnNode.setCnName(currentNeo4jColumn.getCnName()); returnNode.setCnName(metaData.getCnName());
returnNode.setDataPath(metaData.getPath());
returnNode.setType("Column");
noRelationColumns.put(columnId ,returnNode); noRelationColumns.put(columnId ,returnNode);
} }
ReturnEdge returnEdge = new ReturnEdge(); ReturnEdge returnEdge = new ReturnEdge();
String edgeId = currentTableId+"_"+columnId; String edgeId = currentTableId+"_"+columnId;
returnEdge.setEdgeId(edgeId);
returnEdge.setFromId(currentTableId); returnEdge.setFromId(currentTableId);
returnEdge.setToId(columnId); returnEdge.setToId(columnId);
returnEdge.setType("Composition"); returnEdge.setType("Composition");
returnEdgeMap.put(edgeId,returnEdge); returnEdgeMap.put(edgeId,returnEdge);
} }
} }
}
// List<Neo4jColumn> currentNeo4jColumns = neo4jTableRepository.getColumnByTableId(currentTableId);
// for(Neo4jColumn currentNeo4jColumn:currentNeo4jColumns){
// String columnId = currentNeo4jColumn.getMetadataId();
// if(!returnNodeMap.containsKey(columnId)){
//
// ReturnNode returnNode = new ReturnNode();
// returnNode.setId(currentNeo4jColumn.getMetadataId());
// returnNode.setName(currentNeo4jColumn.getName());
// returnNode.setCnName(currentNeo4jColumn.getCnName());
// noRelationColumns.put(columnId ,returnNode);
// }
// ReturnEdge returnEdge = new ReturnEdge();
// String edgeId = currentTableId+"_"+columnId;
// returnEdge.setFromId(currentTableId);
// returnEdge.setToId(columnId);
// returnEdge.setType("Composition");
// returnEdgeMap.put(edgeId,returnEdge);
// }
}
long timeStart1 = System.currentTimeMillis();
for(Object obj:returnNodeMap.keySet()){ for(Object obj:returnNodeMap.keySet()){
ReturnNode returnNode = returnNodeMap.get(obj); ReturnNode returnNode = returnNodeMap.get(obj);
returnReslult.getNodes().add(returnNode); returnReslult.getNodes().add(returnNode);
...@@ -634,7 +718,12 @@ public class TableServiceImpl implements ITableService { ...@@ -634,7 +718,12 @@ public class TableServiceImpl implements ITableService {
ReturnEdge returnEdge = returnEdgeMap.get(obj); ReturnEdge returnEdge = returnEdgeMap.get(obj);
returnReslult.getEdges().add(returnEdge); returnReslult.getEdges().add(returnEdge);
} }
System.out.println("查询run次数:"+runCypherCount +" , 时间:"+runCypherTime);
System.out.println("查询respossitory次数:"+respossitoryCount +" , 时间:"+respossitoryTime);
long timeEnd = System.currentTimeMillis();
System.out.println("总耗时:"+(timeEnd-timeStart));
return returnReslult; return returnReslult;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment