我对这个有点困惑.在整个文档中可以找到几个类似的例子.如 :
g.V.has('name','hercules').next()
g.query().has("name",EQUAL,"hercules").vertices()
Run Code Online (Sandbox Code Playgroud)
有人可以澄清上述两者之间的过程有何不同?
谢谢
我作为TitanDB用户迈出了第一步.那就是,我想知道如何在一个顶点/有条件地插入一个顶点TitanTransaction(以"获取或创建"的方式).
我有一个关于我想要创建/查找的顶点/属性的唯一索引.
我试图使用下面的代码将Titan图数据导出到JSON文件
TitanGraph titanGraph = TitanFactory.open("D:/Dev/Titan/titan-1.0.0-hadoop1/conf/titan-cassandra.properties");
FileOutputStream outJSON = new FileOutputStream("D:/titan-graph.json");
GraphSONWriter.build().create().writeGraph(outJSON, titanGraph);
Run Code Online (Sandbox Code Playgroud)
运行此代码获取异常时:
Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.IllegalStateException) (through reference chain: com.thinkaurelius.titan.graphdb.relations.RelationIdentifier["inVertexId"])
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:210)
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:177)
at com.fasterxml.jackson.databind.ser.std.StdSerializer.wrapAndThrow(StdSerializer.java:187)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:647)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:152)
at org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONUtil.writeWithType(GraphSONUtil.java:49)
at org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSerializer.ser(StarGraphGraphSONSerializer.java:100)
at org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSerializer.serialize(StarGraphGraphSONSerializer.java:64)
at org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSerializer.serialize(StarGraphGraphSONSerializer.java:54)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:128)
at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:2881)
at com.fasterxml.jackson.databind.ObjectMapper.writeValue(ObjectMapper.java:2304)
at org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONWriter.writeVertex(GraphSONWriter.java:76)
at org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONWriter.writeVertices(GraphSONWriter.java:104)
at org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONWriter.writeGraph(GraphSONWriter.java:65)
at com.mimos.titan.TitanGraphTest.main(TitanGraphTest.java:29)
Caused by: java.lang.IllegalStateException
at com.google.common.base.Preconditions.checkState(Preconditions.java:158)
at com.thinkaurelius.titan.graphdb.relations.RelationIdentifier.getInVertexId(RelationIdentifier.java:69)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:466)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:639)
... …Run Code Online (Sandbox Code Playgroud) 假设我有来自各个农场的苹果。所以树结苹果,农场有树。我想要一份苹果列表,其中还包含对它们来自的农场的引用。
g = new TinkerGraph();
// apples
a1 = g.addVertex("a1");
a1.setProperty("type", "apple");
a2 = g.addVertex("a2");
a2.setProperty("type", "apple");
a3 = g.addVertex("a3");
a3.setProperty("type", "apple");
// trees
t1 = g.addVertex("t1");
t1.setProperty("type", "tree");
t2 = g.addVertex("t2");
t2.setProperty("type", "tree");
// farms
f1 = g.addVertex("f1");
f1.setProperty("type", "farm");
f1.setProperty("uid", "f1");
f2 = g.addVertex("f2");
f2.setProperty("type", "farm");
f2.setProperty("uid", "f2");
g.addEdge(t1, a1, "bears");
g.addEdge(t1, a2, "bears");
g.addEdge(t2, a3, "bears");
g.addEdge(f1, t1, "has");
g.addEdge(f2, t2, "has");
Run Code Online (Sandbox Code Playgroud)
我想遍历图表来报告每个苹果,并在其中包含农场 ID。我尝试过这样的事情:
g.V.has("type", "apple").copySplit(_().in("bears").in("has").map("uid"),
_().map()).fairMerge
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:
==>{uid=f1}
==>{type=apple}
==>{uid=f1}
==>{type=apple}
==>{uid=f2}
==>{type=apple}
Run Code Online (Sandbox Code Playgroud)
我想要的是:
==>{uid=f1, type=apple} …Run Code Online (Sandbox Code Playgroud) 在我从TP2 0.54 - > TP3 titan 1.0/Tinkerpop 3.01迁移期间
我正在尝试构建gremlin查询,该查询使用谓词文本在不同顶点索引的属性之间进行"逻辑或运算"
就像是:
-------------------预先定义的ES指数:------------------
tg = TitanFactory.open('../conf/titan-cassandra-es.properties')
tm = tg.openManagement();
g=tg.traversal();
PropertyKey pNodeType = createPropertyKey(tm, "nodeType", String.class, Cardinality.SINGLE);
PropertyKey userContent = createPropertyKey(tm, "storyContent", String.class, Cardinality.SINGLE);
PropertyKey storyContent = createPropertyKey(tm, "userContent", String.class, Cardinality.SINGLE);
//"storyContent" : is elasticsearch backend index - mixed
tm.buildIndex(indexName, Vertex.class).addKey(storyContent, Mapping.TEXTSTRING.asParameter()).ib.addKey(pNodeType, Mapping.TEXTSTRING.asParameter()).buildMixedIndex("search");
//"userContent" : is elasticsearch backend index - mixed
tm.buildIndex(indexName, Vertex.class).addKey(userContent, Mapping.TEXTSTRING.asParameter()).ib.addKey(pNodeType, Mapping.TEXTSTRING.asParameter()).buildMixedIndex("search");
v1= g.addVertex()
v1.property("nodeType","USER")
v1.property("userContent" , "dccsdsadas")
v2= g.addVertex()
v2.property("nodeType","STORY")
v2.property("storyContent" , "abdsds")
v3= g.addVertex()
v3.property("nodeType","STORY")
v3.property("storyContent" , …Run Code Online (Sandbox Code Playgroud) 我正在计算我存储分层数据的选项(父子关系).
由于树是图形而森林(树木)在技术上也是图形,因此图形数据库似乎比RDBMS esp更适合该法案.因为我关心优化读写操作.
我的用例是:
由于我的所有资源都在AWS中,因此能够使用Titan DynamoDB后端似乎是理想的选择.
我真正的问题在于了解如何扩展和管理Titan.
我需要一个gremlin服务器实例吗?换句话说,为了对Titan做任何事情,我是否需要使用gremlin服务器站起EC2实例?或者我可以使用Java Titan API直接处理图形数据吗?
我是否需要明确地对数据进行分片?换句话说,随着使用量的增加以及数据量和操作量的增加,我是否需要站起来使用更多的gremlin服务器?当服务器数量向外扩展时,我是否需要从客户端跨这些服务器进行一致性哈希才能执行操作?
我是否需要设置弹性搜索集群才能从任何节点开始遍历?或者是使用顶点来表示对象和边缘以表示此时足够的父关系?我可以保证顶点ID在用户空间中是唯一的; 我也可以用唯一的用户ID装饰每个顶点.在那种情况下,我需要弹性搜索吗?我希望弹性搜索是针对自由格式或更复杂的搜索类型查询而不是针对确切的查询!
随着前端数量的增加,每个前端可以打开图形(跨用户空间的单个图形)吗?如果每个用户的图形,然后由于前端没有亲和力,可以为每个用户打开相同的图形; 这可以吗?
我无法找到任何关于此的文档.谢谢!
我已经死了泰坦新手,当我开始研究它时,我感到很困惑,因为它有很多新东西,如Gremlin,tinkerpop和rexter等.
我想要的是java中的一个例子,它使用Titan和Cassandra作为后端.我想创建一个图形,存储在cassandra中,检索它并遍历它.一个非常简单的也会很有帮助.
我在java中运行了一个基本的例子.
BaseConfiguration baseConfiguration = new BaseConfiguration();
baseConfiguration.setProperty("storage.backend", "cassandra");
baseConfiguration.setProperty("storage.hostname", "192.168.3.82");
TitanGraph titanGraph = TitanFactory.open(baseConfiguration);
Vertex rash = titanGraph.addVertex(null);
rash.setProperty("userId", 1);
rash.setProperty("username", "rash");
rash.setProperty("firstName", "Rahul");
rash.setProperty("lastName", "Chaudhary");
rash.setProperty("birthday", 101);
Vertex honey = titanGraph.addVertex(null);
honey.setProperty("userId", 2);
honey.setProperty("username", "honey");
honey.setProperty("firstName", "Honey");
honey.setProperty("lastName", "Anant");
honey.setProperty("birthday", 201);
Edge frnd = titanGraph.addEdge(null, rash, honey, "FRIEND");
frnd.setProperty("since", 2011);
titanGraph.shutdown();
Run Code Online (Sandbox Code Playgroud)
所以当我运行它时,我观察了cassandra日志并创建了一个名为titan的键空间和下表:
我不知道这些表的用途以及它们如何存储数据.
运行程序后,会创建一个包含2个顶点和它们之间边缘的图形.我查询了表格,并在每个表格中找到了一些十六进制值.
我有以下问题:
如何将图存储在cassandra中?
现在我有这个图表说'x'存储在cassandra中.假设我创建了另一个图形'y'并存储它.如何检索和遍历任何特定图表?因为在正常的cql查询中,您知道要查询的表和列.我将如何分别识别'x'和'y'.
任何人都可以帮助在java中发布示例代码,以使用一些示例csv数据创建图形.存储在Cassandra和一些相同图形的遍历示例.会有很多帮助,因为没有可用的例子是可以理解的.
我注意到由于其100MB的分区限制,关系不能正确地存储在C*中,在这种情况下非规范化没有帮助,并且C*每个分区可以有2B个单元这一事实,因为只有Longs的那些2B单元有16GB ?!?!?不跨越100MB分区大小限制吗?
这是我一般不理解的,C*宣称它可以有2B单元但是分区大小不应该超过100MB ???
这样做的惯用方法是什么?人们说这是TitanDB或JanusDB的理想用例,可以很好地扩展数十亿个节点和边缘.这些使用C*的数据库如何在这个数据模型下使用?
我的用例在这里描述https://groups.google.com/forum/#!topic/janusgraph-users/kF2amGxBDCM
请注意,我完全清楚这个问题的答案是"使用额外的分区键来减少分区大小"但老实说,我们中谁有这种可能性?特别是在建模关系中...我对在特定时间内发生的关系不感兴趣......
我浏览了JanusGraph和Titan文档,它不断在管理对象上调用其他函数,如"makeEdgeLabel"等,但是我无法理解Management类的确切用法,因为根据我的理解,我可以在"JanusGraph"上调用相同的函数同样.
我想了解JanusGraph中所谓的"管理系统"的确切含义.
使用以下命令使用索引以获得更好的性能来查询titan db中的节点.
TitanManagement mgmt = graph.openManagement();
PropertyKey buyer = mgmt.makePropertyKey("buyer").dataType(String.class).cardinality(Cardinality.SINGLE).make();
TitanGraphIndex buyeri = mgmt.buildIndex("buyer", Vertex.class).addKey(buyer).buildCompositeIndex();
mgmt.setConsistency(buyeri, ConsistencyModifier.LOCK);
g.V().has("buyer","buyer", "buyer10").out("order_is").values("order").fill(list);
Run Code Online (Sandbox Code Playgroud)
使用titan 1.0.0,gremlin查询语言,在运行此查询时会抛出错误:
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:293)
at java.lang.Thread.run(Thread.java:745)Caused by: com.thinkaurelius.titan.core.SchemaViolationException: Adding this property for key [~T$SchemaName] and value [rtbuyer] violates a uniqueness constraint [SystemIndex#~T$SchemaName]
at com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx.addProperty(StandardTitanTx.java:780)
at com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx.addProperty(StandardTitanTx.java:706)
at com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx.makeSchemaVertex(StandardTitanTx.java:836)
at com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx.makePropertyKey(StandardTitanTx.java:856)
at com.thinkaurelius.titan.graphdb.types.StandardPropertyKeyMaker.make(StandardPropertyKeyMaker.java:86)
at pluradj.titan.tinkerpop3.example.JavaExample2.main(JavaExample2.java:56)
Run Code Online (Sandbox Code Playgroud)
更新如下所述@jason Plurad回答
我用过
PropertyKey buyer = (!mgmt.containsPropertyKey("buyer")) ?
mgmt.makePropertyKey("buyer").dataType(String.class).cardinality(Cardinality.SINGLE).make() :
mgmt.getPropertyKey("buyer");
TitanGraphIndex buyeri = mgmt.getGraphIndex("buyeri");
if (buyeri …Run Code Online (Sandbox Code Playgroud) titan ×10
gremlin ×5
graph ×3
tinkerpop ×3
cassandra ×2
janusgraph ×2
bigdata ×1
java ×1
rexster ×1
tinkerpop3 ×1