Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.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
Grails 构建基于Neo4j的应用程序-使用普通节点和;关系还是使用Spring/GORM?_Grails_Gorm_Neo4j_Spring Data Graph_Spring Data Neo4j - Fatal编程技术网

Grails 构建基于Neo4j的应用程序-使用普通节点和;关系还是使用Spring/GORM?

Grails 构建基于Neo4j的应用程序-使用普通节点和;关系还是使用Spring/GORM?,grails,gorm,neo4j,spring-data-graph,spring-data-neo4j,Grails,Gorm,Neo4j,Spring Data Graph,Spring Data Neo4j,我希望听到你们中任何一位设计并实现了一个相当大的Neo4j应用程序(1000万个节点/rels)的人的建议,特别是w.r.t建模和各种API(vanilla java/groovy Neo4j vs Spring-Data-Neo4j vs Grails GORM/Neo4j) 我感兴趣的是,添加额外的OGM(对象图映射)层和相关的抽象是否真的值得 有没有人的经验是,最好坚持使用节点+属性、关系+属性、遍历和(例如)密码的“普通”图形建模来建模和存储数据 我担心的是,将特定OGM抽象“强制”到图

我希望听到你们中任何一位设计并实现了一个相当大的Neo4j应用程序(1000万个节点/rels)的人的建议,特别是w.r.t建模和各种API(vanilla java/groovy Neo4j vs Spring-Data-Neo4j vs Grails GORM/Neo4j)

我感兴趣的是,添加额外的OGM(对象图映射)层和相关的抽象是否真的值得

有没有人的经验是,最好坚持使用节点+属性、关系+属性、遍历和(例如)密码的“普通”图形建模来建模和存储数据

我担心的是,将特定OGM抽象“强制”到图形数据库将影响未来适应/更改域模型的灵活性和/或查询数据的灵活性

我们是Grails商店,我已经用GORM/Neo4J和spring-data-Neo4J进行了实验

数据集的主要目的是建模和查询大量人员、他们的别名、他们的同事以及各种犯罪活动和历史之间的关系。将有50多个主域类。模型必须具有灵活性(在项目的早期阶段需要快速发展)以及查询的速度和灵活性

我必须承认,当我可以使用(例如)POJO或POGOs、一点Groovy魔法和一些简单的手动域对象节点/关系映射代码时,我正在努力寻找使用OGM层的令人信服的理由。据我所知,我想我会很高兴只处理节点、遍历和密码(又名KISS)。但我很高兴听到其他人的经验和建议

谢谢你的时间和想法


TP

因为我是Grails Neo4j插件的作者,所以我可能有偏见。创建该插件的主要原因是将Grails域类的易用性及其强大的开箱即用的支架应用于Neo4j,用于约80%的用例。对于其他20%的特定需求需要遍历等内容的情况,我们直接使用Neo4j API(遍历/cypher),而不使用GORM API

当前版本的Neo4j插件存在超级节点问题,因为每个域实例都连接到一个子引用节点。如果多个并发请求(又名线程)添加了新的域实例,则有可能出现锁定异常。我将通过子引用方法或使用索引来解决这个问题

Cypher也可以在Neo4j Grails插件中使用

另一方面,Spring-Data-Neo4j是一种更高级的方法,可以更好地控制映射细节,但需要使用特定的注释。我发现没有一种简单的方法能够以脚手架的方式将其集成到Grails中


我们在一个有约60k用户和约10^6 rels的高效应用程序中使用了该插件的前一版本。由于NDA的原因,我无法提供更多细节。

我们不使用grails,而是使用混合的普通neo4j/spring-data-neo4j解决方案。原因在于,我们的一些域数据有固定的模式,而有些没有。SDN消除了很多负担,如果需要,可以与普通neo4j混合使用

我们有描述数据模型的类,这些类的对象我们使用SDN持久化,没有额外的技巧,我们只使用SDN的基础知识。然后我们有包含模型数据的类,这些数据是事先未知的。这些属性存储在包含特殊属性的节点中,用于描述数据所引用的模型类型。当neo4j 2发布时,我们可能会将这些信息转移到标签中。在这些节点之间可以存在关系,也可以由前面提到的sdn管理的数据模型来描述。我们还可以从通用节点到sdn节点之间存在关系,这很好,因为所有节点最终都是相同的东西:节点


使用这种方法,我们还没有遇到任何问题。我们最喜欢的是,我们不知道如何对数据进行建模的数据,是以您希望的方式存储的,如果您事先知道的话,则会使数据与所选择的模型匹配,这在使用任何其他类型的(非图形)数据库时都很难做到。

谢谢Stefan,事实上,我打算直接与您联系,询问您使用GORM/Neo4J插件的“真实”体验。在使用Neo4J时,我试图避免常见的架构和编码“gotchas”,特别是在使用对象图映射层的情况下。“当spring 2发布时”:您可能是指“Neo4J 2”?