背景



上节我们了解了什么是图数据库,作为研究对象的neo4j的特点,优缺点以及基本的环境搭建。

现在我们要讲存储在csv中的通话记录数据导入到neo4j中去,并且可以通过cql去查询导入的数据及关系

1.选取导入方式

neo4j的导入方式有很多,我大概总结了一下:

  1. Cypher CREATE 语句,为每一条数据写一个CREATE
  2. Cypher LOAD CSV 语句,将数据转成CSV格式,通过LOAD CSV读取数据。
  3. 官方提供的Java API —— Batch Inserter
  4. 大牛编写的 Batch Import 工具
  5. 官方提供的 neo4j-import 工具

优缺点对比:

create语句 load csv语句 Batch Inseter Batch Import neo4j-import
适用场景 1~1w nodes 1w~10w nodes 千万以上 nodes 千万以上 nodes 千万以上 nodes
速度 很慢(1000 nodes/s) 一般(5000 nodes/s) 非常快(数万nodes/s) 非常快(数万nodes/s) 非常快(数万nodes/s)
优点 使用方便,可实时插入。 使用方便,可以加载本地 远程CSV;可实时插入 基于Batch Inserter,可以直接运行编译好的jar包;可以在已存在的数据库中导入数据 官方出品,比Batch Import占用更少的资源
缺点 速度慢 需要将数据转换成csv 需要转成CSV;只能在JAVA中使用;且插入时必须停止neo4j 需要转成CSV;必须停止neo4j 需要转成CSV;必须停止neo4j;只能生成新的数据库,而不能在已存在的数据库中插入数据

可以看出导入的方式有很多,由于我们导入的数据量较大,所以我这里选择的是最后一种 neo4j-import,大家也可以去选择其他的导入方式

neo4j-import 使用

我们打开neo4j-import使用的网站可以看到这样的一段摘要

Super Fast Batch Importer For Huge Datasets LOAD CSV is great for

importing small – medium sized data, i.e. up to the 10M records range.

For large data sets, i.e. in the 100B records range, we have access to

a specialized bulk importer.

We want to use it to import similar order data into Neo4j: customers,

orders and contained products.

The tool is located in path/to/neo4j/bin/neo4j-import and is used as

follows:

这段话的大致意思是我们使用load csv无法满足我们大数据量的业务需要,所以我们不得不去选择一种新的导入方式,这里我们选择了neo4j-import这种方式,以下是一个导入的例子

bin/neo4j-import --into retail.db --id-type string \
--nodes:Customer customers.csv --nodes products.csv \
--nodes orders_header.csv,orders1.csv,orders2.csv \
--relationships:CONTAINS order_details.csv \
--relationships:ORDERED customer_orders_header.csv,orders1.csv,orders2.csv

例子中的数据结构为:

如果您调用neo4j-import没有参数的脚本,它将列出一个全面的帮助页面。

--into retail.db显然是目标数据库,其中不能包含现有数据库

重复--nodes--relationships参数是同一实体的多个(可能分裂的)csv文件的组,即具有相同的列结构。

每组的所有文件都被视为可以连接成一个大文件。一个标题行的组的第一个文件是必需的,它甚至可能被包含在其中可能比一个多GB的文本文件更易于处理和编辑一个单行文件。也支持压缩文件。

  1. customers.csv直接作为带有:Customer标签的节点导入,属性直接从文件中获取。
  2. 对于从:LABEL列中获取节点标签的产品也是如此。
  3. 订单节点取自3个文件,一个标题和两个内容文件。
  4. 输入:CONTAINSorder_details.csv订单项关系是通过其ID 来创建的,包含与所包含产品的订单。
  5. 订单通过再次使用订单csv文件连接到客户,但这次使用不同的标头,其中:IGNORE是不相关的列

    这–id-type string表示所有:ID列都包含字母数字值(对仅数字ID进行优化)。

列名用于节点和关系的属性名称,特定列有一些额外的标记

  • name:ID - 全局id列,通过该列查找节点以便以后重新连接,

    • 如果保留属性名称,它将不会被存储(临时),这就是–id-type所指的
    • 如果你有跨实体的重复id,你必须在括号中提供实体(id-group) :ID(Order)
    • 如果您的ID是全球唯一的,您可以将其关闭
  • :LABEL - 节点的标签列,多个标签可以用分隔符分隔
  • :START_ID:END_ID- 关系文件列,引用节点ID,用于id-groups使用:END_ID(Order)
  • :TYPE - 关系型列
  • 所有其他列都被视为属性,但如果为空或在注释时跳过:IGNORE
  • 类型转换可以通过后面添加的名称,例如通过:INT:BOOLEAN
导入通话记录数据

在整理后的csv中我们的通话记录是这样的数据:

  1. phones.csv 记录电话号列表,作为nodes结点

  2. phone_header 标题文件只有一行数据

    phone:ID

  3. call.csv 该文件记录通话记录的信息,作为以后关系的建立和关系属性的添加



    第一行从左到右字段的含义为:

    150 **** 0743给136 **** 5301一共打了125分钟时长的电话,打了一次,平均一次125分钟

  4. call_header.csv 通话记录头信息



    这里的:START_ID指的是关系的起始点,:END_ID指的是关系的终止点

这些csv文件准备好之后,我们写一段shell脚本来执行这些文件。

import()
{
#导入命令
neo4j stop
cd /usr/local/Cellar/neo4j/3.5.0/libexec/data/databases
rm -rf graph.db
cd /Documents/归档/data
neo4j-admin import \
--database=graph.db
--nodes:phone="../phone_header.csv,phones.csv \
--ignore-duplicate-nodes=true \
--ignore-missing-nodes=true \
--relationships:call="../call_header.csv,call.csv"
neo4j start
}
  • 这里以防我们新建的数据库已经存在,我们选择删除已有库再进行导入
  • 记得要先关闭neo4j

查看结果

导入完成之后我们来打开neo4j浏览器查看一下导入后的结果

我们打开http://localhost:7474/browser/

首先我们先查看一下Database Information



这里我们可以看到已有的结点数,有多少条关系,占用的存储空间等数据库信息

然后我们来查看某个电话号码的交际圈:

match (p:phone{phone:"13825259929"})-[r]->(o) return p,o,r;
  • 1



把鼠标移到对应的结点和关系上时,底部便会出现对应的属性

现在我们的数据导入就完成了

接下来我们要用springboot + neo4j +d3来展示某人的通话记录圈。

上一节:neo4j(一).初识图数据库neo4j

原文地址:https://blog.csdn.net/qq_32519415/article/details/87942379

