Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graph 在“中建模用户信息”;“共享”;图表_Graph_Neo4j_Graph Databases - Fatal编程技术网

Graph 在“中建模用户信息”;“共享”;图表

Graph 在“中建模用户信息”;“共享”;图表,graph,neo4j,graph-databases,Graph,Neo4j,Graph Databases,我有一个Neo4j图,它模拟了课程中每个概念之间的静态关系 现在我需要介绍每个概念中每个学生的分数 由于我需要进行复杂的查询并考虑效率问题,我正在考虑为每个用户创建一个独立的静态图,以便分数可以存储在每个节点中。问题是,如果一门课程有数百名学生,那么就会有数百张图表,每个用户一张。另一个问题是,如果我需要更改静态图,我需要将该更改应用于数百个图 另一种方法是将学生成绩作为属性存储在节点中。这样,每个节点只有一个图,每个节点有数百个属性(分数),每个用户一个 什么是好方法?什么是更好的方法 谢谢假

我有一个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擅长的最佳点的死角