我目前正在使用带有gremlin python client的Tinkerpop和默认的TinkerGraph-Gremlin(在内存中运行)。我想提高查询的性能,并阅读createIndex()
函数,这对我的用例来说听起来很完美,遗憾的是我无法使用python客户端创建索引。我还尝试将这些行添加到启动groovy脚本中(通过groovy scirpt运行而没有错误)但是当我运行我的性能基准时,我得到相同的结果。
所以我的问题是:我可以用python客户端创建一个索引,如果没有,那将是一个变通方法?如果有任何索引定义,还有一种方法可以问gremlin吗?
PS。:对于groovy脚本,我使用默认的empty-sample.grooy
并在最后一次调用之前添加这些行:
graph.createIndex("name", Vertex.class)
graph.createIndex("nap", Edge.class)
谢谢!
答案 0 :(得分:1)
python客户端没有createIndex()
方法,因为TinkerPop不提供3.x中索引的任何抽象。我们依赖底层图形数据库的索引和模式创建方法。您必须降低到该API级别并退出TinkerPop。
如果您仅确定是否使用查询速度创建索引,请记住,图形中只有8800个顶点,而TinkerGraph是内存中的图形。你可能没有看到速度与少数几个顶点的明显区别。如果您想知道您的索引是否已创建,请查看它:
gremlin> graph = TinkerGraph.open()
==>tinkergraph[vertices:0 edges:0]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> graph.createIndex('name',Vertex.class)
gremlin> graph.getIndexedKeys(Vertex.class)
==>name
答案 1 :(得分:0)
使用gremlinpython v3.2.6
搜索TinkerPop的github,我发现你可以使用客户端对象发送直接请求,因为它是数据库控制台。 the GitHub of Tinkerpop中解释了此行为。我将展示同步版本,在GitHub中还有一个异步版本:
from gremlin_python.driver.client import Client
client = Client(url, travelsal_source)
console_command_string = "2*2" # Write code as it was the console of the database you're using
result_set = client.submit(console_command_string)
future_results = result_set.all()
results = future_results.result()
client.close()
要查看您必须发送的命令,请查看您正在使用的确切数据库,如果是Janusgraph,请在its indexing documentation中详细说明。