GPS坐标测井Neo4j结构

GPS坐标测井Neo4j结构,neo4j,graph-databases,Neo4j,Graph Databases,我将neo4j用于一个社交网络,用户可以在该网络中记录他们在训练期间的位置(想想Runkeeper和Strava) 我在考虑如何保存坐标。 将其设置为node(user)-has->node(workouts)node(coord)-next->node(coord)-next->..这样是否是一个好主意,即每个训练都有一个带有坐标的链接列表 我永远不会查询数据库中的单个点,训练将始终作为一个整体检索 这是解决这个问题的更好办法吗 我可以想象graph db不是存储此类数据的理想db,但我不想增

我将neo4j用于一个社交网络,用户可以在该网络中记录他们在训练期间的位置(想想Runkeeper和Strava)

我在考虑如何保存坐标。 将其设置为
node(user)-has->node(workouts)node(coord)-next->node(coord)-next->..
这样是否是一个好主意,即每个训练都有一个带有坐标的链接列表

我永远不会查询数据库中的单个点,训练将始终作为一个整体检索

这是解决这个问题的更好办法吗

我可以想象graph db不是存储此类数据的理想db,但我不想增加现在添加另一个db的复杂性


有人能给我一些关于这方面的见解吗?

我建议您将其存储为:

user --has--> workout --positionedAt--> coord
这个设计让我感觉更自然,因为你在问题中提到的链表设计只会产生一个非常深入的遍历,这可能会让查询变得烦人。这样,只需在
训练
顶点上迭代边,即可轻松找到特定训练的所有坐标。我建议在
positionedAt
边缘上存储一个日期时间戳,以便您可以轻松地对坐标进行排序


缺点是,根据您打算拥有的
coord
顶点的数量,最终可能会有一些胖
锻炼
顶点,但这可能不会真正影响您的用例。我想不出一个训练能产生100000个坐标(因此产生100000条边),但也许你能。如果是这样,我想我可以修改一下我的答案。

看看其他neo4j问题的答案,也许@PeterNeubauer可以提供一些见解?谢谢你的回答@stephen!想象一下,每5秒一次,这场比赛会有≈ 20000分。您通过
position at
将每个
coord
直接连接到
训练,这对我来说正确吗?每一项新的
训练
都直接通过
发送给用户?如果每个用户都有大约1000次
训练,或者它仍然很快,这会有问题吗?这取决于您对“快”的定义以及您打算如何查询它的上下文。如果您需要通过从
用户
遍历到每个
训练
以从
坐标
顶点获取开始/结束时间来查找平均训练时间,这是一个痛苦的遍历过程。在这种情况下,将开始/结束/经过的时间存储在
训练
本身可能是明智的。对于图形,性能在很大程度上取决于您需要触摸多少图形才能完成您想要做的事情。在选择最适合您的用例之前,您还应该了解各种图形数据库的优缺点。在做出选择之前,请先查看多种不同的图形(包括Neo4j)。