a pattern-aware graph mining system

125
A Pattern-Aware Graph Mining System Kasra Jamshidi Rakesh Mahadasa Keval Vora Simon Fraser University https://github.com/pdclab/peregrine

Upload: others

Post on 16-May-2022

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: A Pattern-Aware Graph Mining System

A Pattern-Aware Graph Mining SystemKasra Jamshidi Rakesh Mahadasa Keval Vora

Simon Fraser University

https://github.com/pdclab/peregrine

Page 2: A Pattern-Aware Graph Mining System

Why should you pay attention?

Page 3: A Pattern-Aware Graph Mining System

executes 700x fasterPeregrine

Page 4: A Pattern-Aware Graph Mining System

consumes 100x less memoryPeregrine

Page 5: A Pattern-Aware Graph Mining System

scales to 100x larger datasetsPeregrine

Page 6: A Pattern-Aware Graph Mining System

On 8x fewer machines

Page 7: A Pattern-Aware Graph Mining System

With a more expressive API

Page 8: A Pattern-Aware Graph Mining System

a

db

a

bd

Data Graph

e

c

gf

Graph Mining

a

db

7

Page 9: A Pattern-Aware Graph Mining System

a

db

a

bd

Graph Mining

e

c

gf

Data Graph

a

db

8

Page 10: A Pattern-Aware Graph Mining System

a

db

a

bd

Graph Mining

e

c

gf

Data Graph

a

db

Subgraph

9

Page 11: A Pattern-Aware Graph Mining System

a

db

a

bd

Graph Mining

e

c

gf

Data Graph Pattern

10

Page 12: A Pattern-Aware Graph Mining System

Graph Mining

a

db

a

bd

Edge-Induced

11

Page 13: A Pattern-Aware Graph Mining System

Graph Mining

Edge-Induced

a

db

a

bd

12

Page 14: A Pattern-Aware Graph Mining System

Graph Mining

a

db

a

bd

Edge-Induced

13

Page 15: A Pattern-Aware Graph Mining System

Graph Mining

a

db

a

bd

Vertex-Induced

14

Page 16: A Pattern-Aware Graph Mining System

Graph Mining

a dba b d

Vertex-Induced

15

Page 17: A Pattern-Aware Graph Mining System

Graph Mining

a

db

a

bd

Vertex-Induced

16

Page 18: A Pattern-Aware Graph Mining System

Graph Mining

a

db

e

c

gf

Data Graph

17

Page 19: A Pattern-Aware Graph Mining System

Graph Mining

a

db

e

c

gf

Data Graph

a

db

a

bd

Vertex-Induced

18

Page 20: A Pattern-Aware Graph Mining System

Graph Mining

a

db

e

c

gf

Data Graph

a

db

a

b d

a

db

a

b d

a

db

a

b d

a

db

a

b d

Edge-Induced

a

db

a

bd

Vertex-Induced

19

Page 21: A Pattern-Aware Graph Mining System

Frequent Patterns(Edge-Induced)

Graph Mining

a

db

e

c

gf

Data Graph

20

Page 22: A Pattern-Aware Graph Mining System

Unlabeled Pattern Distribution(Vertex-Induced)

2 1 0

1 02

Graph Mining

a

db

e

c

gf

Data Graph

21

Page 23: A Pattern-Aware Graph Mining System

Scalability Challenge

22

Page 24: A Pattern-Aware Graph Mining System

• 4-motif counting on Orkut graph (|V| = 13M, |E| = 117M)

Scalability Challenge

23

Page 25: A Pattern-Aware Graph Mining System

Scalability Challenge

• 4-motif counting on Orkut graph (|V| = 13M, |E| = 117M)

123,503,340,341,270 subgraphs

24

Page 26: A Pattern-Aware Graph Mining System

System Requirements

25

Page 27: A Pattern-Aware Graph Mining System

System Requirements

Uniqueness

x

zy

x

zy

x

zy

26

Page 28: A Pattern-Aware Graph Mining System

System Requirements

Uniqueness

x

zy xz

y

x

z

y

27

Page 29: A Pattern-Aware Graph Mining System

System Requirements

Uniqueness

x

zy xz

y

x

z

y

28

Page 30: A Pattern-Aware Graph Mining System

System Requirements

Uniqueness

Structurex

zy

29

Page 31: A Pattern-Aware Graph Mining System

System Requirements

Uniqueness

Structurex

zy

30

Page 32: A Pattern-Aware Graph Mining System

System Requirements

Uniqueness

Structure

Interestingness

31

Page 33: A Pattern-Aware Graph Mining System

System Requirements

Uniqueness

Structure

Interestingness

32

Page 34: A Pattern-Aware Graph Mining System

System Requirements

Uniqueness

Structure

Interestingness

33

Page 35: A Pattern-Aware Graph Mining System

System Requirements

Uniqueness

Structure

Interestingness

34

Page 36: A Pattern-Aware Graph Mining System

Existing Work

Uniqueness

Structure

Interestingness

Arabesque (SOSP ‘15)RStream (OSDI ‘18)Fractal (SIGMOD ‘19)AutoMine (SOSP ‘19)

35

Page 37: A Pattern-Aware Graph Mining System

Existing Work

Uniqueness

Structure

Interestingness

Arabesque (SOSP ‘15)RStream (OSDI ‘18)Fractal (SIGMOD ‘19)AutoMine (SOSP ‘19)

Overlook user requirements

36

Page 38: A Pattern-Aware Graph Mining System

Existing Work

Uniqueness

Structure

Interestingness

Arabesque (SOSP ‘15)RStream (OSDI ‘18)Fractal (SIGMOD ‘19)AutoMine (SOSP ‘19)

Overlook user requirementsPer-subgraph computations

37

Page 39: A Pattern-Aware Graph Mining System

38

Page 40: A Pattern-Aware Graph Mining System

Pattern Awareness

Pattern Selection

Pattern Matching

39

Page 41: A Pattern-Aware Graph Mining System

Pattern Awareness

Pattern Selection

Pattern Matching

40

Page 42: A Pattern-Aware Graph Mining System

Pattern Awareness

Pattern Selection

41

Page 43: A Pattern-Aware Graph Mining System

Pattern Programming

#include “Peregrine.hh”using namespace Peregrine;

void motifCounting(int size){

DataGraph G(“path/to/graph/”);auto patterns = PatternGenerator::all(size, VERTEX_INDUCED);auto counts = count(G, patterns);

for (auto &[pattern, n] : counts)std::cout << pattern << “ ” << n << std::endl;

}

42

Page 44: A Pattern-Aware Graph Mining System

Pattern Programming

#include “Peregrine.hh”using namespace Peregrine;

void motifCounting(int size){

DataGraph G(“path/to/graph/”);auto patterns = PatternGenerator::all(size, VERTEX_INDUCED);auto counts = count(G, patterns);

for (auto &[pattern, n] : counts)std::cout << pattern << “ ” << n << std::endl;

}

43

Page 45: A Pattern-Aware Graph Mining System

Pattern Programming

#include “Peregrine.hh”using namespace Peregrine;

void motifCounting(int size){

DataGraph G(“path/to/graph/”);auto patterns = PatternGenerator::all(size, VERTEX_INDUCED);auto counts = count(G, patterns);

for (auto &[pattern, n] : counts)std::cout << pattern << “ ” << n << std::endl;

}

44

Page 46: A Pattern-Aware Graph Mining System

Pattern Programming

#include “Peregrine.hh”using namespace Peregrine;

void motifCounting(int size){

DataGraph G(“path/to/graph/”);auto patterns = PatternGenerator::all(size, VERTEX_INDUCED);auto counts = count(G, patterns);

for (auto &[pattern, n] : counts)std::cout << pattern << “ ” << n << std::endl;

}

45

Page 47: A Pattern-Aware Graph Mining System

Pattern Programming

DataGraph G(“path/to/graph/”);auto patterns = PatternGenerator::all(size, VERTEX_INDUCED);

auto counts = count(G, patterns);

46

Page 48: A Pattern-Aware Graph Mining System

Pattern Programming

DataGraph G(“path/to/graph/”);auto patterns = PatternGenerator::all(size, VERTEX_INDUCED);patterns[0].set_labels({‘a’, ‘b’, ‘c’, ‘d’});

auto counts = count(G, patterns);

47

Page 49: A Pattern-Aware Graph Mining System

Pattern Programming

DataGraph G(“path/to/graph/”);auto patterns = PatternGenerator::all(size, VERTEX_INDUCED);patterns[0].set_labels({‘a’, ‘b’, ‘c’, ‘d’});patterns[0].add_edge(1, 5);

auto counts = count(G, patterns);

48

Page 50: A Pattern-Aware Graph Mining System

Pattern Programming

DataGraph G(“path/to/graph/”);auto patterns = PatternGenerator::all(size, VERTEX_INDUCED);patterns[0].set_labels({‘a’, ‘b’, ‘c’, ‘d’});patterns[0].add_edge(1, 5);patterns.emplace_back(“path/to/pattern.txt”);auto counts = count(G, patterns);

49

Page 51: A Pattern-Aware Graph Mining System

Pattern Programming

DataGraph G(“path/to/graph/”);auto patterns = PatternGenerator::all(size, VERTEX_INDUCED);auto pattern = Pattern().add_edge(1, 2)

.add_edge(1, 3)

.add_edge(2, 3);auto counts = count(G, {pattern});

50

Page 52: A Pattern-Aware Graph Mining System

Pattern Programming

#include “Peregrine.hh”using namespace Peregrine;

void motifCounting(int size){

DataGraph G(“path/to/graph/”);auto patterns = PatternGenerator::all(size, VERTEX_INDUCED);auto counts = count(G, patterns);

for (auto &[pattern, n] : counts)std::cout << pattern << “ ” << n << std::endl;

}

51

Page 53: A Pattern-Aware Graph Mining System

Pattern Programming

#include “Peregrine.hh”using namespace Peregrine;

void motifCounting(int size){

DataGraph G(“path/to/graph/”);auto patterns = PatternGenerator::all(size, VERTEX_INDUCED);auto counts = count(G, patterns);

for (auto &[pattern, n] : counts)std::cout << pattern << “ ” << n << std::endl;

}

52

Page 54: A Pattern-Aware Graph Mining System

Pattern Programming

void frequentSubgraphMining(){

DataGraph G(“path/to/graph/”);auto patterns = PatternGenerator::all(2, EDGE_INDUCED);auto mapDomain = [](auto &&match, auto &&aggregator)

{ aggregator.map(match.pattern, match.mapping); };

auto results = match<Pattern, Domain>(G, patterns, mapDomain);

for (auto &[pattern, frequency] : results)std::cout << pattern << “ ” << frequency << std::endl;

}

53

Page 55: A Pattern-Aware Graph Mining System

Pattern Programming

void frequentSubgraphMining(){

DataGraph G(“path/to/graph/”);auto patterns = PatternGenerator::all(2, EDGE_INDUCED);auto mapDomain = [](auto &&match, auto &&aggregator)

{ aggregator.map(match.pattern, match.mapping); };

auto results = match<Pattern, Domain>(G, patterns, mapDomain);

for (auto &[pattern, frequency] : results)std::cout << pattern << “ ” << frequency << std::endl;

}

54

Page 56: A Pattern-Aware Graph Mining System

Pattern Programming

void frequentSubgraphMining(){

DataGraph G(“path/to/graph/”);auto patterns = PatternGenerator::all(2, EDGE_INDUCED);auto mapDomain = [](auto &&match, auto &&aggregator)

{ aggregator.map(match.pattern, match.mapping); };

auto results = match<Pattern, Domain>(G, patterns, mapDomain);

for (auto &[pattern, frequency] : results)std::cout << pattern << “ ” << frequency << std::endl;

}

55

