我正在使用neo4j,让我们称之为社交网络,用户可以在锻炼期间记录自己的位置(想想Runkeeper和Strava)。
我正在考虑如何保存坐标。
让它像node(user)-has->node(workouts)<-is a-node(workout)-start->node(coord)-next->node(coord)-next->....
一样是一个好主意,即每个锻炼的坐标链表?
我永远不会在数据库中查询各个点,整个训练过程将被检索。
这是解决这个问题的更好方法吗?
我可以想象图形数据库不是存储此类数据的理想数据库,但我不想添加现在添加另一个数据库的复杂性。
有人可以给我任何见解吗?
答案 0 :(得分:1)
我建议你把它存储为:
user --has--> workout --positionedAt--> coord
这种设计对我来说更自然,因为你在问题中提到的链表设计只会产生一个非常深的遍历,这可能会让查询烦人。通过这种方式,您可以通过简单地迭代workout
顶点上的边来轻松找到特定锻炼的所有坐标。我建议在positionedAt
边缘存储日期时间戳,以便您可以轻松地对坐标进行排序。
缺点是,根据您打算拥有多少coord
个顶点,您可能最终得到一些胖workout
个顶点,但这可能不会真正影响您的用例。我想不出会产生100000坐标(因此有100000个边缘)的锻炼,但也许你可以。如果是这样,我想我可以稍微修改一下我的答案。