如何使用 JanusGraphFactory 连接到外部 JanusGraph Server?
我不知道我在做什么,一般来说是 JanusGraph 和图形数据库的新手。
JanusGraph > Configuration > "storage.backend"
属性应该连接什么?
│ pom.xml
│
├───src
│ ├───main
│ │ ├───java
│ │ │ Main.java
│ │ │
│ │ └───resources
│ │ │ log4j2.xml
│ │ │
│ │ ├───conf
│ │ │ remote-graph.properties
│ │ │ remote-objects.yaml
我试过切换存储后端的名称
shorthands: berkeleyje, cql, hbase, inmemory
。 import org.apache.commons.configuration2.BaseConfiguration;
import org.apache.commons.configuration2.Configuration;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.janusgraph.core.JanusGraph;
import org.janusgraph.core.JanusGraphFactory;
public class Main {
private static final Logger logger = LogManager.getLogger(Main.class);
public static void main(String[] args) {
Configuration configuration = new BaseConfiguration();
configuration.setProperty("storage.backend", "inmemory");
JanusGraph janusGraph = JanusGraphFactory.open(configuration);
GraphTraversalSource g = janusGraph.traversal();
logger.info(g.V().next());
janusGraph.close();
}
}
# remote-graph.properties
gremlin.remote.remoteConnectionClass=org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteConnection
gremlin.remote.driver.clusterFile=src/main/resources/conf/remote-objects.yaml
gremlin.remote.driver.sourceName=g
# remote-objects.yaml
hosts: [localhost]
port: 18182
serializer: {
className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0,
config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
<!-- POM.XML -->
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j2-impl</artifactId>
<version>2.20.0</version>
</dependency>
<dependency>
<groupId>org.janusgraph</groupId>
<artifactId>janusgraph-core</artifactId>
<version>1.0.0-20230424-065649.dcd3240</version>
</dependency>
<dependency>
<groupId>org.apache.tinkerpop</groupId>
<artifactId>gremlin-core</artifactId>
<version>3.6.2</version>
</dependency>
<dependency>
<groupId>org.janusgraph</groupId>
<artifactId>janusgraph-inmemory</artifactId>
<version>1.0.0-20230427-155952.3f229ac</version>
</dependency>
</dependencies>
</project>
我使用的 JanusGraph-Server 是一个 docker 容器:
docker run -it -p 18182:8182 janusgraph/janusgraph
。 2023-05-01 10:36:13,327 [INFO] [o.j.d.c.b.ReadConfigurationBuilder.main] :: Set default timestamp provider MICRO
2023-05-01 10:36:13,344 [INFO] [o.j.g.i.UniqueInstanceIdRetriever.main] :: Generated unique-instance-id=c0a8563c7736-rmt-lap-win201
2023-05-01 10:36:13,354 [INFO] [o.j.d.c.ExecutorServiceBuilder.main] :: Initiated fixed thread pool of size 40
2023-05-01 10:36:13,362 [DEBUG] [o.j.d.l.LocalLockMediators.main] :: Local lock mediator instantiated for namespace org.janusgraph.diskstorage.inmemory.InMemoryStoreManager@6d24ffa1
2023-05-01 10:36:13,367 [DEBUG] [o.j.g.d.i.VertexIDAssigner.main] :: Partition IDs? [true], Local Partitions? [false]
2023-05-01 10:36:13,369 [DEBUG] [o.j.g.d.i.p.SimpleBulkPlacementStrategy.main] :: Setting partition at index [0] to: 8
2023-05-01 10:36:13,370 [DEBUG] [o.j.g.d.i.p.SimpleBulkPlacementStrategy.main] :: Setting partition at index [1] to: 5
2023-05-01 10:36:13,370 [DEBUG] [o.j.g.d.i.p.SimpleBulkPlacementStrategy.main] :: Setting partition at index [2] to: 21
2023-05-01 10:36:13,370 [DEBUG] [o.j.g.d.i.p.SimpleBulkPlacementStrategy.main] :: Setting partition at index [3] to: 17
2023-05-01 10:36:13,370 [DEBUG] [o.j.g.d.i.p.SimpleBulkPlacementStrategy.main] :: Setting partition at index [4] to: 5
2023-05-01 10:36:13,370 [DEBUG] [o.j.g.d.i.p.SimpleBulkPlacementStrategy.main] :: Setting partition at index [5] to: 16
2023-05-01 10:36:13,370 [DEBUG] [o.j.g.d.i.p.SimpleBulkPlacementStrategy.main] :: Setting partition at index [6] to: 24
2023-05-01 10:36:13,370 [DEBUG] [o.j.g.d.i.p.SimpleBulkPlacementStrategy.main] :: Setting partition at index [7] to: 11
2023-05-01 10:36:13,370 [DEBUG] [o.j.g.d.i.p.SimpleBulkPlacementStrategy.main] :: Setting partition at index [8] to: 14
2023-05-01 10:36:13,370 [DEBUG] [o.j.g.d.i.p.SimpleBulkPlacementStrategy.main] :: Setting partition at index [9] to: 31
2023-05-01 10:36:13,391 [INFO] [o.j.g.d.StandardJanusGraph.main] :: Gremlin script evaluation is disabled
2023-05-01 10:36:13,397 [INFO] [o.j.d.l.k.KCVSLog.main] :: Loaded unidentified ReadMarker start time 2023-05-01T15:36:13.397883Z into org.janusgraph.diskstorage.log.kcvs.KCVSLog$MessagePuller@70eecdc2
2023-05-01 10:36:13,397 [DEBUG] [o.j.d.l.k.KCVSLog.main] :: Creating log read executor: initialDelay=100000000 delay=5000000000 unit=NANOSECONDS
2023-05-01 10:36:13,398 [DEBUG] [o.j.g.d.StandardJanusGraph.main] :: Installed shutdown hook Thread[Thread-0,5,main]
java.lang.Throwable: Hook creation trace
at org.janusgraph.graphdb.database.StandardJanusGraph.<init>(StandardJanusGraph.java:250) [janusgraph-core-1.0.0-20230424-065649.dcd3240.jar:?]
at org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:176) [janusgraph-core-1.0.0-20230424-065649.dcd3240.jar:?]
at org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:147) [janusgraph-core-1.0.0-20230424-065649.dcd3240.jar:?]
at org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:127) [janusgraph-core-1.0.0-20230424-065649.dcd3240.jar:?]
at Main.main(Main.java:14) [classes/:?]
2023-05-01 10:36:13,446 [DEBUG] [o.j.g.t.StandardJanusGraphTx.main] :: Caffeine vertex cache size: requested=20000 effective=20000 (min=100)
2023-05-01 10:36:13,448 [DEBUG] [o.j.g.t.v.CaffeineVertexCache.main] :: Created dirty vertex map with initial size 32
2023-05-01 10:36:13,450 [DEBUG] [o.j.g.t.v.CaffeineVertexCache.main] :: Created vertex cache with max size 20000
2023-05-01 10:36:13,455 [DEBUG] [o.j.g.t.JanusGraphBlueprintsGraph.main] :: Created new thread-bound transaction standardjanusgraphtx[0x79c5636f]
2023-05-01 10:36:13,466 [WARN] [o.j.g.t.StandardJanusGraphTx.main] :: Query requires iterating over all vertices [[]]. For better performance, use indexes
Exception in thread "main" java.util.NoSuchElementException
at org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal.next(DefaultTraversal.java:257)
at Main.main(Main.java:16)
2023-05-01 10:36:13,498 [DEBUG] [o.j.d.l.k.KCVSLog.pool-5-thread-1] :: MessagePuller configured with ReadMarker timestamp slightly ahead of read lag time; waiting for the clock to catch up