问题标签 [gremlin-server]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1628 浏览

node.js - Gremlin 服务器作为具有动态创建数据的 REST API

假设我有以下内容: - 一个能够查询数据库并接收(可能很大)JSON 的 node.js 服务器 - 一个 gremlin 服务器(配置有 gremlin-server-rest-modern.yaml 但也许必须有一些东西更多在那里)

我的问题是:有没有一种方法可以动态地以编程方式添加一个新的图表以供服务器提供服务?我希望我的节点服务器查询数据库并将 JSON 响应发送到 gremlin 服务器;在那里,响应将被转换为图表;从节点服务器,用户将能够发送其他查询并接收复杂的响应。我怎样才能做到这一点?

我尝试使用 [1] 但我不确定如何做我想做的事。您如何实际发送多个(链接的)命令,例如迷你脚本?我知道如何使用控制台,但不使用服务器(作为 REST 服务),因为没有公开的 API。你能给我一个建议或一些例子吗?谢谢!

阿德里安

[1] https://github.com/jbmusso/gremlin-javascript

编辑:我设法用一些简单的命令向服务器发送了一条 POST 消息。如果我发送一个包含所有命令(图形创建和查询)的 POST,它就可以工作。但是,对于多个 POST,不会保存上下文。首先,我发送一个包含内容的 POST:

然后,我发送另一个 POST

但是,我收到以下错误:

上下文没有保存在 gremlin 服务器上?我必须发送要执行的整个脚本吗?如果我想创建两个图表并稍后查询它们怎么办?

谢谢!

0 投票
1 回答
4182 浏览

javascript - 普通 JSON 转 GraphSON 格式

我有两个问题:

  1. 我实际上可以在哪里找到 GraphSON 文件的基本格式,保证由 gremlin 控制台成功加载?我正在尝试将 JSON(大约 10-20 个字段)转换为另一个可由 gremlin 查询的文件,但我实际上找不到任何有关 graphson 格式保留的字段或我应该如何处理 ID 的相关信息等等。我导出了他们提供的现代图形,它甚至不是一个有效的 JSON(多个 JSON 根元素),而是一个 JSON 列表 [1] 我还看到了 outE、inE 等字段...这些字段是我手动必须做的创造?

  2. 如果我能够创建 JSON,我在哪里告诉服务器在我启动它时将其加载为基本图?在配置文件中还是在脚本中?

谢谢!阿德里安

[1] https://pastebin.com/drwXhg5k

0 投票
0 回答
234 浏览

json - 用于创建图形的 Groovy 脚本 - 使其更快

我的问题是对我在这里提出的问题的跟进=> [1]。在与 stephen mallette 进行了长时间的交谈后,他向我展示了如何构建一个图表,该图表将在我启动服务器时加载。我的最终脚本是这个 [2]。我想做的事?假设我有:

将有一个带有属性“host”的顶点,其值为 google.com (#1)。将有一个属性为“ip”且值为 8.8.8.8 (#2) 的顶点和另一个属性为“random”且值为 25 (#3) 的顶点。另外,我将创建 3 个边。主机 #1 -> ip #2,主机 #1 -> 随机 #3 和 ip #2 -> 随机 #3。对于另一个对象,我不会创建另一个 google.com 顶点,因为它已经存在,但我将创建 ip #4 和随机的 #5 一个。我将创建一个主机 #1 -> ip #4 边缘、主机 #1 -> 随机 #5 和 ip #4 -> 随机 #5。因此,对于具有 k 个字段的对象 O,可能会有 k 个新顶点和 k * (k - 1) / 2 条边。

我的问题是......我的代码可以改进吗?我尝试使用包含 10k 个对象的 JSON,每个对象有 7 个字段,但这需要时间。我怎样才能以更快的方式实现这一目标?不能批量处理数据吗?我听说过索引,但我不知道这意味着什么,也不知道它如何改善一切。

[1]普通 JSON 转 GraphSON 格式

[2] https://pastebin.com/g7qnQdq9

编辑:好的,我硬编码了多个 graph.createIndex(X,Vertex.class) 命令,其中 X = JSON 中的字段名称。它似乎更快,是的。我该如何进一步改进它?我做错了什么,我怎样才能做得更好?我应该尝试以 gremlin 导出图形的格式生成 JSON,而不是这样做吗?我认为实现这种格式非常困难。我找不到合适的文档,我很想找到答案,因为这是一个与工作相关的问题。

编辑 2:顺便说一句,我刚刚尝试了这个 => https://pastebin.com/Uts4KQCH脚本,其中包含 50k 个对象 JSON 和 38k 左右,它的速度减慢了很多,比如从 1.5 秒内的 1000 到 1000在 30 秒内。

0 投票
2 回答
632 浏览

graph-databases - 如何获取 Gremlin 查询的实时流式更新?

当我使用 Firebase、RethinkDB 和类似工具时,我爱上了查询的实时流式更新。现在我正在通过 Gremlin 使用图形数据库,我想知道如何获得这种行为。

作为一个简单的例子,如果我指定了一个 gremlin 查询,例如:

当使用名称属性添加新顶点或在现有顶点上更改名称时,我希望收到更新。

我开始使用 Janusgraph,所以理想的解决方案可以在那里工作——但这​​是一个如此致命的功能,我可能会被其他对 Gremlin 友好的图形数据库所吸引。

谢谢!

0 投票
1 回答
312 浏览

javascript - 多重边缘创建 - Gremlin REST 服务器

我正在使用一个简单的 Gremlin RESTful 服务器,并且在 POST 请求中发送简单的命令。例如,如果我想创建边(以我的特定格式),我有以下模板:

const nodeCommandFormat = "graph.addVertex('%s', '%s', 'evid', '%s');";

使用这样的链接命令发送一个长字符串可以正常工作,创建所有边缘。我的问题是:为什么它不适用于边缘创建?到目前为止,我尝试了这两个命令:

const newEdgeCommandFormat = "g.V().has('evid', '%s').addE('next').to(g.V().has('evid', '%s')).property('count', 1);";

或者

x = g.V().has('evid', ...).next(); y = g.V().has('evid', ...).next(); x.addEdge('next', y, 'count', 1);

但是,如果我像这样连接 100 个命令,则只会创建与最后一个命令对应的边。这是为什么?另一方面,我也收到这样的错误:

  • 使用第一种类型的边创建:[WARN] HttpGremlinEndpointHandler - 无效请求 - 以 500 内部服务器错误响应并且提供的遍历器未映射到值:v[3091]->[TinkerGraphStep(vertex,[evid.eq(6ba0b28797dd79a2ee198d8ff280c4ff) )])]
  • 使用第二种类型的边创建:org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal.next(DefaultTraversal.java:204) 处的 java.util.NoSuchElementException