Page 57: A Pattern-Aware Graph Mining System

Pattern Programming

void frequentSubgraphMining(){

DataGraph G(“path/to/graph/”);auto patterns = PatternGenerator::all(2, EDGE_INDUCED);auto mapDomain = [](auto &&match, auto &&aggregator)

{ aggregator.map(match.pattern, match.mapping); };

auto results = match<Pattern, Domain>(G, patterns, mapDomain);

for (auto &[pattern, frequency] : results)std::cout << pattern << “ ” << frequency << std::endl;

}

56

Page 58: A Pattern-Aware Graph Mining System

Pattern Awareness

Pattern Selection

Pattern Matching

57

Page 59: A Pattern-Aware Graph Mining System

Pattern Awareness

Pattern Selection

u

v

Anti-Edge

58

Page 60: A Pattern-Aware Graph Mining System

Pattern Awareness

Pattern Selection

u

v

Anti-Vertex

59

Page 61: A Pattern-Aware Graph Mining System

Pattern Awareness

Pattern Selection

Pattern Matching

60

Page 62: A Pattern-Aware Graph Mining System

Pattern Awareness

Pattern Selection

Pattern Matching

61

Page 63: A Pattern-Aware Graph Mining System

Pattern Awareness

Pattern Matching

• Symmetry breaking (RECOMB ‘07)

• Core pattern reduction (SIGMOD ‘16)

62

Page 64: A Pattern-Aware Graph Mining System

Symmetry Breaking

63

Page 65: A Pattern-Aware Graph Mining System

Symmetry Breaking

u x

y v

64

Page 66: A Pattern-Aware Graph Mining System

Symmetry Breaking

u x

y v

65

Page 67: A Pattern-Aware Graph Mining System

Symmetry Breaking

x

y

66

v

u

Page 68: A Pattern-Aware Graph Mining System

Symmetry Breaking

u x

y v

67

Page 69: A Pattern-Aware Graph Mining System

Symmetry Breaking

u y

x v

68

Page 70: A Pattern-Aware Graph Mining System

Symmetry Breaking

u x

y v

Worker 1

a

db

e

c

gf

Data Graph

69

Page 71: A Pattern-Aware Graph Mining System

b x

y v

Symmetry Breaking

a

db

e

c

gf

Data Graph Worker 1

70

Page 72: A Pattern-Aware Graph Mining System

b x

y d

Symmetry Breaking

Worker 1

a

db

e

c

gf

Data Graph

71

Page 73: A Pattern-Aware Graph Mining System

Symmetry Breaking

b x

y d

Worker 1

u x

y v

Worker 2

a

db

e

c

gf

Data Graph

72

Page 74: A Pattern-Aware Graph Mining System

Symmetry Breaking

b x

y d

Worker 1

d x

y v

Worker 2

a

db

e

c

gf

Data Graph

73

Page 75: A Pattern-Aware Graph Mining System

Symmetry Breaking

b x

y d

Worker 1

d x

y b

Worker 2

a

db

e

c

gf

Data Graph

74

Page 76: A Pattern-Aware Graph Mining System

Symmetry Breaking

b a

y d

Worker 1

d a

y b

Worker 2

a

db

e

c

gf

Data Graph

75

Page 77: A Pattern-Aware Graph Mining System

Symmetry Breaking

b a

g d

Worker 1

d a

g b

Worker 2

a

db

e

c

gf

Data Graph

76

Page 78: A Pattern-Aware Graph Mining System

Symmetry Breaking

b a

g d

Worker 1

d a

g b

Worker 2

a

db

e

c

gf

Data Graph

77

Page 79: A Pattern-Aware Graph Mining System

Symmetry Breaking

u < v

u

v

x

y

78

Page 80: A Pattern-Aware Graph Mining System

Symmetry Breaking

x < y

u

v

x

y

79

Page 81: A Pattern-Aware Graph Mining System

Symmetry Breaking

u < vx < y

u

v

x

y

80

Page 82: A Pattern-Aware Graph Mining System

Core Pattern

