使用Traversal查询Azure Cosmos DB图

时间:2018-04-11 06:38:52

标签: azure-cosmosdb

我正在尝试使用Traversal查询Azure Cosmos DB图表,如下所示

val cluster = Cluster.build(File("remote.yaml")).create()
val client = cluster.connect()

val graph = EmptyGraph.instance()
val g = graph.traversal().withRemote(DriverRemoteConnection.using(cluster))

val traversal = g.V().count()
val aliased = client.alias("g")

val result = aliased.submit(traversal)

val resultList = result.all().get()

resultList.forEach { println(it) }

问题是执行在result.all()。get()之后挂起,并且永远不会得到响应。提交遍历时我只有这个问题。直接提交Gremlin查询字符串时,它可以正常工作。

1 个答案:

答案 0 :(得分:3)

我在类似的船上,但根据最近的查询Does Cosmos DB support Gremlin.net c# GLV?遍历是不可能的。但是,对于那些使用(或考虑使用)Gremlin.NET连接到Cosmos的人,我将分享一些我能够做到的事情。

首先,我可以毫不费力地从gremlin控制台连接到cosmos,就像使用Gremlin.NET一样:

var gremlinServer = new GremlinServer(hostname, port, enableSsl: true,                                                                 
username: "/dbs/" + database + "/colls/" + collection,                                                                
password: authKey);
var driver = new DriverRemoteConnection(new GremlinClient(gremlinServer));
//var driver = new DriverRemoteConnection(new GremlinClient(new GremlinServer("localhost", 8182)));

var graph = new Gremlin.Net.Structure.Graph();
var g = graph.Traversal().WithRemote(driver);

g.V().Drop().Next(); // nullreferenceexception

当使用Gremlin.NET与本地托管的gremlin服务器一起工作时(参见注释掉的行),一切正常。

我使用gremlin.net处理cosmos的唯一方法是将查询作为字符串文字提交,例如

var task = gremlinClient.SubmitAsync<dynamic>("g.V().Drop()");

这有效,但我希望能够使用流畅的遍历。

我可以使用Azure / Graph API(documentclient等)轻松地使用Cosmos,但仍然只能使用字符串文字。此外,这不是非常便携,apparently slower too