我是一个新手 neo4j
.这是我的第二天。对技术相当兴奋,有很多问题,请耐心等待☺️。
在所需的应用程序中,用户可以查看他们周围的使用情况(只有在两个用户都可以看到对方的情况下,使用的是 location_radius
)属性
在这个练习中,我生成了 100,000
在我国境内有随机位置的用户 MySql
......它们被进口到 neo4j
(关系由python neo4j手动创建)
第一次尝试。
在用户之间建立一种关系,这些用户是根据所希望的标准可见的:a. 将所有用户插入到neo4j中(速度快)b. 通过查看以前用户的标准位置来逐一建立关系(速度慢,可能做错了)。
a. 将所有用户插入到neo4j(快) b. 通过查看之前用户的标准位置来逐一创建关系(过程慢,可能做错了)这个还在运行,目前有13987个节点。22,460,068个关系......这是错误的想法吗?
MATCH (src_u:User {user_id:1})-[:IN_SEARCH]-(u:User)
RETURN src_u, u
第二次尝试 (同一模式)
不使用关系运行查询
MATCH (me:User {user_id:1}),(u:User)
WHERE u.user_id <> 1
AND me.gender <> u.gender
AND distance(me.location, u.location) < me.location_radius
AND distance(me.location, u.location) < u.location_radius
RETURN u
第三次尝试
同样的事情,但是尝试优化第2次尝试,这个查询会优化第2次尝试吗?
MATCH (me:User {user_id:1})
WITH me
MATCH (u:User)
WHERE u.user_id <> 1
AND me.gender <> u.gender
WITH me, u, distance(me.location, u.location) as d
WHERE d < me.location_radius AND d < u.location_radius
RETURN u
我的问题是
(Station {point(...)}
节点(每平方公里),并将用户连接到最近的站内帮助(万一如果是 第一次尝试 是太多了)?)neo4j
可以完全取代DB吗,将RAW数据存储在关系型数据库中是一个好的做法吗?用户创建查询。
MERGE (u:User {user_id:$user_id})
ON CREATE SET u.name=$name, u.gender=$gender, u.location=point({latitude:$latitude,longitude:$longitude}), u.location_radius=$location_radius
RETURN u
谢谢你
棚户区
创建删除 "近似 "关系之间的 都 User
s是不实用的,正如你所看到的,特别是当你需要连续地做这件事的时候。一般来说,当你期望节点之间有相对稳定的连接时,应该使用关系。为了跟踪一个连续运行的过程的结果而创建elete很多关系是没有意义的--尤其是当你只关心少数几个节点的结果时 User
s.
相反,你应该创建一个 空间指数 关于 :User(location)
:
CREATE INDEX user_distance FOR (u:User) ON (u.location)
这可以加快某些 distance
查询。例如: 简介 显示以下查询将使用该空间索引(至少在 neo4j 4.0.4 中)。您应该始终对您的查询进行配置,以帮助优化它们,并确保它们在版本更改后仍然保持优化。
MATCH (p:User), (q:User)
WHERE
p.user_id = 1 AND
p.location_radius > distance(p.location, q.location) < q.location_radius
RETURN p, COLLECT(q) AS others_nearby