Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
neo4jRelation
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
qiuchaofei
neo4jRelation
Commits
cd23bb41
Commit
cd23bb41
authored
Nov 29, 2021
by
qiuchaofei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1,优化查询单个元模型数据的方法。
parent
d71b787e
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
111 additions
and
70 deletions
+111
-70
MetaDataController.java
...adata/metadataRelation/controller/MetaDataController.java
+2
-2
MetadataServiceImpl.java
...ta/metadataRelation/service/impl/MetadataServiceImpl.java
+105
-66
application-dev.yml
src/main/resources/application-dev.yml
+2
-1
application-test.yml
src/main/resources/application-test.yml
+2
-1
No files found.
src/main/java/com/keymobile/metadata/metadataRelation/controller/MetaDataController.java
View file @
cd23bb41
...
@@ -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
<>();
...
...
src/main/java/com/keymobile/metadata/metadataRelation/service/impl/MetadataServiceImpl.java
View file @
cd23bb41
...
@@ -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
();
...
...
src/main/resources/application-dev.yml
View file @
cd23bb41
...
@@ -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
...
...
src/main/resources/application-test.yml
View file @
cd23bb41
...
@@ -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
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment