0

我将 neo4j 用于一个社交网络,我们称之为社交网络,用户可以在其中记录他们在锻炼期间的位置(想想 Runkeeper 和 Strava)。

我正在考虑如何保存坐标。让它像node(user)-has->node(workouts)<-is a-node(workout)-start->node(coord)-next->node(coord)-next->....一个链接列表一样,每次锻炼都有坐标是一个好主意吗?

我永远不会在数据库中查询单个点,锻炼将始终作为一个整体进行检索。

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

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

有人可以给我任何见解吗?

4

1 回答 1

1

我建议您将其存储为:

user --has--> workout --positionedAt--> coord

这种设计对我来说感觉更自然,因为您在问题中提到的链表设计只会产生非常深的遍历,这可能会让查询很烦人。workout通过这种方式,您可以通过简单地迭代顶点上的边轻松找到特定锻炼的所有坐标。我建议在positionedAt边缘存储一个日期时间戳,以便您可以轻松地对坐标进行排序。

coord不利的一面是,根据您打算拥有多少个顶点,您最终可能会得到一些胖workout顶点,但这可能不会真正影响您的用例。我想不出会产生 100000 个坐标(因此产生 100000 个边)之类的锻炼,但也许你可以。如果是这样,我想我可以稍微修改一下我的答案。

于 2013-10-31T13:58:38.510 回答