标签: janusgraph

启动 janusgraph 的最低系统要求是什么

我刚刚启动 JanusGraph,我的总 RAM 使用量超过 5GB,没有触发任何查询。我有以下依赖服务正在运行

  1. JanusGraph
  2. GremlinServer(通过 JanusGraph)
  3. 卡桑德拉(通过 JanusGraph)
  4. Elasticsearch(通过 JanusGraph)

在此处输入图片说明

有一些java实例正在运行 在此处输入图片说明

我试图找出 janusgraph 的最低系统要求,但我无法在其文档中找到它。任何人都有相同的链接?或者知道最低系统要求是多少?

是否还有任何配置更改以使其消耗更少的 RAM?

elasticsearch cassandra-2.0 gremlin-server janusgraph

5
推荐指数
0
解决办法
640
查看次数

使用特定模型通过 Tinkerpop 将(数百万行)数据导入 Janusgraph 的最佳方法

刚开始使用 Tinkerpop 和 Janusgraph,我正试图根据文档弄清楚这一点。

  • 我有三个数据集,每个数据集包含大约 2000 万行(csv 文件)
  • 有一个特定的模型,其中变量和行需要连接,例如什么是顶点,什么是标签,什么是边等。
  • 在图表中包含所有内容后,我当然想使用一些基本的 Gremlin 来查看模型的工作情况。

但首先我需要一种将数据导入 Janusgraph 的方法。

可能存在用于此的脚本。但除此之外,它是否可能用python编写,打开一个csv文件,获取变量X的每一行,并将其添加为顶点/边/等。……?还是我完全误解了 Janusgraph/Tinkerpop?

提前感谢您的任何帮助。

编辑:

假设我有几个文件,每个文件包含几百万行,代表人,还有几个变量,代表不同的指标。第一个示例可能如下所示:

             metric_1    metric_2    metric_3    ..

person_1        a           e           i
person_2        b           f           j
person_3        c           g           k
person_4        d           h           l
..        
Run Code Online (Sandbox Code Playgroud)

我是否应该将其转换为具有首先仅由值 [a,..., l] 组成的节点的文件。(以及后来可能更精细的属性集)

然后 [a,..., l] 被索引了吗?

在“现代”图形这里似乎有一个索引(号码1,...,12对所有的节点和边,独立于它们的重叠标签/类别的),例如应在每次测量单独索引,然后连接至一个给定的person_x他们属于哪个?

为这些可能直截了当的问题道歉,但我对此很陌生。

python gremlin tinkerpop tinkerpop3 janusgraph

5
推荐指数
2
解决办法
2684
查看次数

Tinkerpop & Python - 通过 gremlin 设置数组属性

我将 JanusGraph 与标准 python gremlin 绑定一起使用,我想float[]在顶点/边上设置一个属性。但是,PythonTinkerpop 驱动程序似乎无法做到这一点。

例如,下面是一个直接在 Groovy 中运行的脚本示例:

val = [1.2, 3.4, 5.6]
_client.submit("g.V(4200).property('a', %s as float[])" % val).all().result()
Run Code Online (Sandbox Code Playgroud)

这是使用 gremlin python 库时失败的代码:

val = [1.2, 3.4, 5.6]
g.V(4200).property('a', val).next()
Run Code Online (Sandbox Code Playgroud)

错误在哪里:

GremlinServerError: 500: Property value [[1.2, 3.4, 5.6]] is of type class java.util.ArrayList is not supported
Run Code Online (Sandbox Code Playgroud)

该错误可能是因为请求是由 python 驱动程序在 GraphSON 中序列化的 - 并且 GraphSON 支持具有不同类型元素的数组,因此场景背后的 Java 代码将值读取为 a java.util.ArrayList,而实际上无法转换为float[].

问题是 - 除了编写显式查询字符串之外,是否有任何理智的方法可以做到这一点?

python gremlin tinkerpop tinkerpop3 janusgraph

5
推荐指数
1
解决办法
991
查看次数

如何处理具有大量边的顶点?

在我们的图中,有很多顶点的输出边超过 100k。我想知道处理由此产生的所有情况的方法是什么。

假设我们group_1在图中定义了一个。group_1有 100k members。我们有一些从member_x顶点开始的遍历并计算一些东西。这些遍历非常快,每次都在大约 2 秒内结束。

但是时代变了,现在我们需要将单个小遍历的所有结果汇总为一个数字。遍历必须包含来自group_1's 成员的所有结果。

最初,我们的方法是创建其发射一束遍历members_x通过使用skiplimit,然后,在应用层上采用并行处理,计数的我们的东西的总和。但是,这种方法几乎没有问题:

  • g.V().has('group',y).out('member_of').skip(0).limit(10)- 根据文档,这种遍历每次可以返回不同的结果。所以以这种方式创建包是不正确的
  • g.V().has('group',y).out('member_of').skip(100_000).limit(10) 花费太长时间,因为正如我们发现的那样,数据库仍然需要访问 100k 个顶点

