我坚持使用我的TitanDB,Django1.8和Mogwai0.7.7软件包.我在localhost dev机器上有Graph数据库titan/cassandra,在rexster gremlin web界面中创建错误查询后,我的Django Object Graph Mapper mogwai停止工作.Titan仍在工作,数据存在,但Django停止使用它.
文件"/Users/x/envs/graph/lib/python2.7/site-packages/rexpro/connectors/base.py",第281行,在close_transaction中引发exceptions.RexProScriptException("事务未打开")RexProScriptException:transaction不开放.
谷歌搜索后我发现这个bitbucked修复 但我不知道如何应用它.也许lib更新与pip ....请帮助.
我在Gremlin shell上花了一个星期试图编写一个查询来获取所有传入和传出的顶点,包括它们的边缘和方向.我尝试了一切.
g.V("name","testname").bothE.as('both').select().back('both').bothV.as('bothV').select(){it.map()}
Run Code Online (Sandbox Code Playgroud)
我需要的输出是(只是示例结构):
[V { '名称': "测试名"}] ___ [啉{edge_name: "nameofincomingedge"}] ____ [V {名称: 'nameofconnectedvertex']
[V { '名称': "测试名"}] ___ [欧特{edge_name: "nameofoutgoingedge"}] ____ [V {名称: 'nameofconnectedvertex']
所以我只想得到1)具有确切名称的所有顶点,每个顶点的边缘(包括inE或outE类型)和连接的Vertex.理想情况下,我想得到他们的map()所以我得到完整的对象属性.我不关心输出风格,我只需要所有信息,所以我可以用它来操纵它.我需要这个训练我的Gremlin,但欢迎Neo4j的例子.谢谢!
在DataStax收购Aurelius之后,由于Titan 1.0.0于2015年9月发布并且此后收到的提交很少,我想知道在生产中使用TitanDB是否安全.任何人都可以请一些见解?
我正在尝试使用Java中的Tinkerpop3作为客户端从已经运行的TitanDB服务器获取Graph对象(我不想创建服务器).
换句话说,我正在尝试实现这样的功能:public Graph obtainGraph(String serverIp,String graphName);
我试图像这样做: AWS Lambda + Tinkerpop/Gremlin + TitanDB on EC2 + AWS DynamoDB in cloud
但据我了解,TitanFactory.open()启动服务器,我不想这样做 - 我只想连接到现有的服务器.
文档以及Internet中的大多数材料使用内存中的图表作为示例,我找不到一个,它显示了如何:
创建新图并将其保存在远程服务器上
从远程服务器检索现有图
更新这样的远程Graph,所以在添加/删除边缘后提交更改
删除整个图表
我不想通过Gremlin语言(字符串)来做上述事情,而是通过Java API(TinkerpopBlueprins).这个人正在接近我需要的东西: 在Java中将顶点添加到TitanDB Graph 但是,他的方法已经将Graph作为参数.
我在Internet的很多地方都看到过,GraphFactory.open()获取了属性文件的路径,但是我还没有看到这种文件内容的例子,尤其是TitanDB的相关数据,所以我更喜欢使用Configuration对象.
图形图形= GraphFactory.open(new BaseConfiguration())
说,没有gremlin.graph属性.
配置配置= new BaseConfiguration(); configuration.setProperty("gremlin.graph","titan");
图形图形= GraphFactory.open(配置);
说GraphFactory无法找到[titan] - 确保jar在类路径中
是否有任何静态类型的构建器,其中包含枚举和常量,而不是Map,它将告诉我,我必须提供哪些属性以及它们的类型是什么?是否有任何开源项目,使用Tinkerpop3作为客户端连接到远程TitanDB服务器,我可以用作例子吗?
我希望看到完整的工作示例,而不是内存与外部配置.
我有一个足够简单的任务来完成:设置特定边缘属性的权重.以此场景为例:
我想做的是更新值weight.
其他要求
typeJoey和Pizza之间不能存在多个"吃" 的"吃"的边缘.我有以下信息:
我想我需要做类似以下的事情:
votes_for为type"吃"的所有外围边缘(应该最多1个)和标记为"吃饭"的具有name"披萨" 的外出顶点.weight边缘的值.这就是我在代码中乱搞的东西:
//vertex is Joey in this case
g.V(vertex.id())
.outE("votes_for")
.has("type", "eat")
//... how do I filter by .outV so that I can check for "pizza"?
.property(Cardinality.single, "weight", 0.99);
//... what do I …Run Code Online (Sandbox Code Playgroud) 我正在考虑使用TitanDB.它似乎真的符合我们的需求(我们可以完全控制存储引擎,我们可以在DynamoDB之上构建它).但是我担心这个项目不再维护了,并且创建了一个fork,JanusGraph继续这个项目.使用TitanDB仍然安全吗?我应该使用JanusGraph(它是否已准备好进行生产,是否可以使用DynamoDB在AWS上部署)?
关于这两个工具的集成,我有几个问题.不是技术问题,也不是如何设置(我将在稍后讨论我的乐趣),但更多关于项目的进程和方向,看看JanusGraph还很年轻.
我正在开始一个新项目,并且已经决定使用Cassandra进行存储,并使用顶部声音图表对我很有吸引力.
在我走这条路之前,我想提前知道几件事.
JanusGraph非常年轻,它从大约一年前Titan离开的地方开始.那里存在差距,但是作为Linux基金会的一部分以及所有大型企业支持它的事实听起来很有希望.在这一点上假设JanusGraph会留在这里是否安全?依靠Janus作为启动项目是否安全?并且遵循当然的发展并尽可能地更新.
卡桑德拉.Titan/JanusGraph使用thrift api与Cassandra 2.1.9集成,最终将在Cassandra 4中弃用.我知道目前正在完成工作以使janus与Cassandra 3一起工作并最终使用CQL.从现有的janus和Cassandra 2.1.9开始并稍后处理迁移是否安全?创业公司处理这项任务是否是一项艰巨的任务?
生产就绪JanusGraph.(这个问题涉及到它早期阶段的任何软件以及它是否可以安全地启动使用).据我所知,JanusGraph需要一段时间才能完成生产并赶上其集成的其他工具(尽管我们说的工作正在完成:)).再次开始使用Janus并遵循开发并最终迁移到生产就绪版本是否安全?JanusGraph的整体路线图是什么?
我一般关注的是这些工具的组合是否是启动的安全选择.整个堆栈对我们来说已经是新的了,我们很高兴尝试学习,但我们将很快达到迁移期.这是你会做/推荐的事情吗?这是自杀吗?
请分享您的想法,并记住它不一定是关于我正在谈论的堆栈.它可能是任何初创公司在其早期阶段处理任何类型的软件.
干杯
我正在使用Titan Rexster(titan-server-0.4.4.zip)和Elasticsearch后端在Ubuntu 12.4服务器上运行推荐系统.为了连接到Rexster Server,我使用Bulbflow库进行python.
Beta似乎运行良好3周,但随着负载"增加"(只有几个用户~10),Rexster服务器停止响应.我不知道我的rexster配置是错误的还是我没有正确使用Bulbflow库.
这是我的rexster-cassandra-es.xml:
<?xml version="1.0" encoding="UTF-8"?>
<rexster>
<http>
<server-port>8182</server-port>
<server-host>0.0.0.0</server-host>
<base-uri>http://MY_IP</base-uri>
<web-root>public</web-root>
<character-set>UTF-8</character-set>
<enable-jmx>false</enable-jmx>
<enable-doghouse>true</enable-doghouse>
<max-post-size>2097152</max-post-size>
<max-header-size>8192</max-header-size>
<upload-timeout-millis>30000</upload-timeout-millis>
<thread-pool>
<worker>
<core-size>20</core-size>
<max-size>40</max-size>
</worker>
<kernal>
<core-size>10</core-size>
<max-size>20</max-size>
</kernal>
</thread-pool>
<io-strategy>leader-follower</io-strategy>
</http>
<rexpro>
<server-port>8184</server-port>
<server-host>0.0.0.0</server-host>
<session-max-idle>1790000</session-max-idle>
<session-check-interval>3000000</session-check-interval>
<connection-max-idle>180000</connection-max-idle>
<connection-check-interval>3000000</connection-check-interval>
<enable-jmx>false</enable-jmx>
<thread-pool>
<worker>
<core-size>8</core-size>
<max-size>8</max-size>
</worker>
<kernal>
<core-size>4</core-size>
<max-size>4</max-size>
</kernal>
</thread-pool>
<io-strategy>leader-follower</io-strategy>
</rexpro>
<shutdown-port>8183</shutdown-port>
<shutdown-host>127.0.0.1</shutdown-host>
<script-engines>
<script-engine>
<name>gremlin-groovy</name>
<reset-threshold>-1</reset-threshold>
<imports>com.tinkerpop.gremlin.*,com.tinkerpop.gremlin.java.*,com.tinkerpop.gremlin.pipes.filter.*,com.tinkerpop.gremlin.pipes.sideeffect.*,com.tinkerpop.gremlin.pipes.transform.*,com.tinkerpop.blueprints.*,com.tinkerpop.blueprints.impls.*,com.tinkerpop.blueprints.impls.tg.*,com.tinkerpop.blueprints.impls.neo4j.*,com.tinkerpop.blueprints.impls.neo4j.batch.*,com.tinkerpop.blueprints.impls.orient.*,com.tinkerpop.blueprints.impls.orient.batch.*,com.tinkerpop.blueprints.impls.dex.*,com.tinkerpop.blueprints.impls.rexster.*,com.tinkerpop.blueprints.impls.sail.*,com.tinkerpop.blueprints.impls.sail.impls.*,com.tinkerpop.blueprints.util.*,com.tinkerpop.blueprints.util.io.*,com.tinkerpop.blueprints.util.io.gml.*,com.tinkerpop.blueprints.util.io.graphml.*,com.tinkerpop.blueprints.util.io.graphson.*,com.tinkerpop.blueprints.util.wrappers.*,com.tinkerpop.blueprints.util.wrappers.batch.*,com.tinkerpop.blueprints.util.wrappers.batch.cache.*,com.tinkerpop.blueprints.util.wrappers.event.*,com.tinkerpop.blueprints.util.wrappers.event.listener.*,com.tinkerpop.blueprints.util.wrappers.id.*,com.tinkerpop.blueprints.util.wrappers.partition.*,com.tinkerpop.blueprints.util.wrappers.readonly.*,com.tinkerpop.blueprints.oupls.sail.*,com.tinkerpop.blueprints.oupls.sail.pg.*,com.tinkerpop.blueprints.oupls.jung.*,com.tinkerpop.pipes.*,com.tinkerpop.pipes.branch.*,com.tinkerpop.pipes.filter.*,com.tinkerpop.pipes.sideeffect.*,com.tinkerpop.pipes.transform.*,com.tinkerpop.pipes.util.*,com.tinkerpop.pipes.util.iterators.*,com.tinkerpop.pipes.util.structures.*,org.apache.commons.configuration.*,com.thinkaurelius.titan.core.*,com.thinkaurelius.titan.core.attribute.*,com.thinkaurelius.titan.core.util.*,com.thinkaurelius.titan.example.*,org.apache.commons.configuration.*,com.tinkerpop.gremlin.Tokens.T,com.tinkerpop.gremlin.groovy.*</imports>
<static-imports>com.tinkerpop.blueprints.Direction.*,com.tinkerpop.blueprints.TransactionalGraph$Conclusion.*,com.tinkerpop.blueprints.Compare.*,com.thinkaurelius.titan.core.attribute.Geo.*,com.thinkaurelius.titan.core.attribute.Text.*,com.thinkaurelius.titan.core.TypeMaker$UniquenessConsistency.*,com.tinkerpop.blueprints.Query$Compare.*</static-imports>
</script-engine>
</script-engines>
<security>
<authentication>
<type>none</type>
<configuration>
<users>
<user>
<username>rexster</username>
<password>rexster</password>
</user>
</users>
</configuration>
</authentication>
</security>
<metrics>
<reporter> …Run Code Online (Sandbox Code Playgroud) 我正在阅读TinkerPop3 文档
我很困惑的是我找不到任何解释next().
例如,w/next()或w/o next()返回相同的椎骨
gremlin> g.V().has('name', 'marko')
==>v[1]
gremlin> g.V().has('name', 'marko').next()
==>v[1]
Run Code Online (Sandbox Code Playgroud)
但是,班级名称彼此不同.
gremlin> g.V().has('name', 'marko').getClass()
==>class org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal
gremlin> g.V().has('name', 'marko').next().getClass()
==>class org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerVertex
Run Code Online (Sandbox Code Playgroud)
没有'next()',指定的变量没有值.
gremlin> marko = g.V().has('name', 'marko')
==>v[1]
gremlin> marko
Run Code Online (Sandbox Code Playgroud)
甚至,与clockWithResult()输出完全不同.
gremlin> clockWithResult(1){g.V().both().barrier().both().barrier().both().barrier().count().next()}
==>1.079524
==>72
gremlin> clockWithResult(1){g.V().both().barrier().both().barrier().both().barrier().count()}
==>0.11863599999999999
==>[GraphStep([],vertex), VertexStep(BOTH,vertex), NoOpBarrierStep(2147483647), VertexStep(BOTH,vertex), NoOpBarrierStep(2147483647), VertexStep(BOTH,vertex), NoOpBarrierStep(2147483647), CountGlobalStep]
Run Code Online (Sandbox Code Playgroud)
或者这个例子:
gremlin> g.V(1).out('knows').values('name').fold()
==>[vadas, josh]
gremlin> g.V(1).out('knows').values('name').fold().next()
==>vadas
==>josh
Run Code Online (Sandbox Code Playgroud)
在手册中,还有许多其他例子让我感到困惑.
我希望马尔科和他的朋友能帮助我.
我有一组用户名(例如['abc','def','ghi'])要添加到图表中的"用户"标签下.
现在我首先要检查用户名是否已经存在(g.V().hasLabel('user').has('username','def')),然后仅添加"用户"标签下用户名属性不匹配的用户名.
此外,这可以在单个gremlin查询或groovy脚本中完成吗?
我正在使用titan graph数据库,tinkerpop3和gremlin REST服务器.