【发布时间】:2017-07-31 20:47:46
【问题描述】:
我有一个简单的数据库,用于分析特定组的 Twitter 数据。
数据模型为:
(:Person)-[:TWEETS_TO]->(:Twitter_Account)
和
(:Twitter_Account)-[:FOLLOWS]->(:Twitter_Account)
(:Person) 节点只有 500 多一点,但 (:Twitter_Account) 节点大约有 500,000 个。换句话说,大多数(:Twitter_Account)s 与人无关。
我想计算关注关系的数量,但仅限于与人相关的 500 个左右的 Twitter 帐户中。环顾四周,我发现了这个 neo4j blog post 和这个 SO post 建议这样的查询:
MATCH (p:Person)-[:TWEETS_TO]->(t1:Twitter_Account)
WITH t1,
size((t1)-[:FOLLOWS]->(:Twitter_Account)<-[:TWEETS_TO]-(:Person))
AS following
RETURN t1, following ORDER BY following LIMIT 5
分析给出:
Cypher 版本:CYPHER 3.2,规划器:COST,运行时:INTERPRETED。 1356 毫秒内总共 2938092 次 db 命中。
如您所见,它相对较快,但我的直觉是应该有办法编写查询,而无需太多数据库命中,因为我们只查看易于定义的数据的一小部分。我尝试过的所有其他方法(例如首先匹配两个 twitter 帐户)都会导致笛卡尔积比上述方法慢得多。
有没有办法在不查看每个 Twitter 帐户的情况下计算这些关系?
【问题讨论】: