21. The one or more storage media of claim 12 , wherein: for each thread of the second plurality of threads, identifying, in the particular graph, the one or more neighbor nodes that match the second query node comprises: identifying one or more attributes of a query edge from the first query node to the second query node, for each node in the set of nodes, in the first data structure, that is assigned to said each thread: identifying one or more attributes of a graph edge from said each node to a second node, comparing one or more attributes of the query edge with the one or more attributes of the graph edge, and wherein storing in the second data structure comprises storing an identity of the second node in the second data structure only if the one or more attributes of the query edge match the one or more attributes of the graph edge.
22. The one or more storage media of claim 21 , wherein the instructions, when executed by the one or more processors, further cause: for each node in the set of nodes, in the first data structure, that is assigned to said each thread: comparing the one or more attributes of the query edge with the one or more attributes of the graph edge prior to comparing one or more node attributes of the second query node with one or more node attributes of the second node; wherein comparing one or more node attributes of the second query node with one or more node attributes of the second node is only performed if the one or more attributes of the query edge match the one or more attributes of the graph edge.