Commit cd23bb41 by qiuchaofei

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

parent d71b787e
......@@ -50,7 +50,7 @@ public class MetaDataController {
private IBaseRelationshipService baseRelationshipService;
/**
* 查询元数据
* 获取所有的节点
*/
@RequestMapping(path = "/list", method = RequestMethod.GET)
public List<MetaData> getUserNodeList() {
......@@ -252,7 +252,7 @@ public class MetaDataController {
@ApiOperation(tags = "", value = "开始获取直接下层节点")
@RequestMapping(path = "/getNextDrill", method = RequestMethod.GET)
public ReturnReslult getNextDrill(String dataId) {
public ReturnReslult getNextDrill(String dataId,String layer) {
logger.info("开始获取直接下层节点");
List<MetaData> metaDataList = new ArrayList<>();
......
......@@ -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<>();
int count = 0;
int threadCount = 5;
if(nodeSize<5){
threadCount = nodeSize;
}
//遍历每两个节点的关系
long time0 = System.currentTimeMillis();
ExecutorService executor = Executors.newFixedThreadPool(10);
ExecutorService executor = Executors.newFixedThreadPool(threadCount);
List<Future<List<Edge>>> relations = new ArrayList<>();
final CountDownLatch countDownLatch = new CountDownLatch(10);
final CountDownLatch countDownLatch = new CountDownLatch(threadCount);
for(String metadataId:metadataIdList){
Future<List<Edge>> futures = executor.submit(new neo4jRelaionTask(metadataId,metadataIdList,modelName,session,countDownLatch));
relations.add(futures);
......@@ -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;
}
......@@ -859,70 +853,115 @@ class neo4jRelaionTask implements Callable<List<Edge>>{
@Override
public List<Edge> call() throws Exception {
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";
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") ){
}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";
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.setEdgeId();
edge.setFromId(metadataId);
edge.setToId(metadataId1);
edge.setToId(id);
edge.setType("流入");
edge.setEdgeId("" + count++);
edgeList.add(edge);
}
}
for (String metadataId1 : metadataIdList) {
if (metadataId.equals(metadataId1)) {
continue;
}
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" +
// 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";
StatementResult lineageResult = session.run(lineageCypher);
if (lineageResult.hasNext()) {
logger.info(metadataId + "<<-- " + metadataId1);
Edge edge = new Edge();
// }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";
// }
edge.setEdgeId("" + count++);
// edge.setEdgeId();
edge.setFromId(metadataId1);
edge.setToId(metadataId);
edge.setType("流出");
edgeList.add(edge);
}
// StatementResult impactResult = session.run(impactCypher);
// if (impactResult.hasNext()) {
// logger.info(metadataId + " --->>" + metadataId1);
// Edge edge = new 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();
......
......@@ -33,7 +33,8 @@ eureka:
registryFetchIntervalSeconds: 5
serviceUrl:
defaultZone: http://192.168.0.111:8081/eureka/
instance:
prefer-ip-address: true
security:
permit: false
authUser: root
......
......@@ -35,7 +35,8 @@ eureka:
registryFetchIntervalSeconds: 5
serviceUrl:
defaultZone: http://192.168.0.111:8081/eureka/
instance:
prefer-ip-address: true
security:
permit: false
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