u

v

x

y

81

Page 83: A Pattern-Aware Graph Mining System

Core Pattern

u

v

x

y

82

Page 84: A Pattern-Aware Graph Mining System

Core Pattern

u

v

x

y

83

Page 85: A Pattern-Aware Graph Mining System

Core Pattern

b

d

Pattern-Unaware

a

db

e

c

gf

Data Graph

84

Page 86: A Pattern-Aware Graph Mining System

Core Pattern

b a

d

Pattern-Unaware

a

db

e

c

gf

Data Graph

85

Page 87: A Pattern-Aware Graph Mining System

Core Pattern

b a

d

Pattern-Unaware

a

db

e

c

gf

Data Graph

86

Page 88: A Pattern-Aware Graph Mining System

Core Pattern

b a

g d

Pattern-Unaware

a

db

e

c

gf

Data Graph

87

Page 89: A Pattern-Aware Graph Mining System

Core Pattern

b a

g d

Pattern-Unaware

a

db

e

c

gf

Data Graph

88

Page 90: A Pattern-Aware Graph Mining System

Core Pattern

b x

y d

Pattern-Aware

a

db

e

c

gf

Data Graph

89

Page 91: A Pattern-Aware Graph Mining System

Core Pattern

b x

y d

Pattern-Aware

a

db

e

c

gf

Data Graph

90

Page 92: A Pattern-Aware Graph Mining System

Core Pattern

a

db

e

c

gf

Data Graph

b x

y d

Pattern-Aware

91

Page 93: A Pattern-Aware Graph Mining System

Core Pattern

b a

g d

Pattern-Aware

a

db

e

c

gf

Data Graph

92

Page 94: A Pattern-Aware Graph Mining System

Core Pattern

b a

g d

Pattern-Aware

a

db

e

c

gf

Data Graph

h

93

Page 95: A Pattern-Aware Graph Mining System

Core Pattern

b a

h d

Pattern-Aware

b a

g d

a

db

e

c

gf

Data Graph

h

94

Page 96: A Pattern-Aware Graph Mining System

Core Pattern

b a

h d

Pattern-Aware

b a

g d

a

db

e

c

gf

Data Graph

h

95

Page 97: A Pattern-Aware Graph Mining System

Pattern Awareness

Pattern Matching

• Symmetry breaking (RECOMB ‘07)

• Core pattern reduction (SIGMOD ‘16)

96

Page 98: A Pattern-Aware Graph Mining System

Pattern Awareness

Pattern Matching

• Early termination

97

Page 99: A Pattern-Aware Graph Mining System

Early Termination

bool globalClusteringCoefficient(int bound){

DataGraph G(“path/to/graph/”);auto triplet = PatternGenerator::star(3);int numTriplets = count(G, {triplet});auto countAndCheck = [=](auto &&match, auto &&aggregator){int numTriangles = aggregator.readValue(match.pattern);if (3*numTriangles/numTriplets > bound) aggregator.stop();else aggregator.map(match.pattern, 1);

}auto triangle = PatternGenerator::clique(3);auto result = match<Pattern, int>(G, triangle, countAndCheck);return 3*result[triangle]/numTriplets > bound;

}

98

Page 100: A Pattern-Aware Graph Mining System

Early Termination

bool globalClusteringCoefficient(int bound){

DataGraph G(“path/to/graph/”);auto triplet = PatternGenerator::star(3);int numTriplets = count(G, {triplet});auto countAndCheck = [=](auto &&match, auto &&aggregator){int numTriangles = aggregator.readValue(match.pattern);if (3*numTriangles/numTriplets > bound) aggregator.stop();else aggregator.map(match.pattern, 1);

}auto triangle = PatternGenerator::clique(3);auto result = match<Pattern, int>(G, triangle, countAndCheck);return 3*result[triangle]/numTriplets > bound;

}

99

Page 101: A Pattern-Aware Graph Mining System

Early Termination

