Héc*_*tor 3 cassandra janusgraph
我正在使用 JanusGraph 和 Cassandra 后端,但我有一些疑问。
我的机器上运行着一个 Cassandra 服务器(使用 Docker),在我的 API 中我有以下代码:
GraphTraversalSource g = JanusGraphFactory.build()
.set("storage.backend", "cql")
.set("storage.hostname", "localhost")
.open()
.traversal();
Run Code Online (Sandbox Code Playgroud)
然后,通过我的 API,我使用 Gremlin 保存和获取数据。它工作正常,我看到数据保存在 Cassandra 数据库中。
当我重新启动 API 并尝试获取数据时,问题就出现了。数据仍然存储在 Cassandra 中,但 JanusGraph 查询返回空。为什么?
我是否需要将后端存储数据加载到内存或类似的东西中?我正在尝试了解它是如何工作的。
编辑
这就是我添加项目的方式:
Vertex vertex = g.addV("User")
.property("username", username)
.property("email", email)
.next();
Run Code Online (Sandbox Code Playgroud)
并获取所有:
List<Vertex> all = g.V().toList()
Run Code Online (Sandbox Code Playgroud)
您现在正在使用 JanusGraph作为库嵌入到您的应用程序中,这使您可以访问 JanusGraph 的完整 API。这意味着您必须自己管理事务,其中还包括必须提交事务才能持久保存对图的修改。
您只需调用以下命令即可做到这一点:
g.tx().commit();
Run Code Online (Sandbox Code Playgroud)
在您通过修改迭代遍历之后(addV()您的情况下的遍历)。
如果没有提交,更改仅在事务中本地可用。当您重新启动 Docker 容器时,所有数据都将丢失,因为您尚未提交数据。
如果您没有充分的理由将 JanusGraph 作为库嵌入到 JVM 应用程序中,那么建议将其独立部署为 JanusGraph 服务器,您可以将遍历发送到该服务器以执行。这样做的好处是您可以独立于应用程序扩展 JanusGraph,并且可以从非 JVM 语言使用它。
然后,JanusGraph Server 还通过在自己的事务中执行每个遍历来透明地为您管理事务。如果遍历成功,则结果被提交,如果发生异常,结果也会自动回滚。
JanusGraph 文档包含有关如何从 Java 连接到 JanusGraph Server 的g部分,但重要的部分是此代码,用于创建连接到 JanusGraph Server 的图形遍历源:
Graph graph = EmptyGraph.instance();
GraphTraversalSource g = graph.traversal().withRemote("conf/remote-graph.properties");
Run Code Online (Sandbox Code Playgroud)
当然,您也可以将 JanusGraph Server 作为 Docker 容器启动:
docker run --rm janusgraph/janusgraph:latest
Run Code Online (Sandbox Code Playgroud)
有关 JanusGraph Docker 映像以及如何配置它以连接到 Cassandra 后端的更多信息,请参阅此处。
鉴于对我的第一个版本的答案的评论,下面的部分不再与这个问题直接相关。我仍然将其留在这里,以防其他人也遇到类似的问题,而这实际上可能是原因。
JanusGraph 将数据存储在您的存储后端中,在您的情况下是 Cassandra。这意味着您必须确保 Cassandra 保留数据。如果在 Docker 容器中启动 Cassandra,则必须安装 Cassandra 存储数据的卷,以在容器重新启动后保留数据。否则,一旦停止 Cassandra 容器,数据就会丢失。
为此,您可以启动 Cassandra 容器,如下所示:
docker run -v /my/own/datadir:/var/lib/cassandra -d cassandra
Run Code Online (Sandbox Code Playgroud)
where/my/own/datadir是您希望存储 Cassandra 数据的主机系统目录。官方 Cassandra Docker 映像的文档中对此进行了解释,位于“注意事项” > “存储数据位置”下。