构建基于Neo4j的应用程序 - 使用普通节点和关系坚持使用vanilla API或使用Spring/GORM?

Tim*_*sen 10 grails grails-orm neo4j spring-data-graph spring-data-neo4j

我希望听到任何一个已经构建并实现了大小合适的Neo4j应用程序(10百万个节点/ rels)的人 - 以及你的建议特别是建模和各种API(vanilla java/groovy Neo4j vs Spring-Data) -Neo4j vs Grails GORM/Neo4j).

我感兴趣的是,它是否真的能够为添加额外的OGM(对象图形映射)层和相关的抽象而付出代价?

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

我担心的是,将特定的OGM抽象"强制"到图形数据库中会影响未来调整/更改域模型的灵活性和/或查询数据的灵活性.

我们是Grails商店,我已经尝试过GORM/Neo4J以及spring-data-neo4j.

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

我必须承认,当我可以使用(例如)POJO或POGO,一点Groovy魔术和一些简单的手动域对象< - >节点/关系映射代码时,我很难找到使用OGM层的令人信服的理由.据我所知,我想我会很高兴只处理节点和遍历和Cypher(又名KISS).但我很乐意听取别人的经验和建议.

谢谢你的时间和想法,

TP

Ste*_*ter 7

因为我是Grails Neo4j插件的作者,所以我可能会有偏见.创建插件的主要原因是为大约80%的用例将Grails域类的易用性与其强大的开​​箱即用脚手架应用于Neo4j.对于其他20%,其中特定要求需要诸如遍历等内容.我们直接使用Neo4j API(遍历/密码)并且不使用GORM API.

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

Cypher也可用于Neo4j Grails插件.

另一方面,Spring-Data-Neo4j是一种更先进的方法,可以更好地控制映射细节,但需要使用特定的注释.而且我发现没有简单的方法可以将这种方法集成到Grails中.

我们在一个高效的应用程序中使用了该插件的前一版本,用户数量约为60,000,并且~10 ^ 6 rels.由于NDA,我无法提供更多细节.