在Springboot中自定义Nebula Graph数据库的starter

442 阅读2分钟

Nebula Graph 是一款开源的、分布式的、易扩展的原生图数据库,能够承载包含数千亿个点和数万亿条边的超大规模数据集,并且提供毫秒级查询。

图数据库:图数据库是专门存储庞大的图形网络并从中检索信息的数据库。它可以将图中的数据高效存储为点(Vertex)边(Edge),还可以将属性(Property)附加到点和边上。

image.png

使用场景

Nebula Graph 可用于各种基于图的业务场景。为节约转换各类数据到关系型数据库的时间,以及避免复杂查询,建议使用 Nebula Graph。

  • 欺诈检测¶金融机构必须仔细研究大量的交易信息,才能检测出潜在的金融欺诈行为,并了解某个欺诈行为和设备的内在关联。这种场景可以通过图来建模,然后借助 Nebula Graph,可以很容易地检测出诈骗团伙或其他复杂诈骗行为。
  • 实时推荐¶Nebula Graph 能够及时处理访问者产生的实时信息,并且精准推送文章、视频、产品和服务。
  • 知识图谱¶自然语言可以转化为知识图谱,存储在 Nebula Graph 中。用自然语言组织的问题可以通过智能问答系统中的语义解析器进行解析并重新组织,然后从知识图谱中检索出问题的可能答案,提供给提问人。
  • 社交网络¶人际关系信息是典型的图数据,Nebula Graph 可以轻松处理数十亿人和数万亿人际关系的社交网络信息,并在海量并发的情况下,提供快速的好友推荐和工作岗位查询。

虽然有java的sdk,但是对springboot并不友好,所以需求就出来了,自定义一个高性能的spring-boot-nebula-client-starter迫在眉睫 废话不多说,直接上代码

image.png

  • 自动配置NebulaConfiguration
@Configuration
public class NebulaConfiguration {

    @Bean
    public SessionDao sessionDao(){
        return new SessionDao();
    }

    @Bean
    @ConfigurationProperties(prefix = "nebula.config")
    public NebulaConfig nebulaConfig(){
        return new NebulaConfig();
    }

    @Bean
    public NebulaPool nebulaPool(final NebulaConfig nebulaConfig) throws UnknownHostException {
        NebulaPoolConfig nebulaPoolConfig = new NebulaPoolConfig();
        nebulaPoolConfig.setMaxConnSize(nebulaConfig.getMaxConnSize());
        nebulaPoolConfig.setMinConnSize(nebulaConfig.getMinConnSize());
        nebulaPoolConfig.setIdleTime(nebulaConfig.getIdleTime());
        nebulaPoolConfig.setTimeout(nebulaConfig.getTimeout());
        NebulaPool pool = new NebulaPool();
        List<HostAddress> addresses = initAddress(nebulaConfig.getUrl());
        pool.init(addresses, nebulaPoolConfig);
        return pool;
    }

    private List<HostAddress> initAddress(String url){
        List<HostAddress> hostAddresses = new ArrayList<>();
        List<String> urls = Arrays.asList(url.split(","));
        urls.forEach(u->{
            String host = u.split(":")[0];
            int port = Integer.parseInt(u.split(":")[1]);
            hostAddresses.add(new HostAddress(host, port));
        });
        return hostAddresses;
    }
}
  • 增加配置NebulaConfig
@Data
public class NebulaConfig {
    private String user;
    private String password;
    private String space;
    private String url;
    private int maxConnSize;
    private int minConnSize;
    private int idleTime;
    private int timeout;
}
  • 配置spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.nb.nebula.starter.config.NebulaConfiguration