  Graph mining workloads aim to extract structural properties of a graph by
exploring its subgraph structures. General purpose graph mining systems provide
a generic runtime to explore subgraph structures of interest with the help of
user-defined functions that guide the overall exploration process. However, the
state-of-the-art graph mining systems remain largely oblivious to the shape (or
pattern) of the subgraphs that they mine. This causes them to: (a) explore
unnecessary subgraphs; (b) perform expensive computations on the explored
subgraphs; and, (c) hold intermediate partial subgraphs in memory; all of which
affect their overall performance. Furthermore, their programming models are
often tied to their underlying exploration strategies, which makes it difficult
for domain users to express complex mining tasks.
  In this paper, we develop Peregrine, a pattern-aware graph mining system that
directly explores the subgraphs of interest while avoiding exploration of
unnecessary subgraphs, and simultaneously bypassing expensive computations
throughout the mining process. We design a pattern-based programming model that
treats "graph patterns" as first class constructs and enables Peregrine to
extract the semantics of patterns, which it uses to guide its exploration. Our
evaluation shows that Peregrine outperforms state-of-the-art distributed and
single machine graph mining systems, and scales to complex mining tasks on
larger graphs, while retaining simplicity and expressivity with its
"pattern-first" programming approach.
