JanusGraph Tinkerpop

Dependency

<properties>
        <janus.version>1.0.0</janus.version>
        <tinkerpop.version>3.7.0</tinkerpop.version>
</properties>

<dependency>
    <groupId>org.janusgraph</groupId>
    <artifactId>janusgraph-driver</artifactId>
    <version>${janus.version}</version>
</dependency>

<dependency>
    <groupId>org.apache.tinkerpop</groupId>
    <artifactId>tinkerpop</artifactId>
    <version>${tinkerpop.version}</version>
    <scope>import</scope>
    <type>pom</type>
</dependency>

<!-- optional -->
<build>
        <resources>
                <resource>
                    <directory>src/main/resources</directory>
                     <filtering>true</filtering>
                     <includes>
                        <include>**/*.yaml</include>
                     </includes>
                </resource>
        </resources>
</build>

Structure

📒 src/main/resources
  📂 conf
    📄 remote-objects.yaml
  📂 META-INF/spring/
        # content:com.elf.tinkerpop.autoconfigure.GremlinClusterAutoConfiguration
    📄 org.springframework.boot.autoconfigure.AutoConfiguration.imports

Starter

TinkerpopProperties

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "io.os.tinkerpop")
public class TinkerpopProperties{

        private String traversalName = "g";
        private String configFile = "src/main/resources/conf/remote-objects.yaml";

        public String getTraversalName() {
                return traversalName;
        }
        public void setTraversalName(String traversalName) {
                this.traversalName = traversalName;
        }
        public String getConfigFile() {
                return configFile;
        }
        public void setConfigFile(String configFile) {
                this.configFile = configFile;
        }

}

TinkerpopRepository

import org.apache.tinkerpop.gremlin.driver.Client;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.springframework.stereotype.Repository;

@Repository
public class TinkerpopRepository {

        protected Client client;
        protected GraphTraversalSource g;

        public TinkerpopRepository(GraphTraversalSource g,Client client) {
                this.g = g;
                this.client = client;
        }

}

GremlinClusterAutoConfiguration

  • src/main/resources/META-INF/spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.elf.dp.tinkerpop.config.GremlinClusterAutoConfiguration
import org.apache.tinkerpop.gremlin.driver.Client;
import org.apache.tinkerpop.gremlin.driver.Cluster;
import org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteConnection;
import org.apache.tinkerpop.gremlin.process.remote.RemoteConnection;
import org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class GremlinClusterAutoConfiguration {

        @Autowired
        private TinkerpopProperties tp;

    @Bean
    @ConditionalOnMissingBean
    Cluster cluster() throws Exception {
        return Cluster.open(tp.getConfigFile());
    }

    @Bean
    @ConditionalOnMissingBean
    Client client() throws Exception {
        return cluster().connect();
    }

    @Bean
    @ConditionalOnMissingBean
    RemoteConnection remoteConnection(final Cluster cluster) {
            String traversalName = tp.getTraversalName();
        return DriverRemoteConnection.using(cluster,traversalName);
    }

    @Bean
    @ConditionalOnMissingBean
    GraphTraversalSource graphTraversalSource(
        final RemoteConnection remoteConnection) throws Exception {
       return AnonymousTraversalSource.traversal()
                   .withRemote(remoteConnection);
    }

}

注意事项

  • 连接使用GraphBinary和janusgraph-driver, 它不允许访问内部JanusGraph组件,如ManagementSystem, 要访问ManagementSystem,必须更新包和序列化.
  • janusgraph-driver包替换为janusgraph-core包
  • conf/remote-objects.yaml替换className序列化类, GraphBinaryMessageSerializerV1替换为GryoMessageSerializerV1d0, 最新版Gremlin序列化类是GryoMessageSerializerV3d0
  • org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1 org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0

Application

引入starter

<dependency>
        <groupId>com.elf.starter</groupId>
        <artifactId>starter-tinkerpop</artifactId>
</dependency>

remote-objects.yaml



hosts: [192.168.9.111]
port: 8182
serializer: {
    className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0,
    config: {
        ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry]
    }
}
# 推荐4K
connectionPool: {maxContentLength: 6553600}

application.yaml



server:
  port: 8080
  servlet:
    context-path: /tinkerpop
logging:
  level:
    root: warn
    '[org.apache.tinkerpop.gremlin.driver]': warn
    '[io.os.gremlin]': debug
io:
  os:
    tinkerpop:
      traversalName: g
      configFile: src/main/resources/conf/remote-objects.yaml

Repository

import java.util.List;
import java.util.Map;

import org.apache.tinkerpop.gremlin.driver.Client;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.springframework.stereotype.Repository;

@Repository
public class LineageRepository extends TinkerpopRepository{

        public LineageRepository(GraphTraversalSource g,Client client) {
                super(g, client);
        }

        public List<Map<Object,Object>> getLineageByGuid() {
                return g.V().elementMap().toList();
        }

}

Connector

import java.lang.invoke.MethodHandles;
import java.util.List;
import java.util.Map;
import org.apache.tinkerpop.gremlin.driver.Cluster;
import org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteConnection;
import org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1;
import org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;

public class TinkerpopConnector {

        private static final Logger logger = LoggerFactory
                .getLogger(MethodHandles.lookup().lookupClass());

        //connect("192.168.9.111",8182);
        public static void connect(final String host,final int port) {
                if (StringUtils.hasText(host)) {
                        String msg = String.format("%s can not be blank!",host);
                        throw new IllegalArgumentException(msg);
                }
                if (port < 1) {
                        throw new IllegalArgumentException("invalid port!");
                }
                Cluster.Builder builder = Cluster.build();
                builder.addContactPoint(host);
                builder.port(port);
                builder.serializer(new GraphBinaryMessageSerializerV1());

                Cluster cluster = builder.create();
                GraphTraversalSource g = AnonymousTraversalSource.traversal()
                        .withRemote(DriverRemoteConnection.using(cluster));

                Long count = g.V().count().next();
                List<Map<Object, Object>> resultMapList = g.V().elementMap().toList();
                logger.info("janus record count:{}",count);

                resultMapList.forEach(resultMap -> {
                        logger.info(resultMap.toString());
                });
                cluster.close();
        }

}

执行遍历

age = g.V().has('name','elf').values('age').next()
print('elf is {} years old.'.format(age))

Entry

@SpringBootApplication
@EnableConfigurationProperties(value = {
        TinkerpopProperties.class
})
public class Entry {

        public static void main(String[] sa) {
                Class<?> cls = MethodHandles.lookup().lookupClass();
                SpringApplication.run(cls,sa);
        }

}

Python Collector

  • 一些gremlin步骤(step)和谓词(predicate)名称在python中是关键字;
  • 在Gremlin-Python中只能以_为后缀,如in()变为in_(),not()变为not_()等;
  • 受影响的其它名称如all,and,as,from,global,is,list,or和set;

安装Gremlin-Python

pip install gremlinpython==3.5.3

导入相关包

from gremlin_python import statics
from gremlin_python.structure.graph import Graph
from gremlin_python.process.graph_traversal import __
from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection

GraphTraversalSource

from gremlin_python.process.anonymous_traversal_source import traversal
connection = DriverRemoteConnection('ws://localhost:8182/gremlin','g')
g = traversal().withRemote(connection)
  • 18
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
### 回答1: JanusGraph是一个开源的分布式数据库,可用于存储和处理大规模数据。JanusGraph 0.5.2是该数据库的一个特定版本,支持在Windows操作系统上使用。 使用JanusGraph 0.5.2在Windows上需要以下步骤: 1. 下载JanusGraph 0.5.2的安装包。可以从官方网站或GitHub上获取最新的发布版本。 2. 解压安装包到任意目录。确保你的系统上已经安装了Java环境,并且配置了JAVA_HOME环境变量。 3. 打开命令行窗口,进入JanusGraph的目录。 4. 在命令行窗口中运行bin/gremlin.bat脚本。这将启动JanusGraph的Gremlin Shell,Gremlin是一种遍历语言,用于与JanusGraph交互。 5. 在Gremlin Shell中,你可以执行各种数据库的操作,如创建、添加顶点和边、遍历等。使用Gremlin脚本文件(.groovy)将多个操作组合到一个文件中,并在Gremlin Shell中执行该文件。 6. 在Gremlin Shell中,你还可以执行Cypher查询语句来查询数据库中的数据。JanusGraph支持Cypher作为一种查询语言,并提供了相应的API。 7. 当你完成了对JanusGraph的操作,可以通过在Gremlin Shell中使用`:q`命令来退出。 总之,JanusGraph 0.5.2可以在Windows上使用,并且它提供了Gremlin Shell和Cypher查询语言来与数据库交互。通过执行相应的命令或脚本,你可以在Windows操作系统上创建、修改和查询大规模的数据。 ### 回答2: JanusGraph 0.5.2是一个开源的分布式数据库,它是基于Apache TinkerPop计算框架构建的,并且提供了许多强大的功能和扩展性。 关于在Windows上安装和配置JanusGraph 0.5.2,以下是简单的步骤: 1. 准备环境:首先,确保你有一个可用的Java安装,JanusGraph 0.5.2需要Java 8或更高版本。 2. 下载JanusGraph 0.5.2:在JanusGraph的官方网站或GitHub页面上下载JanusGraph 0.5.2的压缩包。 3. 解压缩文件:解压缩下载的压缩包到一个合适的目录,例如"JanusGraph"文件夹。 4. 配置JanusGraph:在JanusGraph目录中,找到并编辑"janusgraph-hbase.properties"文件。根据你的需要配置数据库后端(如HBase或Cassandra)和相关参数。 5. 启动JanusGraph:在命令提示符或PowerShell窗口中,导航到JanusGraph目录,并运行以下命令启动JanusGraph服务器: ``` bin\janusgraph.bat ``` 6. 使用JanusGraph:一旦服务器启动,你可以使用Gremlin控制台或TinkerPop兼容的数据库客户端连接到JanusGraph,并执行各种数据库操作。 如此,你就成功地在Windows上安装和配置了JanusGraph 0.5.2。根据你的具体需求,你可以进一步探索JanusGraph的功能和性能优化。 ### 回答3: JanusGraph 0.5.2是一个开源的分布式数据库,它可以在Windows操作系统上运行。JanusGraph具有扩展性和可靠性,支持高性能的数据查询和处理。 在Windows上安装和配置JanusGraph 0.5.2相对简单,以下是一些基本步骤: 1. 首先,在JanusGraph的官方网站上下载适用于Windows的JanusGraph压缩包。 2. 解压缩JanusGraph压缩包到你选择的目录中。 3. 打开目录中的`conf`文件夹,在这里你可以找到`janusgraph.properties`文件。 4. 使用一个文本编辑器打开`janusgraph.properties`文件,对其进行必要的配置。你需要指定一个Cassandra或HBase的存储后端,以及一些其他的配置选项。此外,你还可以根据需求进行其他配置调整,例如调整缓存和连接池的大小等。 5. 保存并关闭`janusgraph.properties`文件。 6. 打开命令提示符,并进入JanusGraph目录下的`bin`文件夹。 7. 在命令提示符中,输入以下命令以启动JanusGraph服务器: ``` janusgraph.bat start ``` 8. 等待一段时间,直到看到类似于“Graph database loaded (...)”的消息。 9. 现在,JanusGraph服务器已经在Windows上成功启动。 10. 如果需要连接到JanusGraph服务器并执行数据库操作,可以使用Gremlin控制台或通过客户端编程语言(如Java、Python等)与JanusGraph进行通信。 总的来说,JanusGraph 0.5.2可以在Windows上运行,只需进行一些简单的配置即可。希望这些步骤对你有帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值