bool globalClusteringCoefficient(int bound){

DataGraph G(“path/to/graph/”);auto triplet = PatternGenerator::star(3);int numTriplets = count(G, {triplet});auto countAndCheck = [=](auto &&match, auto &&aggregator){int numTriangles = aggregator.readValue(match.pattern);if (3*numTriangles/numTriplets > bound) aggregator.stop();else aggregator.map(match.pattern, 1);

}auto triangle = PatternGenerator::clique(3);auto result = match<Pattern, int>(G, triangle, countAndCheck);return 3*result[triangle]/numTriplets > bound;

}

100

Triangle

Page 102: A Pattern-Aware Graph Mining System

Early Termination

bool globalClusteringCoefficient(int bound){

DataGraph G(“path/to/graph/”);auto triplet = PatternGenerator::star(3);int numTriplets = count(G, {triplet});auto countAndCheck = [=](auto &&match, auto &&aggregator){int numTriangles = aggregator.readValue(match.pattern);if (3*numTriangles/numTriplets > bound) aggregator.stop();else aggregator.map(match.pattern, 1);

}auto triangle = PatternGenerator::clique(3);auto result = match<Pattern, int>(G, triangle, countAndCheck);return 3*result[triangle]/numTriplets > bound;

}

101

TripletTriangle

Page 103: A Pattern-Aware Graph Mining System

Early Termination

bool globalClusteringCoefficient(int bound){

DataGraph G(“path/to/graph/”);auto triplet = PatternGenerator::star(3);int numTriplets = count(G, {triplet});auto countAndCheck = [=](auto &&match, auto &&aggregator){int numTriangles = aggregator.readValue(match.pattern);if (3*numTriangles/numTriplets > bound) aggregator.stop();else aggregator.map(match.pattern, 1);

}auto triangle = PatternGenerator::clique(3);auto result = match<Pattern, int>(G, triangle, countAndCheck);return 3*result[triangle]/numTriplets > bound;

}

102

TripletTriangle

Page 104: A Pattern-Aware Graph Mining System

Early Termination

bool globalClusteringCoefficient(int bound){

DataGraph G(“path/to/graph/”);auto triplet = PatternGenerator::star(3);int numTriplets = count(G, {triplet});auto countAndCheck = [=](auto &&match, auto &&aggregator){int numTriangles = aggregator.readValue(match.pattern);if (3*numTriangles/numTriplets > bound) aggregator.stop();else aggregator.map(match.pattern, 1);

}auto triangle = PatternGenerator::clique(3);auto result = match<Pattern, int>(G, triangle, countAndCheck);return 3*result[triangle]/numTriplets > bound;

}

103

TripletTriangle

Page 105: A Pattern-Aware Graph Mining System

Early Termination

bool globalClusteringCoefficient(int bound){

DataGraph G(“path/to/graph/”);auto triplet = PatternGenerator::star(3);int numTriplets = count(G, {triplet});auto countAndCheck = [=](auto &&match, auto &&aggregator){int numTriangles = aggregator.readValue(match.pattern);if (3*numTriangles/numTriplets > bound) aggregator.stop();else aggregator.map(match.pattern, 1);

}auto triangle = PatternGenerator::clique(3);auto result = match<Pattern, int>(G, triangle, countAndCheck);return 3*result[triangle]/numTriplets > bound;

}

104

TripletTriangle

Page 106: A Pattern-Aware Graph Mining System

Early Termination

bool globalClusteringCoefficient(int bound){

DataGraph G(“path/to/graph/”);auto triplet = PatternGenerator::star(3);int numTriplets = count(G, {triplet});auto countAndCheck = [=](auto &&match, auto &&aggregator){int numTriangles = aggregator.readValue(match.pattern);if (3*numTriangles/numTriplets > bound) aggregator.stop();else aggregator.map(match.pattern, 1);

}auto triangle = PatternGenerator::clique(3);auto result = match<Pattern, int>(G, triangle, countAndCheck);return 3*result[triangle]/numTriplets > bound;

}

105

TripletTriangle

Page 107: A Pattern-Aware Graph Mining System

