Java初始化大量数据到Neo4j中(二)

这篇具有很好参考价值的文章主要介绍了Java初始化大量数据到Neo4j中(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

接Java初始化大量数据到Neo4j中(一)继续探索,之前用create命令导入大量数据发现太过耗时,查阅资料说大量数据初始化到Neo4j需要使用neo4j-admin import

业务数据说明可以参加Java初始化大量数据到Neo4j中(一),这里主要是将处理好的节点数据和关系数据分别导出为csv

在这里插入代码片

入口controller.java

//导出节点数据到csv文件中
@GetMapping("exportNodeData")
public void exportNodeData(HttpServletResponse response) {
    service.exportNodeData(response);
}

//导出关系数据到csv文件中
@GetMapping("exportRelationData")
public void exportRelationData(HttpServletResponse response) {
	service.exportRelationData(response);
}

service.java

//导出节点数据
 	@Override
    public void exportNodeData(HttpServletResponse response) {
    	//节点数据,按照自己的实际业务添加,我这里对应的是所有表的数据,因为我业务中所有表结果基本一样,也即节点属性都一样。每个表的数据一个map,key是表名作为节点的标签
		Map<String, List<NodeData>> nodeDataMap;

		List<Map<String,String>> data = new ArrayList<>();
        for(String key:nodeDataMap.keySet()){
            List<NodeData> dataList = nodeDataMap.get(key);
            if (StringUtils.isEmpty(key) || dataList ==null || dataList .isEmpty()) {
                continue;
            }

            for (NodeData nodeData:dataList ) {
                Map<String,String> map = new HashMap<>();
                
                String id = nodeData.getId();
                String name = nodeData.getName();
                String table = nodeData.getName();
                //因为不同表的id会重复,需要一个不重复的值作为节点唯一值(我这里用的是表id拼接表数据id)
                String uniqueValue = nodeData.getUniqueValue(); 
                map.put(":LABEL",table );
                map.put("id",id);
                map.put("name",name);
                map.put("uniqueValue:ID",uniqueValue);
                data.add(map);
            }
        }
        try {
            response.setCharacterEncoding("UTF-8");
            response.setHeader("Content-Disposition", "attachment;filename=" + new String("nodeimport.csv".getBytes(StandardCharsets.UTF_8), "ISO8859-1"));
            response.setContentType(ContentType.APPLICATION_OCTET_STREAM.toString());
            CsvWriter csvWriter =  CsvUtil.getWriter(response.getWriter()) ;
            csvWriter.writeBeans(data);
            csvWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
}

	//导出关系数据
	@Override
    public void exportRelationData(HttpServletResponse response) {
        //关系数据,将每一个表数据的关系作为RelationData实体
		List<RelationData> relationDatas;
        List<Map<String,String>> data = new ArrayList<>();
        for (RelationData relation : relationDatas)  {
            Map<String,String> map = new HashMap<>();
          
            String relationName = relation .getRelationName();
            String id = relation .getId();
            //因为节点是通过表id拼接数据id,所以关系这里也需要加上拼接后不重复的值
            //开始节点唯一的值
            String uniqueStartValue = relation .getUniqueStartValue();
            //结束节点唯一的值
            String uniqueEndValue = relation .getUniqueEndValue();
           
            map.put("relationName",relationName) ;
            map.put("id",id) ;
            map.put(":START_ID",uniqueStartValue) ;
            map.put(":END_ID",uniqueEndValue) ;
            map.put(":TYPE",relationName) ;
            data.add(map);
        }
        try {
            response.setCharacterEncoding("UTF-8");
            response.setHeader("Content-Disposition", "attachment;filename=" + new String("relationimport.csv".getBytes(StandardCharsets.UTF_8), "ISO8859-1"));
            response.setContentType(ContentType.APPLICATION_OCTET_STREAM.toString());
            CsvWriter csvWriter =  CsvUtil.getWriter(response.getWriter()) ;
            csvWriter.writeBeans(data);
            csvWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

CsvUtil用的是Hutool中的工具类,引入下面依赖即可

<dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.21</version>
        </dependency>

解释:
节点中的,
uniqueValue:ID 冒号前面可以随便写,冒号后端必须是ID,标识全局id,不可重复
:LABEL:这个是标签名,必须这样写
除了这两个以外的字段都是作为节点的属性。
导出的nodeimport.csv文件如下
Java初始化大量数据到Neo4j中(二),Neo4j,java,neo4j,python

关系中:

:START_ID:开始节点的唯一值
:END_ID:结束节点的唯一值
:TYPE:关系类型
除这三个外的字段都作为关系

导出的relationimport.csv文件如下:
Java初始化大量数据到Neo4j中(二),Neo4j,java,neo4j,python

之后找到Neo4j安装目录,找到import目录,将这个两个导出的文件放到import目录下
Java初始化大量数据到Neo4j中(二),Neo4j,java,neo4j,python
删除data\databases目录下的文件(neo4j-admin import要求是空文件 ) ,停掉Neo4j

cmd进入到bin目录,执行下面语句

neo4j-admin import --mode=csv  --nodes "E:\work_soft\neo4j-community-3.5.5-windows\neo4j-community-3.5.5\import\nodeimport.csv" --relationships "E:\work_soft\neo4j-community-3.5.5-windows\neo4j-community-3.5.5\import\relationimport.csv" --ignore-extra-columns=true --ignore-missing-nodes=true --ignore-duplicate-nodes=true

Java初始化大量数据到Neo4j中(二),Neo4j,java,neo4j,python
成功之后启动Neo4j,查看数据即可。文章来源地址https://www.toymoban.com/news/detail-724772.html

到了这里,关于Java初始化大量数据到Neo4j中(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Neo4j:入门基础(二)~ 数据导入Neo4J

    neo4j导入数据的方式有以下几种: Cypher create 语句,为每一条数据写一个create Cypher load csv 语句,将数据转成CSV格式,通过LOAD CSV读取数据。 neo4j-admin import导入 官方提供的Java API - BatchInserter 大牛编写的 batch-import 工具 neo4j-apoc load.csv + apoc.load.relationship 针对实际业务场景,定制

    2024年02月09日
    浏览(58)
  • Neo4j | 保姆级教学之如何清空neo4j数据库

    要清空neo4j数据库,需要进行以下操作: 停止Neo4j服务器,关闭Neo4j的所有连接。 找到 Neo4j 数据库存储的目录,通常是 data/databases/ 。 删除该目录中的所有文件和子目录。 请注意,这将不可逆地删除数据库的所有内容,包括节点、关系和属性等数据。在执行这个操作之前,请

    2024年02月06日
    浏览(53)
  • 【Neo4j】SOLVED:java.lang.RuntimeException: Error starting Neo4j database server

    问题描述:Neo4j 数据库服务启动失败 java.lang.RuntimeException: Error starting Neo4j database server 问题分析:APOC插件问题 解决办法1: 关闭APOC占用程序进程( zulu platform x64 architecture ), 重启Neo4j 数据库   解决办法2:卸载APOC,重装与Neo4j 数据库对应版本 neo4j-contrib/neo4j-apoc-procedures -

    2024年02月12日
    浏览(67)
  • 当安装Neo4j后,在cmd中输入neo4j遇到(ERROR!Neo4j cannot be started using java version 1.8.0_211

    很多初学java的小白,在选择java的JDK版本时,都会跟着网上的视频讲解选择1.8的稳定版本,比较很好的兼容一些编程软件。但是我们在以后用其他软件时,会发现1.8版本其实是比较落后的,最近自己也在学使用Neo4j(一款很好的图数据库软件,我自己选用的版本是最新的5.5.0版

    2024年02月10日
    浏览(43)
  • Neo4j在java中的使用

    嵌入式数据库 服务器模式(通过REST的访问) 它是由应用程序的性质(neo4j是独立服务器 还是和程序在一起),性能,监控和数据安全性来决定架构选择。 An embedded database(嵌入式数据库) 嵌入式Neo4j数据库是性能的最佳选择。 通过指定数据存储的路径以编程方式访问嵌入式数据

    2024年04月09日
    浏览(59)
  • 图数据库Neo4j——SpringBoot使用Neo4j & 简单增删改查 & 复杂查询初步

    图形数据库是专门用于存储图形数据的数据库,它使用图形模型来存储数据,并且支持复杂的图形查询。常见的图形数据库有Neo4j、OrientDB等。 Neo4j是用Java实现的开源NoSQL图数据库,本篇博客介绍如何在SpringBoot中使用Neo4j图数据库,如何进行简单的增删改查,以及如何进行复杂

    2024年02月06日
    浏览(63)
  • 图数据库Neo4j——Neo4j简介、数据结构 & Docker版本的部署安装 & Cypher语句的入门

    MySQL是一种开源的关系型数据库管理系统,使用SQL作为其查询语言,常见的关系型数据库有MySQL、Oracle、SQL Server、PostgreSQL等。相关博客文章如下: 【合集】MySQL的入门进阶强化——从 普通人 到 超级赛亚人 的 华丽转身 PostgreSQL数据库——Docker版本的postgres安装 Navicat连接方式

    2024年02月06日
    浏览(63)
  • Neo4j数据库删除数据

    我们使用Neo4j图数据库进行写入数据操作之后,免不了要删除数据的。 但是Neo4j的控制台没有提供快捷的删除按钮,所以我们还是需要通过命令来操作。 如果数据库中的数据量并不大,节点数相对较少,我们可以通过命令行直接删除节点。 此类操作起到清空数据库的效果,但

    2023年04月09日
    浏览(92)
  • 图数据库_Neo4j的使用场景_以及Windows版Neo4j Community Server安装_欺诈检测_推荐_知识图谱---Neo4j图数据库工作笔记0003

    可以看到使用场景,比如欺诈检测, 要建立图谱,才能进行,欺诈人员检测   可以看到图谱的各种应用场景 然后推荐引擎也需要,可以看到 在金融,旅行,求职招聘,保健,服务,媒体娱乐,都可以进行推荐   然后还有知识图谱 身份访问管理,这里,可以进行安全管理,可以挖掘出潜在关系

    2024年02月12日
    浏览(45)
  • Java的初始化块

    三种初始化数据域的方法: 在构造器中设置值 在声明中赋值 初始化块(initialization block) 在一个类的声明中,可以包含多个代码块。只要构造类的对象,这些块就会被执行。 在上面这个示例中,无论使用哪个构造器构造对象,id 域都在对象初始化块中被初始化。首先运行初

    2023年04月27日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包