TurboLynx
databasevenue_network Compiling 00:00.0
Plan features filter_altSchema pruning · SIoff call_splitPer-branch order · GEMoff table_rowsRow format · SSRFoff
hub2.7M nodes · 19.9M edges Ready
Which venues do people visit after a page they follow recommends them?
1
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 schemas
One 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
:NODEcommon {name, kind} filter_altanchor a: 4 14450K
M{genre, follows}120K
M{genre, follows, verified}11.5K
O{neighborhood, since}120K
O{neighborhood, since, verified}11.5K
{title}pages + venues167K
{noise}sinks + 8 filler schemas9340K
:VENUE_PROFILE 402.25M
{type, rating, capacity, hours, …}
40 schemas · 5 fields each
RelationTotal
RelationMusicOld Town
FOLLOWSperson → page3.82M
RECOMMENDSpage → venue172K
VISITSperson → venue3.82M
FOLLOWSperson → page 3.8M21.5K
RECOMMENDSpage → venue 86K86K
VISITSperson → venue 21.5K3.8M
PROFILE_OFvenue profile → venue 2.25M
StepExecuteOptimize