Early Termination

bool globalClusteringCoefficient(int bound){

DataGraph G(“path/to/graph/”);auto triplet = PatternGenerator::star(3);int numTriplets = count(G, {triplet});auto countAndCheck = [=](auto &&match, auto &&aggregator){int numTriangles = aggregator.readValue(match.pattern);if (3*numTriangles/numTriplets > bound) aggregator.stop();else aggregator.map(match.pattern, 1);

}auto triangle = PatternGenerator::clique(3);auto result = match<Pattern, int>(G, triangle, countAndCheck);return 3*result[triangle]/numTriplets > bound;

}

106

TripletTriangle

Page 108: A Pattern-Aware Graph Mining System

Early Termination

bool globalClusteringCoefficient(int bound){

DataGraph G(“path/to/graph/”);auto triplet = PatternGenerator::star(3);int numTriplets = count(G, {triplet});auto countAndCheck = [=](auto &&match, auto &&aggregator){int numTriangles = aggregator.readValue(match.pattern);if (3*numTriangles/numTriplets > bound) aggregator.stop();else aggregator.map(match.pattern, 1);

}auto triangle = PatternGenerator::clique(3);auto result = match<Pattern, int>(G, triangle, countAndCheck);return 3*result[triangle]/numTriplets > bound;

}

107

TripletTriangle

Page 109: A Pattern-Aware Graph Mining System

Early Termination

bool globalClusteringCoefficient(int bound){

DataGraph G(“path/to/graph/”);auto triplet = PatternGenerator::star(3);int numTriplets = count(G, {triplet});auto countAndCheck = [=](auto &&match, auto &&aggregator){int numTriangles = aggregator.readValue(match.pattern);if (3*numTriangles/numTriplets > bound) aggregator.stop();else aggregator.map(match.pattern, 1);

}auto triangle = PatternGenerator::clique(3);auto result = match<Pattern, int>(G, triangle, countAndCheck);return 3*result[triangle]/numTriplets > bound;

}

108

Page 110: A Pattern-Aware Graph Mining System

Comparison with Existing Work

• Peregrine with 16 logical cores and 32GB RAM

• Arabesque & Fractal with 8x16 logical cores and 8x32GB RAM

• RStream with 96 logical cores and 192GB RAM

109

Page 111: A Pattern-Aware Graph Mining System

Comparison with Existing Work

110

Page 112: A Pattern-Aware Graph Mining System

Comparison with Existing Work

111

Page 113: A Pattern-Aware Graph Mining System

Effects of Pattern Awareness

112

Page 114: A Pattern-Aware Graph Mining System

Scalability

113

Page 115: A Pattern-Aware Graph Mining System

Scalability

114

Page 116: A Pattern-Aware Graph Mining System

Scalability

115

Page 117: A Pattern-Aware Graph Mining System

Scalability

116

Page 118: A Pattern-Aware Graph Mining System

Scalability

117

Page 119: A Pattern-Aware Graph Mining System

Scalability

118

Page 120: A Pattern-Aware Graph Mining System

Scalability

119

Page 121: A Pattern-Aware Graph Mining System

Pattern-aware programming and processing models

120

Page 122: A Pattern-Aware Graph Mining System

Pattern-aware programming and processing models

• Shift abstraction from subgraph to pattern

121

Page 123: A Pattern-Aware Graph Mining System

Pattern-aware programming and processing models

• Shift abstraction from subgraph to pattern

•User program is transparent to the system

122

Page 124: A Pattern-Aware Graph Mining System

Pattern-aware programming and processing models

• Shift abstraction from subgraph to pattern

•User program is transparent to the system

•Up to 42x faster than pattern-unaware

•Up to 737x faster than state-of-the-art

123

Page 125: A Pattern-Aware Graph Mining System

Pattern-aware programming and processing models

• Shift abstraction from subgraph to pattern

•User program is transparent to the system

•Up to 42x faster than pattern-unaware

•Up to 737x faster than state-of-the-art

https://github.com/pdclab/peregrine

124