使用neo4j-import导入数据及关系的更多相关文章

  1. neo4j批量导入数据的两种解决方案

    neo4j批量导入数据有两种方法,第一种是使用cypher语法中的LOAD CSV,第二种是使用neo4j自带的工具neo4j-admin import. LOAD CSV 导入的文件必须是csv文件 ...

  2. C# Excel导入数据

    表 表的创建脚本 CREATE TABLE [dbo].[TB_PROJECTS_New1]( , ) NOT NULL, ) NULL, ) NULL, , ) NULL, , ) NULL, , ...

  3. DB2导入数据时乱码问题

    1.由于导入import导入数据时乱码,一直找不到解决办法,于是就用load导入 LOAD后,发现某些表检查挂起( 原因码为 "1",所以不允许操作 SQLSTATE=57016  ...

  4. PHP Excel文件导入数据到数据库

    1.php部分(本例thinkphp5.1): 下载PHPExcel了扩展http://phpexcel.codeplex.com/ <?phpnamespace app\admin\contr ...

  5. 使用neo4j图数据库的import工具导入数据 -方法和注意事项

    背景 最近我在尝试存储知识图谱的过程中,接触到了Neo4j图数据库,这里我摘取了一段Neo4j的简介: Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中.它是一个嵌 ...

  6. Neo4j入门日志(一)导入数据

    本文主要来源于: neo4j的官方文档 使用的是neo4j官方提供的导入方式,即使用import,在cmd中进行导入. 1.导入的基本方式 bin/neo4j-admin import --datab ...

  7. 【neo4j】文件管理路径、数据备份、创建新数据库、导入数据等操作记录

    neo4j一般的配置路径如下 一.备份数据 使用neo4j-admin命令. 首先,先找到数据的存储路径,然后关闭数据库. 关闭数据库的语句如下: #切换到/bin目录下 ./neo4j stop 然 ...

  8. Python来袭,教你用Neo4j构建“复联4”人物关系图谱!

    来源商业新知网,原标题:Python来袭,教你用Neo4j构建“复联4”人物关系图谱!没有剧透! 复仇者联盟 之绝对不剧透 漫威英雄们为了不让自己剧透也是使出了浑身解数.在洛杉矶全球首映礼上记者费尽心 ...

  9. csv导入数据

    1.关闭Neo4j服务器进程 2.删除graph.db数据库文件  /data/databases/  rm -rf graph.db 3.重新启动Neo4j服务器 4.数据导入import 5.wi ...

随机推荐

  1. Python面向对象学习

    以下面例子作为面向对象基础介绍,类比java里的面向对象既可以,大同小异 class Employee(): raiseAmount=1.04 employeeNum= def __init__(se ...

  2. 国内平台比特币(Bitcoin)搬砖流程教学

    建议搬砖时要的价差,实际费用与利润请自行计算,避免亏损或白做工请自行拿捏利润. 请搬砖前要先自行操作与确认双边平台的存取速度.利於拿捏时间,避免时间差导致亏损. (所有内容 仅供参考 盈亏自负) 搬砖 ...

  3. 关于 ros

    1.https://mikrotik.com/download   下载 x86 架构的 cd image  (当日这是试用版,特殊版下载后道理一样) 2.exsi 上传,并新建 linux 的 其他 ...

  4. 设置和修改Linux的swap分区大小

    在Linux编译gcc时,遇到编译错误,究其根源是因为内存不足,这时通过修改swap大小解决了问题 相关操作如下: 1. 查看当前分区情况free -m 2. 增加 swap 大小, 2G 左右dd ...

  5. rpm包安装过程中依赖问题“libc.so.6 is needed by XXX”解决方法-转

    原文:http://raksmart.idcspy.com/781 在CentOS上的Canon LBP2900安装打印机驱动,中间遇到了一些问题,主要是安装rpm包出现的依赖问题,现在解决了,现在简 ...

  6. 在ALV点击Key值调用TCode,跳过初始屏幕

    在开发ALV报表时,通常业务部门会要求在ALV中点击单据号,屏幕跳转到具体业务凭证中查看业务明细,效果如下图: 点击销售销售订单号或者交货单号可传入单据号直接打开销售订单或交货单,实现方式如下: 一. ...

  7. windows server 文件夹和搜索选项被禁用了

    当我们需要调整 windows 文件夹相关的配置时,却发现“文件夹和搜索选项”被禁用了,下图是恢复正常的情况.被禁用时显示灰色,不能点击. 下面给出解决步骤: 打开“组策略”. 然后依次展开“用户配置 ...

  8. Fiilter

    过滤器 过滤请求和响应 作用:        自动登录.        统一编码.        过滤关键字        .... Filter是一个接口 编写filter步骤: 1.编写一个类 a ...

  9. HTML5 drag拖动事件

    参考链接:https://segmentfault.com/a/1190000013606983 例子: <!DOCTYPE HTML> <html> <head> ...

  10. C# 利用Newtonsoft.Json 序列化生成Json数据

    现在需要将一些数据转化成json格式返回给调用者, 使用Newtonsoft.Json.DLL库来帮助我们序列化 举例: {"300033":{"MC":&qu ...