网站建设的专业知识,网站建设项目分析,快懂百科登录入口,网站如何诊断Neo4j 图的组件 节点#xff08;Nodes#xff09;标签#xff08;Labels#xff09;关系#xff08;Relationships#xff09;属性#xff08;Properties#xff09;建模过程 了解领域并为应用程序定义特定用例#xff08;问题#xff09;。开发初始图形数据模型。 对…Neo4j 图的组件 节点Nodes标签Labels关系Relationships属性Properties建模过程 了解领域并为应用程序定义特定用例问题。开发初始图形数据模型。 对节点实体建模。对节点之间的关系建模。针对初始数据模型测试用例。使用 Cypher 使用测试数据创建图形实例模型。测试用例包括针对图表的性能。由于关键用例的变化或性能原因重构改进图形数据模型。在图上实施重构并使用 Cypher 重新测试。图数据建模是一个迭代过程。重构在开发过程中很常见。与 RDBMS 中的模式不同Neo4j 图形有一个非常灵活的可选模式。Cypher 开发人员可以轻松修改图形以表示改进的数据模型。领域 了解应用程序的域 确定应用程序的利益相关者和开发人员。与利益相关者和开发人员 详细描述应用程序。识别应用程序的系统和用户。就应用程序的用例达成一致。对用例的重要性进行排序。模型的目的 模型类型 数据类型(Data model) 数据模型描述了图形的标签、关系和属性。它没有将在图表中创建的特定数据。图形数据模型很重要因为它定义了在应用程序创建和使用图形时将用于标签、关系类型和属性的名称。实例类型(Instance model) 图数据建模过程的一个重要部分是针对用例测试模型。帮助我们确认我们的数据模型可以满足应用程序的用例。建模风格指南 标签是以大写字母开头的单个标识符可以是CamelCase。 示例个人、公司、GitHubRepo关系类型是单个标识符全部为大写字母并带有下划线字符。 示例FOLLOWS、MARRIED_TO节点或关系的属性键是以小写字母开头的单个标识符可以是CamelCase式。 示例deptId、firstName建模节点Modelig Nodes 名词定义标签实体 用例的实体将是图形数据模型中的标记节点。节点属性 作用 唯一标识一个节点。回答应用程序用例的具体细节。返回数据。创建节点 MATCH (n) DETACH DELETE n;MERGE (:节点名 {标签1: 属性, 标签2: 属性, 标签3: 属性, 标签4: [属性数组]})建模关系Modeling Relationships 动词关系是实体之间的联系命名关系 使用所有大写字母/下划线字符的 Neo4j 最佳实践作为关系的名称。关系方向 在 Neo4j 中创建关系时方向必须明确指定或由指定模式中的从左到右方向推断。在运行时在查询期间通常不需要方向。关系属性 关系的属性用于丰富两个节点的相关方式。定义关系时必须定义 关系的起始节点带有标签。关系的结束节点带有标签。关系的名称类型。创建关系 MERGE ( 起始节点 )-[ :关系名 { 关系属性名: 属性值 } ]-( 结束节点 )用于 MATCH 查找用户和电影节点然后用于 MERGE 创建两个节点之间的关系。请记住在创建关系时必须指定或推断从左到右方向。测试用例期间需要做什么 向图中添加更多数据以测试可扩展性。测试和修改用于测试用例的任何 Cypher 代码。如果无法回答用例则重构数据模型。测试用例 MATCH ( 别名1 : 节点/标签1 ) - [ 关系标签 : 关系 ] - ( 别名2 : 节点/标签2 ) WHERE 条件1 AND/OR 条件2 AND [值1,值2...] IN 列名 RETURN 列名/关系属性 AS 列名列名长用反引号ORDER BY 列名 DESC/ASC Limit 数字节点计数 MATCH ( 标签 : 节点 ) RETURN count(*)关系计数 MATCH () - [ :关系 ] - () RETURN count(*)重构图表 重构是更改数据模型和图形的过程。重构的原因 建模的图表并没有回答所有的用例。出现了一个新的用例您必须在数据模型中考虑该用例。用例的 Cypher 表现不佳尤其是当图形缩放时重构步骤 设计新的数据模型。编写 Cypher 代码来转换现有图形以实现新的数据模型。重新测试所有用例可能使用更新的 Cypher 代码。图中的标签 节点标签用作查询的锚点。向节点添加标签的主要原因 使用标签有助于减少检索的数据量。最佳做法是将节点的标签数限制为 4返回图中的所有节点。 MATCH (n) RETURN n返回图中的所有Person节点。 MATCH (n:Person) RETURN n使用 PROFILE 分析查询 PROFILE MATCH (n:Person) RETURN n 执行的次数和执行的时间越小越优。 不要过度的使用标签 最佳做法是将节点的标签数限制为 4因为缓存是自动填充的所以有时很难用小数据集来衡量性能。也就是说数据库命中率和运行时间可能无法比较。 用PROFILE分析查询重构模型重构图表 MATCH (p:Person) WHERE exists ((p)-[:ACTED_IN]-()) SET p:Actor重构图表后 为受重构影响的用例重写任何 Cypher 查询。重新测试受重构影响的所有用例及所有查询。避免这些标签 主义正交标签之间应该没有任何关系表示类层次结构消除重复数据 重构图表已消除重复数据 提高查询性能。减少图形所需的存储量。添加节点属性 MATCH ( m:Movie { m.title : Apollo13} ) SET m.languages[English]查询重复数据 MATCH ( 别名 : 节点 ) WHERE [ 值1 , 值2 ] IN 列名 RETURN 返回的列重构重复数据 如Oracle数据库新添加一个表将重复的列的惟一值写到新表中创建新节点及属性创建节点关系删除旧节点属性使用分隔列表元素 UNWIND消除节点的复杂数据 原因 重复数据。许多节点可能在特定位置有生产公司并且数据在许多节点中重复。如Oracle中的列名不能重复主键惟一。与节点中的信息相关的查询需要检索所有节点。重构节点中包含复杂数据的图 消除多个节点中的数据重复。提高查询性能。使用特定关系 重构以专门化关系 重构图形以添加这些专用关系的代码使用 APOC 库。apoc.merge.relationship 允许您在图中动态创建关系的过程。原因 减少需要检索的节点数。提高查询性能。中间结点 创建原因 在单个上下文中连接两个以上的节点。 具有 from 和 to 属性超边n 关系将某事与一段关系联系起来。在实体之间共享图中的数据。重构来创建中间节点 在单个上下文中连接两个以上的节点。在图中共享数据。将某事与一段关系联系起来。添加角色节点 match(a:Actor)-[r:ACTED_IN]-(m:Movie)merge (x:Role{name:r.role})merge(a)-[:PLAYED]-(x)merge(x)-[:IN_MOVIE]-(m)