尽管自由基在2015年6月遭到反对,但自由基MQL给我留下了深刻的印象。它直观、简洁、声明性强,易于理解/编写。
这些天我正在学习TinkerPop3和gremlin。我觉得格里姆林有很多好的特征。我想知道是否可以将Freebase转换为TinkerPop3 gremlin。
比方说,我有TinkerPop3示例数据“船员”,下面是MQL:
[{
"type": "person",
"name": null,
"develops": {
"type": "software",
"release_date": null, // release_date is not in the crew data.
// Just added for test
"name": null,
"sort": "-name", // descending sort
"limit": 2 // print only two software
},
"uses": {
"type": "software",
"release_date": null,
"name": null,
"sort": "name", // ascending sort
"limit": 2
}
}]以上MQL的意思是“查找人”,每个人“打印他的两个开发的软件和使用的软件”。请记住,上面的MQL只是一个测试的例子。
我试着把MQL变成了一个小女孩。但我无法改变它。所以我要问你。有可能吗?那么如何转换,如果不可能,为什么?(如果可能的话,如果生成的gremlin在优化和执行方面是高效的,情况会更好。)
如果单个gremlin是不可能的,那么组装两个或多个gremlin是否可以产生与MQL输出相同的性能损失?
谢谢你的进阶。
发布于 2015-12-03 13:02:12
要解决这个问题,最快的查询应该是:
gremlin> g.V().hasLabel("person").as("person").
gremlin> map(out("develops").order().by("name", decr).limit(2).fold()).as("develops").select("person").
gremlin> map(out("uses").order().by("name", incr).limit(2).fold()).as("uses").
gremlin> select("person","develops","uses")
==>[person:v[1], develops:[v[11], v[10]], uses:[v[10], v[11]]]
==>[person:v[7], develops:[v[11], v[10]], uses:[v[10], v[11]]]
==>[person:v[8], develops:[v[10]], uses:[v[10], v[11]]]
==>[person:v[9], develops:[], uses:[v[10], v[11]]]但是,使用match()步骤,您可能可以增强可读性(尽管它包含相同的步骤):
g.V().hasLabel("person").match(
__.as("person").out("develops").order().by("name", decr).limit(2).fold().as("develops"),
__.as("person").out("uses").order().by("name", incr).limit(2).fold().as("uses")).
select("person","develops","uses")更新
由于您不希望在结果集中看到我(v[9]),所以可以添加一个简单的筛选条件:
g.V().hasLabel("person").as("person").
filter(outE("develops").and().outE("uses")).
map(out("develops").order().by("name", decr).limit(2).fold()).as("develops").select("person").
map(out("uses").order().by("name", incr).limit(2).fold()).as("uses").
select("person","develops","uses")https://stackoverflow.com/questions/34062087
复制相似问题