因此,我们的下一个方法是存储一个遍历,该遍历会发出束,members然后在单独的线程中执行并行遍历,这些遍历对先前获取的成员进行计数:

while(is_not_the_end) {
   List<Members> members = g.V().has('group',y).out('member_of').next(100)`
   addMembersToExecutorThread(members) // done in async way
}
Run Code Online (Sandbox Code Playgroud)

那么,当你遇到这样的场景时,有什么方法呢?基本上,如果可以找到一种方法来快速获取某个顶点的所有祖先,我们就可以解决该问题。在我们的例子中,这将是一个group_1. 但是仅仅通过使用g.V().has('group',y).out('member_of').properties('members_id').

有没有办法解决这个问题?或者我们应该尝试在 GraphComputer 上执行这样的查询?

gremlin tinkerpop tinkerpop3 gremlin-server janusgraph

5
推荐指数
1
解决办法
412
查看次数

无法为状态为 [INSTALLED] 的索引调用更新操作 [REINDEX]

我正在关注这个博客:https : //developer.ibm.com/dwblog/2018/janusgraph-composite-mixed-indexes-traversals/

代码

gremlin> graph.tx().rollback()
==>null
gremlin> mgmt = graph.openManagement()
==>org.janusgraph.graphdb.database.management.ManagementSystem@19472803
gremlin> code = mgmt.getPropertyKey('code')
==>code
gremlin> mgmt.buildIndex('byCodeComposite', Vertex.class).addKey(code).buildCompositeIndex()
==>byCodeComposite
gremlin> mgmt.commit()
==>null
gremlin> mgmt.awaitGraphIndexStatus(graph, 'byCodeComposite').call()
==>GraphIndexStatusReport[success=False, indexName='byCodeComposite', targetStatus=[REGISTERED], notConverged={}, converged={code=REGISTERED}, elapsed=PT0.012S]
Run Code Online (Sandbox Code Playgroud)

错误:

But i am getting this: ==>GraphIndexStatusReport[success=false, indexName='byCodeComposite', targetStatus=[REGISTERED], notConverged={code=INSTALLED}, converged={}, elapsed=PT1M0.413S]

版本:Cassandra:3.11.3 elasticsearch:6.5.4 janusgraph:0.3.1-hadoop2

我正在尝试解决这个问题,但它对我不起作用。

graph-databases janusgraph

5
推荐指数
1
解决办法
1380
查看次数

通过嵌入式使用远程 janusgraph 连接有什么优点和缺点?

我在我的 Java 后端使用嵌入式 janusgraph 我的代码取决于从 graph = JanusGraphFactory.open(conf)

AFAIK 这直接连接到 Cassandra 和弹性搜索,并在我的后端应用程序 JVM 中运行 janusgraph 处理器。但是如果我想扩展 janusgraph,我需要在集群上运行单独的 janusgraph 服务器,并且需要作为客户端从我的后端连接到这些服务器。

根据github上的远程 janusgraph 示例,这是通过实例化一个 EmptyGraph 来完成的,该 EmptyGraphgraph = EmptyGraph.instance();不是 JanusGraph 的实例,而是 org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;.

我可以从上面的示例中了解到,我只能通过将 gremlin 查询提交给 janusgraph 服务器来使用它们,但是除非将代码作为字符串提交给服​​务器,否则我将无法直接使用管理 API。

最后,我可以理解,单独运行 janusgraph 服务器对可扩展性更好,但我将无法在我的代码中直接访问 janusgraph api,所以我想知道我是否理解一些我想念的 内容以及远程部署方法的优缺点和嵌入式方法相比我会失去什么?

编辑:

根据这个答案 纠正它,如果错了

连接到远程 gremlin 服务器的优缺点

优点

  • 服务器有更多的控制权,所有的查询都是集中的。
  • 由于每个人都通过远程 gremlin 服务器运行遍历/查询,因此所有内容都受到事务保护。默认情况下,远程 gremlin 服务器在事务中运行您的遍历/查询。
  • 中央战略管理
  • 中央模式管理

缺点

  • 很难进行手动事务管理
  • 您必须使用 groovy 脚本作为字符串并将其发送到删除(集群提交)以执行代码的事务。

java tinkerpop gremlin-server janusgraph

5
推荐指数
1
解决办法
667
查看次数

Web 应用程序中的 Gremlin Python

我有一个 python flask web 应用程序,它使用gremlin_python. 一个基本问题是初始化图遍历对象的正确方法。

  1. 我可以初始化我的遍历g = traversal().withRemote(DriverRemoteConnection(...)g跨请求保留遍历变量吗?(所有请求都针对同一个图表。我尝试了这个并开始tornado.iostream.StreamClosedError断断续续。
  2. 第二个选项是为每个请求创建一个遍历。我不太了解 gremlin python 架构;每个请求执行此操作是否有大量开销?

谢谢你

python gremlin janusgraph gremlinpython

5
推荐指数
1
解决办法
452
查看次数

已超过最大帧长 65536

我有一个设置,我使用 gremlin-core 库来查询远程 Janusgraph 服务器。数据大小目前适中,但将来会增加。

几天前,我在我的客户端上看到“已超出最大帧长度 65536”错误。我的服务器 yaml 文件中 maxContentLength 参数的值设置为默认值 (65536)。我挖掘了代码并意识到我正在发送大量顶点 id 作为查询参数来获取顶点。我将一个批次应用于每个批次 100 个顶点 id 的数组,它解决了这个问题。

一段时间后,我开始在客户端日志中再次看到此错误。这一次,没有向服务器发送大量参数的查询。我看到了一个关于这个主题的建议解决方案,它说我还需要在客户端设置 maxContentLength 参数。我这样做了,问题得到了解决。但是,它提出了一些关于配置参数、它们的值以及它们对查询请求/响应大小的影响的问题。

  1. maxContentLength 参数是否与查询的响应大小有关?如果是,我如何根据我的数据库大小计算此参数的值?
  2. 是否有任何其他参数指示请求中查询参数的最大大小?如果是,它们是哪些以及它们与查询参数的大小有何关系?
  3. 是否有任何参数决定查询响应的大小?如果是,它们是哪些以及它们与查询响应的大小有何关系?

这些问题的答案对于我制作一个不会在数据冲击下崩溃的强大服务器至关重要。

提前致谢

安雅

gremlin-server janusgraph

5
推荐指数
1
解决办法
1551
查看次数

在 gremlin 中的示例方法中传递动态值不起作用

我是小精灵的新手。我试图根据某些条件获得一些随机顶点。但是,如果我使用带有一些数学计算的示例方法,则它不起作用。但是如果我给出整数值,它就可以正常工作。

以下查询工作正常:

g.V().hasLabel('Person').sample(1)
Run Code Online (Sandbox Code Playgroud)

以下查询不起作用:

g.V().hasLabel('Person').sample(math('4/2'))
Run Code Online (Sandbox Code Playgroud)

实际上,根据人数,我应该在样本方法中执行一些数学计算。提前致谢

graph-databases gremlin janusgraph

5
推荐指数
2
解决办法
170
查看次数

未找到 org.janusgraph.graphdb.relations.RelationIdentifier 类型的序列化程序

从 java 客户端检索边时,JanusGraph v0.5.3 服务器日志中显示以下错误

12277786 [gremlin-server-exec-7] WARN  org.apache.tinkerpop.gremlin.server.op.AbstractEvalOpProcessor  - The result [[e[ofncw-iyo-4avp-374][24576-hasTag->4144]]] in the request 098dc551-6558-497a-a066-b293edd29833 could not be serialized and returned.
org.apache.tinkerpop.gremlin.driver.ser.SerializationException: java.io.IOException: Serializer for type org.janusgraph.graphdb.relations.RelationIdentifier not found
    at org.apache.tinkerpop.gremlin.driver.ser.binary.ResponseMessageSerializer.writeValue(ResponseMessageSerializer.java:86)
    at org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1.serializeResponseAsBinary(GraphBinaryMessageSerializerV1.java:143)
    at org.apache.tinkerpop.gremlin.server.op.AbstractOpProcessor.makeFrame(AbstractOpProcessor.java:335)
    at org.apache.tinkerpop.gremlin.server.op.traversal.TraversalOpProcessor.handleIterator(TraversalOpProcessor.java:580)
    at org.apache.tinkerpop.gremlin.server.op.traversal.TraversalOpProcessor.lambda$iterateBytecodeTraversal$4(TraversalOpProcessor.java:411)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: Serializer for type org.janusgraph.graphdb.relations.RelationIdentifier not found
    at org.apache.tinkerpop.gremlin.structure.io.binary.TypeSerializerRegistry.validateInstance(TypeSerializerRegistry.java:392)
    at org.apache.tinkerpop.gremlin.structure.io.binary.TypeSerializerRegistry.getSerializer(TypeSerializerRegistry.java:361)
    at org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter.write(GraphBinaryWriter.java:90)
    at org.apache.tinkerpop.gremlin.structure.io.binary.types.EdgeSerializer.writeValue(EdgeSerializer.java:63)
    at org.apache.tinkerpop.gremlin.structure.io.binary.types.EdgeSerializer.writeValue(EdgeSerializer.java:34)
    at org.apache.tinkerpop.gremlin.structure.io.binary.types.SimpleTypeSerializer.writeValue(SimpleTypeSerializer.java:91)
    at org.apache.tinkerpop.gremlin.structure.io.binary.types.SimpleTypeSerializer.write(SimpleTypeSerializer.java:73)
    at org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter.write(GraphBinaryWriter.java:112)
    at org.apache.tinkerpop.gremlin.structure.io.binary.types.TraverserSerializer.writeValue(TraverserSerializer.java:49) …
Run Code Online (Sandbox Code Playgroud)

serialization gremlin tinkerpop3 janusgraph

5
推荐指数
1
解决办法
1217
查看次数