- nebula 版本:3.6.0
- 部署方式:单机
- 安装方式:Docker
- 是否上生产环境:N
- 硬件信息
- SSD
- X99,64GB
为了处理稠密点,看起来nebulaGraph没有做特殊优化,我目前的做法是,当一个关于某个结点的查询超时,根据边中存储的时间排序,删除早期边,只保留最近的1000条记录。
看了下文档,目前只能用客户端程序先查询一个结点的出入边总数,然后第二步查询时根据时间排序,再LIMIT lastResult.Count - 1000,将查询到的结果一条一条的删除。
但是这一系列操作十分占用时间和网络吞吐,请问能不能通过复合查询,根据第一次的Count,计算出要限制输出的结果,然后再用管道符DELETE EDGE?
我期望的语句是:
$lastResult = GO FROM ‘xxxx’ OVER Transfer BIDIRECT YIELD properties(edge) AS Transactions | YIELD count(*);
GO FROM ‘xxxx’ OVER Transfer BIDIRECT YIELD src(edge) AS src, dst(edge) AS dst, rank(edge) AS rank, properties(edge).TradeTime AS TradeTime | ORDER BY $-.TradeTime ASC | LIMIT lastResult.Count - 1000 | DELETE EDGE follow $-.src → $-.dst @ $-.rank;
但是目前遇到的问题是:
1.上一个查询的自定义变量只能作为下一个查询语句的输入
2.LIMIT 限制输出后无法再用管道获取前面的查询结果
可能是我的理解还不正确,请问一下有没有更好的解决方案?