如何使用 Gremlin REST 服务器实现动态边缘创建?

PS我所有的节点都有“evid”属性(event-id),它是一个对象的md5值。我用它作为我的节点的标识符。

谢谢!

0 投票
1 回答
922 浏览

javascript - 如何使用 gremlin 查询将 json 保存为顶点属性值

我正在尝试将 json 保存为顶点的属性值。以下是我的查询。

但获取运行时执行异常查询无法编译。

那么我要做什么来提交 json 作为顶点值。

0 投票
1 回答
946 浏览

apache-spark - 无法在远程模式下将 SparkGraphComputer 与 Tinkerpop 3.2.3 和 Janusgraph 0.1.1 一起使用

我已经设置了 Tinkerpop Gremlin Server 3.2.3 和 Tinkerpop Gremlin Console 3.2.3,并将 janusgraph 0.1.1 作为插件添加到两者。

我在远程模式下运行以下代码,最终出现下面列出的异常

例外

上面的代码在本地模式下运行良好,任何人都可以帮我解决我在这里遗漏的问题。

0 投票
1 回答
504 浏览

orientdb - 使用gremlin服务器连接Orientdb时“当前线程中没有设置数据库实例”

我正在使用 apache-tinkerpop-gremlin-server-3.2.5 尝试连接到 orientdb-community-tp3-3.0.0m2。

我已经为 gremlin 安装了 orientdb 插件,如下所示: bin/gremlin-server.sh -i com.orientechnologies orientdb-gremlin 3.0.0m2

然后像这样编辑 gremlin-server.yaml 配置:

我用以下内容创建了 orientdb-demodb.properties:

然后我使用 gremlinpython 尝试像这样连接到 gremlin-server:

当我运行 gremlin-server 时,它会启动并连接到 orientdb:

当我运行 python 脚本时,它会出错,并且在 gremlin-server 控制台中出现以下错误:

0 投票
1 回答
1036 浏览

cluster-computing - JanusGraph 集群总是返回没有属性的顶点 (ReferenceVertex)

我对 janusgraph gremlin-server 和 Cluster 客户端有问题。使用 Cluster (gremlin-driver 3.2.3/3.2.5) 检索的顶点仅包含 id 属性、标签和属性始终为空。

这是我的客户端配置。

远程对象.yaml

gremlin 服务器配置:

使用 gremlin-console 的远程查询工作正常(remote.yaml 和 remote-objects.yaml)

使用集群和远程遍历的查询不起作用:

输出:

我做错了什么?

0 投票
0 回答
426 浏览

gremlin - java.io.IOException: Connexion reset by peer - Titan Gremlin 请求获取多个顶点

我正在尝试使用 gremlin 请求 gV().has('id', within(id1, id2...)) 从 titan 获取多个顶点。

我为参数 id 配置了一个 UNIQUE INDEX。

查询是参数化的,我从我的 java 代码中提供了一个 id 列表(ArrayList)。

作为性能测试的一部分,我尝试增加列表中的 id 数量,我注意到查询执行良好,直到 Id 列表包含 5000 个 id。
提交带有 10,000 个 ID 的查询后,我收到以下错误

49272 [gremlin-driver-loop-1] WARN org.apache.tinkerpop.gremlin.driver.handler.WebSocketClientHandler - WebSocket 处理期间捕获的异常 - 关闭连接 java.io.IOException: Connexion ré-initialisée par le 对应

错误 org.apache.tinkerpop.gremlin.driver.Handler$GremlinResponseHandler - 无法处理响应 java.io.IOException: Connexion ré-initialisée par le 对应

下面是完整的堆栈跟踪。

有人遇到过这个问题吗?您能否告诉我我们可以在一个请求中发送的最大 ID 数量是否有限制?

我们的环境:CDH 5.7.1、Titan 1.1.0-SNAPSHOT、Solr 4.10.3、HBase 1.2.0、titan-tp3-driver 用于创建与 gremlin 服务器的远程连接并进行查询