Neo4j 中的存储过程
Posted
技术标签:
【中文标题】Neo4j 中的存储过程【英文标题】:Stored procedure in Neo4j 【发布时间】:2014-03-13 20:27:49 【问题描述】:我想知道是否有任何 Neo4j 等效的存储过程?
当我研究这个时,我遇到了events
,但我发现它们更像是触发器而不是存储过程。
【问题讨论】:
【参考方案1】:基本上有两种技术可以扩展 Neo4j 服务器:
-
Server plugins 丰富现有的 REST 端点并
unmanaged extensions 允许您创建新的 REST 端点
这两种技术都需要在 JVM(或其他 JVM 语言)中编写代码,打包一个 jar 文件并将其部署到 Neo4j 服务器。
【讨论】:
但非托管扩展更通用且更易于使用(恕我直言)。 服务器插件和非托管扩展都没有提供 Jack 正在寻找的存储过程功能。 我不同意,存储过程基本上是在服务器上运行的一些代码——这正是非托管扩展或服务器插件所做的。 谢谢。这些插件似乎与存储过程最接近。 我希望有一天我们可以通过 Cypher 访问这些插件。根据我的经验,neo4j 服务器插件很容易制作。但是,对 REST 的依赖削弱了它们的使用,特别是现在 Cypher 正日益成为在 neo4j 中访问数据的主要方式。【参考方案2】:自版本 3.0 起,存储过程可作为 Cypher 语言中的 CALLABLE 功能使用
第一个参考可以在这里找到 https://dzone.com/articles/neo4j-30-stored-procedures 一个显着的例子,展示了如何在大的 通过程序实现网络集群和社区 欺骗,这里 http://www.markhneedham.com/blog/2016/02/28/neo4j-a-procedure-for-the-slm-clustering-algorithm/编辑
随着 Neo4J 3.0 于 16 年 4 月发布,存储过程成为官方的、获得 Apache 2.0 许可的存储库。
https://neo4j.com/labs/apoc/
可用的程序范围从数据操作/导入到空间和复杂图形算法(例如,Page Rank、Dijkstra、社区检测、中介中心性、接近中心性等)
【讨论】:
【参考方案3】:我在这里的回答并没有直接回答这个问题(Stefan 的回答很好)。话虽如此,如果你们中的任何人正在考虑在项目实际用于生产之前(在撰写本文时是 Neo4j 用户群的绝大多数)之前编写服务器插件(以获得存储过程行为),我强烈建议不这样做。
服务器插件为您的项目增加了架构复杂性。您将需要 JVM 开发人员来维护它们。部署或更新它们可能很棘手,并且相关的源代码控制方法也不直观。 Neo4j 不需要架构迁移,这使您作为开发人员的工作更加轻松。添加服务器插件将不再给您带来这种好处,并且由于它不是 Neo4j 的主流用例,因此您从开发者社区获得的帮助很少,与该功能相关的改进和错误修复将在Neo4j 团队。
所有这些都可能是为了稍微提高性能,或者根本没有。
“存储过程”(或使用服务器插件等)是在性能调优方面具有的重要功能,但如果您的团队仍然是车库里的两个人,甚至不要考虑走这条路.
【讨论】:
以上是关于Neo4j 中的存储过程的主要内容,如果未能解决你的问题,请参考以下文章