Nebula查询结果的封装对象ResultSet比较复杂,原因是需要保存数据类型。而JSON的一大缺点就是无法保存数据类型,当然这是它简洁的代价。
在实际生产过程中一些应用场景对数据类型并没有太多要求,典型的例子是可视化。很多小伙伴都有将valuewrapper转为自定义json对象的需求,或者是将官方的图模型映射到自己的领域模型的需求。我这里提供一个我写的框架抛砖引玉。
代码地址:https://github.com/Dragonchu/NebulaResultSetBoot
https://github.com/Dragonchu/NebulaResultSetBoot
核心代码很简单,就这不断的判断value wrapper的数据类型,然后递归进行解析。
这里讲一下我个人对于nebula ResulSet模型的理解吧,Nebula的点是由id加tag列表组成,而每个tag对象里是tagName和一个属性Map,有很多人建模的时候只用单tag其实是没发挥这种模型的潜力的。
public class Vertex {
private final String id;
private final List<Tag> tags;
}
public class Tag {
private final String name;
private final Map<String, Object> properties;
}
边的模型比较简单,起点,终点,属性,rank,edgeType。
public class Edge {
private final String src;
private final String dst;
private final String name;
private final Long ranking;
private final Map<String, Object> properties;
}
路径的模型有一个段(segment)的概念,每个segment是一个三元组,<起点,终点,边>,对于独立的点,起点和终点是相同的。而路径是一个段列表。
public class Segment {
private final Vertex src;
private final Vertex dst;
private final Edge edge;
}
public class Path {
private final List<Segment> segments;
}
这样再去看ResultSet会比较明朗一些。