如何在Neo4j-3.5运行Gremlin查询?适配TinkerPop版本说明
适配版本说明
Neo4j 3.5社区版可稳定对接的TinkerPop&Gremlin版本为3.4.x稳定线,推荐使用3.4.13(3.4线最终维护版本)。
- 禁止使用TinkerPop 3.5.0及以上版本对接:高版本内置的neo4j-gremlin组件适配Neo4j 4.x+的存储API,连接3.5实例会触发存储格式不兼容错误,甚至可能损坏数据库文件。
- 该版本组合无企业版依赖,Neo4j社区版即可完整支持所有Gremlin查询能力。
具体实现方案
根据使用场景,可以选以下三种落地方式,所有方案都不需要做全量数据迁移,可直接读取现有Neo4j 3.5的存储数据。
方案1:JVM应用嵌入式集成
适用于Java/Kotlin/Scala等JVM栈应用直接在进程内执行Gremlin查询,不需要额外部署服务:
- 引入依赖,核心依赖坐标为
org.apache.tinkerpop:neo4j-gremlin:3.4.13,引入时需要排除依赖包中自带的高版本Neo4j驱动,强制指定Neo4j版本与你当前使用的3.5.x小版本完全一致,避免依赖冲突。 - 初始化Gremlin遍历客户端,示例代码:
import org.apache.tinkerpop.gremlin.neo4j.structure.Neo4jGraph; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; // 直接指向本地Neo4j 3.5的数据库存储目录 Neo4jGraph graph = Neo4jGraph.open("/your/neo4j-3.5-install-path/data/databases/graph.db"); GraphTraversalSource g = graph.traversal(); // 执行Gremlin查询,例:统计全量节点数 Long totalNodes = g.V().count().next(); // 用完关闭连接释放文件锁 graph.close();
注意:嵌入式模式运行时,必须停掉占用同一个数据目录的Neo4j Server进程,否则会触发文件锁冲突报错。
方案2:Gremlin Server代理部署
适用于多语言应用、非JVM栈应用需要通过网络调用Gremlin查询的场景:
- 下载并解压3.4.13版本的Gremlin Server安装包。
- 修改配置:
- 编辑
conf/neo4j-empty.properties,将gremlin.neo4j.directory配置项的值改为你现有Neo4j 3.5的数据库存储目录绝对路径;首次连接时可临时将gremlin.neo4j.conf.dbms.allow_upgrade设为true完成存储元数据兼容,连接验证正常后改回false,避免误触发存储版本升级。 - 编辑
conf/gremlin-server.yaml,将默认挂载的图配置指向修改好的neo4j配置文件,调整服务监听端口,避免和原有Neo4j服务的端口冲突。
- 编辑
- 启动服务:执行
bin/gremlin-server.sh(Linux/macOS)或bin/gremlin-server.bat(Windows),启动成功后即可用任意语言的Gremlin驱动连接服务端口执行查询。
该模式下同样需要停掉原有占用同数据目录的Neo4j进程,Gremlin Server本身支持Cypher查询插件,可同时兼容原有Cypher查询逻辑。
方案3:Gremlin Console临时查询
适用于调试、临时数据查询场景:
- 下载并解压3.4.13版本的Gremlin Console安装包。
- 启动控制台后依次执行以下命令完成连接:
:plugin use tinkerpop.neo4j graph = Neo4jGraph.open("/your/neo4j-3.5-install-path/data/databases/graph.db") g = graph.traversal()
- 连接完成后直接输入Gremlin语句即可执行查询,例如输入
g.V().limit(10).valueMap()可查询前10个节点的所有属性。
踩坑提示
所有操作前务必备份Neo4j的data目录全量文件,避免配置失误导致数据损坏。
3.4版本的neo4j-gremlin组件不支持通过Bolt协议连接远程运行中的Neo4j实例,仅支持直接读取本地磁盘上的Neo4j存储文件。
内容的提问来源于stack exchange,提问作者anisha
相关产品推荐
相关产品推荐

