Graph 在“中建模用户信息”;“共享”;图表
我有一个Neo4j图,它模拟了课程中每个概念之间的静态关系 现在我需要介绍每个概念中每个学生的分数 由于我需要进行复杂的查询并考虑效率问题,我正在考虑为每个用户创建一个独立的静态图,以便分数可以存储在每个节点中。问题是,如果一门课程有数百名学生,那么就会有数百张图表,每个用户一张。另一个问题是,如果我需要更改静态图,我需要将该更改应用于数百个图 另一种方法是将学生成绩作为属性存储在节点中。这样,每个节点只有一个图,每个节点有数百个属性(分数),每个用户一个 什么是好方法?什么是更好的方法Graph 在“中建模用户信息”;“共享”;图表,graph,neo4j,graph-databases,Graph,Neo4j,Graph Databases,我有一个Neo4j图,它模拟了课程中每个概念之间的静态关系 现在我需要介绍每个概念中每个学生的分数 由于我需要进行复杂的查询并考虑效率问题,我正在考虑为每个用户创建一个独立的静态图,以便分数可以存储在每个节点中。问题是,如果一门课程有数百名学生,那么就会有数百张图表,每个用户一张。另一个问题是,如果我需要更改静态图,我需要将该更改应用于数百个图 另一种方法是将学生成绩作为属性存储在节点中。这样,每个节点只有一个图,每个节点有数百个属性(分数),每个用户一个 什么是好方法?什么是更好的方法 谢谢假
谢谢假设您谈论的分数是学生在特定概念上的表现,那么将分数存储在学生节点或概念节点中似乎是不合适的。您应该将其存储在两者之间的关系中。假设你在测验一个学生微积分极限。我可能会这样做:
(s:Student {name: "Joe"})-[:learned { score: 100 }]->(c:Concept {name: "limits"})
你可能不会把分数放在Student
或Concept
中
在数据建模方面,考虑你领域中的“名词”(这里是学生和概念)。然后思考他们之间的关系(学生学习概念)。不要过度填充节点,但也要使用关系上的属性来断言关于这些关系的元数据。一个学生学概念的程度如何?这是关系上的得分
属性(或类似属性),而不是概念上的
另外,我不知道你的图会有多大,但我可能不会存储一堆独立的图。这都只是一个巨大的图,然后每个学生都可以有一个对应于特定查询的“子图”。将数据拆分为单独的存储会给您带来维护和刷新的噩梦。只有当你有确凿的证据证明你不能将性能作为一个大图形来工作时,我才会这么做(我打赌你能做到)。想象一个拥有一百万学生和一百万概念的数据库;您将始终能够动态生成每个学生的子图:
MATCH (s:Student {name:"Joe"})-[l:learned]->(c:Concept)
RETURN s, l, c;
如果您曾经使用过关系数据库,可以将其视为“视图”。整个数据库仍然是数据库,但是使用这样的查询,您可以构建定制的数据库视图,这些视图是为个人定制的(在本例中是Joe)。这为您带来了集中数据管理、建模、存储和更新的所有优势,但每个用户都可以随心所欲地看到它,如果合适的话,可以忽略99%的数据库
如果您使用适当的标签和索引,这应该表现得相当好;通过这样的关系是neo4j擅长的最佳点的死点。假设您所谈论的分数是学生在特定概念上的表现,似乎将分数存储在学生节点或概念节点中是不合适的。您应该将其存储在两者之间的关系中。假设你在测验一个学生微积分极限。我可能会这样做:
(s:Student {name: "Joe"})-[:learned { score: 100 }]->(c:Concept {name: "limits"})
你可能不会把分数放在Student
或Concept
中
在数据建模方面,考虑你领域中的“名词”(这里是学生和概念)。然后思考它们之间的关系(学生学习概念)。不要过度填充节点,但也要使用关系上的属性来断言关于这些关系的元数据。学生对概念的学习情况如何?这是关系上的得分
属性(或类似属性),而不是概念上的
另外,我不知道你的图会有多大,但我可能不会存储一堆独立的图。这都只是一个巨大的图,然后每个学生都可以有一个对应于特定查询的“子图”。将数据拆分为单独的存储会给您带来维护和刷新的噩梦。只有当你有确凿的证据证明你不能将性能作为一个大图形来工作时,我才会这么做(我打赌你能做到)。想象一个拥有一百万学生和一百万概念的数据库;您将始终能够动态生成每个学生的子图:
MATCH (s:Student {name:"Joe"})-[l:learned]->(c:Concept)
RETURN s, l, c;
如果您曾经使用过关系数据库,可以将其视为“视图”。整个数据库仍然是数据库,但是使用这样的查询,您可以构建定制的数据库视图,这些视图是为个人定制的(在本例中是Joe)。这为您带来了集中数据管理、建模、存储和更新的所有优势,但每个用户都可以随心所欲地看到它,如果合适的话,可以忽略99%的数据库
如果您使用适当的标签和索引,这应该表现得相当好;像这样遍历关系是neo4j擅长的最佳点的死角