我对Titan Graph蓝图和gremlin有不同的疑问。实际上,我尝试在Ubuntu上的java程序中实现Titan图,但我有不同的问题。我使用titanGraph v0.4.4。
第一次,你可以在Java程序中看到我的titan配置:
BaseConfiguration config = new BaseConfiguration();
Configuration storage = config.subset(GraphDatabaseConfiguration.STORAGE_NAMESPACE);
// configuring local backend
storage.setProperty(GraphDatabaseConfiguration.STORAGE_BACKEND_KEY, "local");
storage.setProperty(GraphDatabaseConfiguration.STORAGE_DIRECTORY_KEY, "/tmp/testdbtitan");
// configuring elastic search index
Configuration index = storage.subset(GraphDatabaseConfiguration.INDEX_NAMESPACE).subset(INDEX_NAME);
index.setProperty(INDEX_BACKEND_KEY, "elasticsearch");
index.setProperty("local-mode", true);
index.setProperty("client-only", false);
index.setProperty(STORAGE_DIRECTORY_KEY, directory + File.separator + INDEX_NAME);
TitanGraph graph = TitanFactory.open(config);
graph.createKeyIndex("uuid", Vertex.class);
return graph;
之后,我创建了一个顶点:
Vertex r = graph.addVertex(null);
r.setProperty("name", "akrogames");
graph.commit();
所以,我的Java程序中有一个顶点但是使用gremlin我看不到这个顶点:
gremlin> g = TitanFactory.open('/tmp/testdbtitan')
gremlin> g.V.count()
==>0
我不明白为什么我有这个问题...
然后,我尝试使用我的java程序的不同实例访问我的数据库,但由于Titan中存在锁定,因此无法实现。这对我来说是一个问题,因为我想与不同的用户访问。请帮帮我......
最后,我无法清理我的泰坦数据库,因为我有一个例外:
TitanGraph graph = TitanFactory.open(config);
graph.shutdown();
TitanCleanup.clear(graph);
我有这个例外:
Exception in thread "main" com.thinkaurelius.titan.core.TitanException: Unexpected exception
during backend operation
at com.thinkaurelius.titan.diskstorage.util.BackendOperation.execute(BackendOperation.java:67)
at com.thinkaurelius.titan.core.util.TitanCleanup.clear(TitanCleanup.java:32)
at xxxx.xxxx.xxxxxx.xxxxx.xxxxxx.clearDB(XXXXXXX.java:365)
Caused by: java.lang.NullPointerException
at com.thinkaurelius.titan.util.system.IOUtils.deleteDirectory(IOUtils.java:24)
at com.thinkaurelius.titan.util.system.IOUtils.deleteDirectory(IOUtils.java:26)
at com.thinkaurelius.titan.util.system.IOUtils.deleteFromDirectory(IOUtils.java:17)
at com.thinkaurelius.titan.diskstorage.berkeleyje.BerkeleyJEStoreManager.clearStorage(BerkeleyJEStoreManager.java:169)
at com.thinkaurelius.titan.diskstorage.keycolumnvalue.keyvalue.OrderedKeyValueStoreManagerAdapter.clearStorage(OrderedKeyValueStoreManagerAdapter.java:59)
at com.thinkaurelius.titan.diskstorage.Backend.clearStorage(Backend.java:465)
at com.thinkaurelius.titan.core.util.TitanCleanup$1.call(TitanCleanup.java:35)
at com.thinkaurelius.titan.core.util.TitanCleanup$1.call(TitanCleanup.java:32)
at com.thinkaurelius.titan.diskstorage.util.BackendOperation.execute(BackendOperation.java:62)
... 5 more
我有这个例外但是我的DB被清理了......这很奇怪
谢谢你。
答案 0 :(得分:0)
这看起来很可疑:
gremlin> g = TitanFactory.open('/tmp/testdbtitan')
gremlin> g.V.count()
==>0
当我打开TitanGraph
时,它看起来像这样:
gremlin> g = TitanFactory.open('/tmp/titan')
==>titangraph[local:/tmp/titan]
不确定您是否严重剪切和粘贴了Gremlin会话片段,但如果g
没有打印任何内容,那么显然会出现问题。除此之外,为什么不通过构建Configuration
对象(或使用属性文件)以与在Java中相同的方式在Gremlin控制台中打开图形?这似乎特别重要,因为您使用ElasticSearch作为您使用的简写方法并不能连接到它。
我尝试使用我的java程序的不同实例访问我的数据库 但这是不可能的,因为泰坦有锁。这是一个 我的问题是因为我想与不同的用户访问。
BerkeleyDB不是为此用例而设计的。它适用于单个JVM进程。您有两种选择:
使用不同的后端,如Cassandra或Hbase
我无法清理我的泰坦数据库,因为我有一个例外
此错误是否可重复?可以通过简单的Gremlin会话进行复制吗?如果是,请提供此类信息。正如你所看到的,对我来说似乎对我有用的基本场景听起来与你正在做的完全不同:
gremlin> g = TitanFactory.open('/tmp/titan044')
==>titangraph[local:/tmp/titan044]
gremlin> g.shutdown()
==>null
gremlin> TitanCleanup.clear(g)
==>null
gremlin> g = TitanFactory.open('/tmp/titan044')
==>titangraph[local:/tmp/titan044]
gremlin> g.addVertex()
==>v[4]
gremlin> g.commit()
==>null
gremlin> g.shutdown()
==>null
gremlin> g = TitanFactory.open('/tmp/titan044')
==>titangraph[local:/tmp/titan044]
gremlin> g.V.count()
WARN com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx - Query requires iterating over all vertices [()]. For better performance, use indexes
==>1
gremlin> g.shutdown()
==>null
gremlin> TitanCleanup.clear(g)
==>null