用于Java的嵌入式和分布式键值存储或图形数据库

时间:2017-07-16 05:23:50

标签: java titan

是否存在可以集成到Java应用程序中的分布式键值存储或图形数据库。

我正在看Titan + BerkeleyDB,但它似乎还需要一个单独的服务器。

http://titan.thinkaurelius.com/wikidoc/0.4.0/Home.html

Titan可以在独立模式下运行并连接到其他Titan节点吗?如果是,如何配置或实现?

是否存在类似HazelCast的内容,但如果Titan不能以这种方式工作,则会使用类似于Create https://crate.io/的分布式持久存储。

2 个答案:

答案 0 :(得分:1)

您可以签出Permazen

在简单的键/值存储之上,它基本上是一个以Java为中心的持久层。提供了几种键/值存储方式。

免责声明:我是项目作者。

答案 1 :(得分:0)

使用BerkeleyDB的TitanDB或JanusGraph(从TitanDB 1.0.0派生)可以嵌入Java或单独服务器使用。

如果你正在使用maven,只需在pom文件中添加这些依赖项:

<dependency>
    <groupId>com.thinkaurelius.titan</groupId>
    <artifactId>titan-core</artifactId>
    <version>1.0.0</version>
</dependency>
<dependency>
    <groupId>com.thinkaurelius.titan</groupId>
    <artifactId>titan-berkeleyje</artifactId>
    <version>1.0.0</version>
</dependency>

示例代码:

ModifiableConfiguration config = GraphDatabaseConfiguration.buildGraphConfiguration();
config.set(GraphDatabaseConfiguration.STORAGE_BACKEND, "berkeleyje");
config.set(GraphDatabaseConfiguration.STORAGE_DIRECTORY,"data");
TitanGraph graph = TitanFactory.open(config);

TitanManagement mgmt = graph.openManagement();
mgmt.makePropertyKey("name").dataType(String.class).make();
mgmt.makeEdgeLabel("friend").make();
mgmt.commit();

TitanTransaction tx = graph.newTransaction();
Vertex ashaful = tx.addVertex("name", "Ashraful Islam");
Vertex jishnu = tx.addVertex("name", "Jishnu Banerjee");
Vertex ovi = tx.addVertex("name", "Ahsanul Haque Ovi");
ashaful.addEdge("friend", jishnu);
jishnu.addEdge("friend", ovi);
tx.commit();

GraphTraversalSource g = graph.traversal();
GraphTraversal result = g.V().has("name", "Ashraful Islam").out("friend").out("friend").values("name");
while (result.hasNext()) {
    System.out.println(result.next());
}

graph.close();

TitanDB或JanusGraph节点之间不能相互通信,您必须为所有节点使用公共存储后端群集(Cassandra / HBase),以便它们的数据保持一致。