Which venues do people visit after a page they follow recommends them?
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
MATCH (a:NODE)-[:FOLLOWS]->(b:NODE)
-[:RECOMMENDS]->(c:NODE),
(a)-[:VISITS]->(c)
WHERE a.kind = 'person'
WITH c, count(*) AS reach
MATCH (vp:VENUE_PROFILE)
-[:PROFILE_OF]->(c)
RETURN c.title AS venue,
reach,
vp.* // 200 properties
What the data means
A person follows a page and visits a venue that page recommends.
:NODE
personPeoplekind = 'person'
FOLLOWSarrow_forward
webPagesmusic · neighborhood
RECOMMENDSarrow_forward
location_onVenuesclubs · restaurants
VISITS
badge:VENUE_PROFILE
{rating, hours}{capacity, amenities}{price, category}{rating, price}{hours, booking}+35 schemasOne label, many shapes
Labels identify roles. Each record can still carry a different property set.
:NODEpeopleM {genre, follows} · O {neighborhood, since}
:NODEpage{title}
:NODEvenue{title}
:VENUE_PROFILEvenue profile{venue_type, rating, capacity, …}
Schemaless records now need physical organization.
MMusic fans
OOld Town residents
Unorganized graph
Cost-based Graphlet Chunking · bulk-load illustration
Graphlet view
graphletsnodes
:NODE
filter_altkind present: 4
14450K
M{name, kind, genre, follows}120K
M{name, kind, genre, follows, verified}11.5K
O{name, kind, neighborhood, since}120K
O{name, kind, neighborhood, since, verified}11.5K
{title}no kindpages + venues167K
{noise}no kindsinks + 8 filler schemas9340K
:VENUE_PROFILE
402.25M
{type, rating, capacity, hours, …}
40 schemas · 5 fields each
| Relation | Total | |
|---|---|---|
| Relation | Music | Old Town |
| FOLLOWSperson → page | 3.82M | |
| RECOMMENDSpage → venue | 172K | |
| VISITSperson → venue | 3.82M | |
| FOLLOWSperson → page | 3.8M | 21.5K |
| RECOMMENDSpage → venue | 86K | 86K |
| VISITSperson → venue | 21.5K | 3.8M |
| PROFILE_OFvenue profile → venue | 2.25M | |
