Commit cd23bb41 by qiuchaofei

1,优化查询单个元模型数据的方法。

parent d71b787e
...@@ -50,7 +50,7 @@ public class MetaDataController { ...@@ -50,7 +50,7 @@ public class MetaDataController {
private IBaseRelationshipService baseRelationshipService; private IBaseRelationshipService baseRelationshipService;
/** /**
* 查询元数据 * 获取所有的节点
*/ */
@RequestMapping(path = "/list", method = RequestMethod.GET) @RequestMapping(path = "/list", method = RequestMethod.GET)
public List<MetaData> getUserNodeList() { public List<MetaData> getUserNodeList() {
...@@ -252,7 +252,7 @@ public class MetaDataController { ...@@ -252,7 +252,7 @@ public class MetaDataController {
@ApiOperation(tags = "", value = "开始获取直接下层节点") @ApiOperation(tags = "", value = "开始获取直接下层节点")
@RequestMapping(path = "/getNextDrill", method = RequestMethod.GET) @RequestMapping(path = "/getNextDrill", method = RequestMethod.GET)
public ReturnReslult getNextDrill(String dataId) { public ReturnReslult getNextDrill(String dataId,String layer) {
logger.info("开始获取直接下层节点"); logger.info("开始获取直接下层节点");
List<MetaData> metaDataList = new ArrayList<>(); List<MetaData> metaDataList = new ArrayList<>();
......
...@@ -215,17 +215,22 @@ public class MetadataServiceImpl implements IMetadataService { ...@@ -215,17 +215,22 @@ public class MetadataServiceImpl implements IMetadataService {
} }
} }
} }
logger.info("得到的节点数是:"+returnReslult.getNodes().size()); int nodeSize = returnReslult.getNodes().size();
logger.info("得到的节点数是:"+nodeSize);
List<String> analysisId = new ArrayList<>(); List<String> analysisId = new ArrayList<>();
int count = 0; int count = 0;
int threadCount = 5;
if(nodeSize<5){
threadCount = nodeSize;
}
//遍历每两个节点的关系 //遍历每两个节点的关系
long time0 = System.currentTimeMillis(); long time0 = System.currentTimeMillis();
ExecutorService executor = Executors.newFixedThreadPool(10); ExecutorService executor = Executors.newFixedThreadPool(threadCount);
List<Future<List<Edge>>> relations = new ArrayList<>(); List<Future<List<Edge>>> relations = new ArrayList<>();
final CountDownLatch countDownLatch = new CountDownLatch(10); final CountDownLatch countDownLatch = new CountDownLatch(threadCount);
for(String metadataId:metadataIdList){ for(String metadataId:metadataIdList){
Future<List<Edge>> futures = executor.submit(new neo4jRelaionTask(metadataId,metadataIdList,modelName,session,countDownLatch)); Future<List<Edge>> futures = executor.submit(new neo4jRelaionTask(metadataId,metadataIdList,modelName,session,countDownLatch));
relations.add(futures); relations.add(futures);
...@@ -734,17 +739,6 @@ public class MetadataServiceImpl implements IMetadataService { ...@@ -734,17 +739,6 @@ public class MetadataServiceImpl implements IMetadataService {
} }
} }
Iterable<TempNode> nodeIterable = tempNodeRepository.findAll();
labels.add("All");
for(TempNode node :nodeIterable){
String metadataId = node.getMetadataId();
String[] metadataIds = metadataId.split("=");
String modelName = metadataIds[0];
if(!labels.contains(modelName)){
labels.add(modelName);
}
}
return labels; return labels;
} }
...@@ -859,70 +853,115 @@ class neo4jRelaionTask implements Callable<List<Edge>>{ ...@@ -859,70 +853,115 @@ class neo4jRelaionTask implements Callable<List<Edge>>{
@Override @Override
public List<Edge> call() throws Exception { public List<Edge> call() throws Exception {
long count = System.currentTimeMillis(); long count = System.currentTimeMillis();
for (String metadataId1 : metadataIdList) {
if (metadataId.equals(metadataId1)) {
continue;
}
// if (analysisId.contains(metadataId1)) {
// continue;
// }
String impactCypher = "";
if(modelName.toLowerCase().equals("table") ){
impactCypher= "MATCH p=(a:MetaData{metadataId:\"" + metadataId + "\"})-[r:Composition]->()-->()-->()<-[r1:Composition]-(b:MetaData{metadataId:\"" + metadataId1 + "\"})\n" +
"RETURN p";
}else if(modelName.toLowerCase().equals("sqlscript")){
impactCypher= "MATCH p=(a:MetaData{metadataId:\"" + metadataId + "\"})-[r:Execute]->()-->()-->()<-[r1:Execute]-(b:MetaData{metadataId:\"" + metadataId1 + "\"})\n" +
"RETURN p";
}else if(modelName.toLowerCase().equals("etljob")){
impactCypher= "MATCH p=(a:MetaData{metadataId:\"" + metadataId + "\"})-[r:Execute]->()-[r1:Execute]->()-->()-->()<-[r2:Execute]-()<-[r3:Execute]-(b:MetaData{metadataId:\"" + metadataId1 + "\"})\n" +
"RETURN p";
}else if(modelName.toLowerCase().equals("column") ||modelName.toLowerCase().equals("sql") ){
impactCypher= "MATCH p=(a:MetaData{metadataId:\"" + metadataId + "\"})-->()-->(b:MetaData{metadataId:\"" + metadataId1 + "\"})\n" +
"RETURN p";
}
String impactCypher = "";
if(modelName.toLowerCase().equals("table") ) {
// impactCypher = "MATCH p=(a:MetaData{metadataId:\"" + metadataId + "\"})-[r:Composition]->()-->()-->()<-[r1:Composition]-(b:MetaData{metadataId:\"" + metadataId1 + "\"})\n" +
// "RETURN p";
impactCypher = "match (n:MetaData{metadataId:\""+metadataId+"\"})-->(m)-[r:Input]->(q)-[r0:TempInput*0..]->(w)-[r1:Output]->(p)<-[r2:Composition]-(t)\n" +
"return t.metadataId as metadataId ";
}else if(modelName.toLowerCase().equals("etljob") ){
impactCypher = "match (n:MetaData{metadataId:\""+metadataId+"\"})-->(n1)-->(n2)-[r:Output]->(p)-[r0:Input]->(p1)<-[r2:Execute]-(m0)<-[r3:Execute]-(m1) " +
"return m1.metadataId as metadataId";
}else if(modelName.toLowerCase().equals("column") ){
impactCypher = "match ({metadataId:\""+metadataId+"\"})-[r:Input]->(q)-[r0:TempInput*0..]->(w)-[r1:Output]->(c)\n" +
"return c.metadataId as metadataId";
}else if(modelName.toLowerCase().equals("sql") ){
impactCypher = "match ({metadataId:\""+metadataId+"\"})-[r0:TempInput*0..]->(w)-[r1:Output]->(c)-[r:Input]->(s)\n" +
"return s.metadataId as metadataId";
}else if(modelName.toLowerCase().equals("sqlscript") ){
impactCypher = "match (n:MetaData{metadataId:\""+metadataId+"\"})-->(n2)-[r]->(p)-[r0]->(p1)<-[r2:Execute]-(s)" +
" return s.metadataId as metadataId ";
}
System.out.println("impactCypher:"+impactCypher);
StatementResult impactResult1 = session.run(impactCypher);
while (impactResult1.hasNext()) {
Record record = impactResult1.next();
List<Value> values = record.values();
for (Value value : values) {
String id = value.asString("metadataId");
System.out.println(metadataId+"-->>"+id);
StatementResult impactResult = session.run(impactCypher);
if (impactResult.hasNext()) {
logger.info(metadataId + " --->>" + metadataId1);
Edge edge = new Edge(); Edge edge = new Edge();
// edge.setEdgeId(); // edge.setEdgeId();
edge.setFromId(metadataId); edge.setFromId(metadataId);
edge.setToId(metadataId1); edge.setToId(id);
edge.setType("流入"); edge.setType("流入");
edge.setEdgeId("" + count++); edge.setEdgeId("" + count++);
edgeList.add(edge); edgeList.add(edge);
} }
String lineageCypher = ""; }
if(modelName.toLowerCase().equals("table")){
lineageCypher= "MATCH p=(a:MetaData{metadataId:\"" + metadataId1 + "\"})-[r:Composition]->() -->()-->()<-[r1:Composition]-(b:MetaData{metadataId:\"" + metadataId + "\"})\n" + for (String metadataId1 : metadataIdList) {
"RETURN p"; if (metadataId.equals(metadataId1)) {
}else if(modelName.toLowerCase().equals("sqlscript")){ continue;
lineageCypher= "MATCH p=(a:MetaData{metadataId:\"" + metadataId1 + "\"})-[r:Execute]->() -->()-->()<-[r1:Execute]-(b:MetaData{metadataId:\"" + metadataId + "\"})\n" +
"RETURN p";
}else if(modelName.toLowerCase().equals("etljob")){
lineageCypher= "MATCH p=(a:MetaData{metadataId:\"" + metadataId1 + "\"})-[r:Execute]->()-[r1:Execute]->()-->()-->()<-[r2:Execute]-()<-[r3:Execute]-(b:MetaData{metadataId:\"" + metadataId + "\"})\n" +
"RETURN p";
}else if(modelName.toLowerCase().equals("column") ||modelName.toLowerCase().equals("sql") ){
lineageCypher= "MATCH p=(a:MetaData{metadataId:\"" + metadataId1 + "\"})-->()-->(b:MetaData{metadataId:\"" + metadataId + "\"})\n" +
"RETURN p";
} }
// String lineageCypher = "MATCH p=(a:MetaData{metadataId:\"" + metadataId1 + "\"})-[r:Composition]->() -->()-->()<-[r1:Composition]-(b:MetaData{metadataId:\"" + metadataId + "\"})\n" +
// if (analysisId.contains(metadataId1)) {
// continue;
// }
// if(modelName.toLowerCase().equals("table") ){
// impactCypher= "MATCH p=(a:MetaData{metadataId:\"" + metadataId + "\"})-[r:Composition]->()-->()-->()<-[r1:Composition]-(b:MetaData{metadataId:\"" + metadataId1 + "\"})\n" +
// "RETURN p"; // "RETURN p";
StatementResult lineageResult = session.run(lineageCypher); // }else if(modelName.toLowerCase().equals("sqlscript")){
if (lineageResult.hasNext()) { // impactCypher= "MATCH p=(a:MetaData{metadataId:\"" + metadataId + "\"})-[r:Execute]->()-->()-->()<-[r1:Execute]-(b:MetaData{metadataId:\"" + metadataId1 + "\"})\n" +
logger.info(metadataId + "<<-- " + metadataId1); // "RETURN p";
Edge edge = new Edge(); //
// }else if(modelName.toLowerCase().equals("etljob")){
// impactCypher= "MATCH p=(a:MetaData{metadataId:\"" + metadataId + "\"})-[r:Execute]->()-[r1:Execute]->()-->()-->()<-[r2:Execute]-()<-[r3:Execute]-(b:MetaData{metadataId:\"" + metadataId1 + "\"})\n" +
// "RETURN p";
// }else if(modelName.toLowerCase().equals("column") ||modelName.toLowerCase().equals("sql") ){
// impactCypher= "MATCH p=(a:MetaData{metadataId:\"" + metadataId + "\"})-->()-->(b:MetaData{metadataId:\"" + metadataId1 + "\"})\n" +
// "RETURN p";
// }
edge.setEdgeId("" + count++);
// edge.setEdgeId(); // StatementResult impactResult = session.run(impactCypher);
edge.setFromId(metadataId1); // if (impactResult.hasNext()) {
edge.setToId(metadataId); // logger.info(metadataId + " --->>" + metadataId1);
edge.setType("流出"); // Edge edge = new Edge();
edgeList.add(edge); //// edge.setEdgeId();
} // edge.setFromId(metadataId);
// edge.setToId(metadataId1);
// edge.setType("流入");
// edge.setEdgeId("" + count++);
// edgeList.add(edge);
//
// }
// String lineageCypher = "";
// if(modelName.toLowerCase().equals("table")){
// lineageCypher= "MATCH p=(a:MetaData{metadataId:\"" + metadataId1 + "\"})-[r:Composition]->() -->()-->()<-[r1:Composition]-(b:MetaData{metadataId:\"" + metadataId + "\"})\n" +
// "RETURN p";
// }else if(modelName.toLowerCase().equals("sqlscript")){
// lineageCypher= "MATCH p=(a:MetaData{metadataId:\"" + metadataId1 + "\"})-[r:Execute]->() -->()-->()<-[r1:Execute]-(b:MetaData{metadataId:\"" + metadataId + "\"})\n" +
// "RETURN p";
// }else if(modelName.toLowerCase().equals("etljob")){
// lineageCypher= "MATCH p=(a:MetaData{metadataId:\"" + metadataId1 + "\"})-[r:Execute]->()-[r1:Execute]->()-->()-->()<-[r2:Execute]-()<-[r3:Execute]-(b:MetaData{metadataId:\"" + metadataId + "\"})\n" +
// "RETURN p";
// }else if(modelName.toLowerCase().equals("column") ||modelName.toLowerCase().equals("sql") ){
// lineageCypher= "MATCH p=(a:MetaData{metadataId:\"" + metadataId1 + "\"})-->()-->(b:MetaData{metadataId:\"" + metadataId + "\"})\n" +
// "RETURN p";
// }
//// String lineageCypher = "MATCH p=(a:MetaData{metadataId:\"" + metadataId1 + "\"})-[r:Composition]->() -->()-->()<-[r1:Composition]-(b:MetaData{metadataId:\"" + metadataId + "\"})\n" +
//// "RETURN p";
// StatementResult lineageResult = session.run(lineageCypher);
// if (lineageResult.hasNext()) {
// logger.info(metadataId + "<<-- " + metadataId1);
// Edge edge = new Edge();
//
// edge.setEdgeId("" + count++);
//// edge.setEdgeId();
// edge.setFromId(metadataId1);
// edge.setToId(metadataId);
// edge.setType("流出");
// edgeList.add(edge);
// }
} }
this.countDownLatch.countDown(); this.countDownLatch.countDown();
......
...@@ -33,7 +33,8 @@ eureka: ...@@ -33,7 +33,8 @@ eureka:
registryFetchIntervalSeconds: 5 registryFetchIntervalSeconds: 5
serviceUrl: serviceUrl:
defaultZone: http://192.168.0.111:8081/eureka/ defaultZone: http://192.168.0.111:8081/eureka/
instance:
prefer-ip-address: true
security: security:
permit: false permit: false
authUser: root authUser: root
......
...@@ -35,7 +35,8 @@ eureka: ...@@ -35,7 +35,8 @@ eureka:
registryFetchIntervalSeconds: 5 registryFetchIntervalSeconds: 5
serviceUrl: serviceUrl:
defaultZone: http://192.168.0.111:8081/eureka/ defaultZone: http://192.168.0.111:8081/eureka/
instance:
prefer-ip-address: true
security: security:
permit: false permit: false
authUser: root authUser: root
......
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