如果我在服务器模式下运行 neo4j,以便使用 REST API 访问它,我可以使用 EmbeddedGraphDatabase-class 访问同一个 neo4j 实例吗?
我正在考虑一个生产设置,其中使用 EmbeddedGraphDatabase 的 Java 应用程序正在驱动逻辑,但其他客户端可能会在只读模式下使用 REST 导航数据。
如果我在服务器模式下运行 neo4j,以便使用 REST API 访问它,我可以使用 EmbeddedGraphDatabase-class 访问同一个 neo4j 实例吗?
我正在考虑一个生产设置,其中使用 EmbeddedGraphDatabase 的 Java 应用程序正在驱动逻辑,但其他客户端可能会在只读模式下使用 REST 导航数据。
您所描述的是服务器插件或扩展。通过这种方式,您可以通过 REST API 公开您的数据库,但同时您可以从您的自定义插件/扩展代码中访问高性能的嵌入式图形数据库。
在您的自定义代码中,您可以获得一个 GraphDatabaseService 注入,您可以在其上进行操作。
您使用 neo4j-server 将自定义扩展部署为 jar,并让客户端代码在面向域的 restful API 上运行。
// extension sample
@Path( "/helloworld" )
public class HelloWorldResource {
private final GraphDatabaseService database;
public HelloWorldResource( @Context GraphDatabaseService database) {
this.database = database;
}
@GET
@Produces( MediaType.TEXT_PLAIN )
@Path( "/{nodeId}" )
public Response hello( @PathParam( "nodeId" ) long nodeId ) {
// Do stuff with the database
return Response.status( Status.OK ).entity(
( "Hello World, nodeId=" + nodeId).getBytes() ).build();
}
}