neo4j 快速搭建应用

一、安装neo4j

1、从docker hub上面pull下最新的neo4j最新的镜像

英文版本镜像
docker pull neo4j
中文版本镜像
docker pull neo4jchina/neo4j-chs

如下所示:

查看镜像

docker images

2、启动镜像

docker run -d --name container_name \ //-d表示容器后台运行 --name指定容器名字
-p 7474:7474 -p 7687:7687 \ //映射容器的端口号到宿主机的端口号
-v /home/neo4j/data:/data \ //把容器内的数据目录挂载到宿主机的对应目录下
-v /home/neo4j/logs:/logs \ //挂载日志目录
-v /home/neo4j/conf:/var/lib/neo4j/conf \ //挂载配置目录
-v /home/neo4j/import:/var/lib/neo4j/import \ //挂载数据导入目录
--env NEO4J_AUTH=用户名/密码 \ //设定数据库的名字的访问密码,用于web界面使用
neo4j //指定使用的镜像

合并成一条执行语句

docker run -d --name neo4j -p 7474:7474 -p 7687:7687 -v /home/neo4j/data:/data -v /home/neo4j/logs:/logs -v /home/neo4j/conf:/var/lib/neo4j/conf -v /home/neo4j/import:/var/lib/neo4j/import --env NEO4J_AUTH=neo4j/neo4j neo4j

3、修改配置文件

修改内容如下:

dbms.default_listen_address=0.0.0.0
dbms.bolt.listen_address=0.0.0.0:7687
dbms.http.listen_address=0.0.0.0:7474
dbms.default_database=neo4j # 设置默认数据库名字

dbms.memory.pagecache.size=512M

cypher.forbid_shortestpath_common_nodes= false
dbms.tx_log.rotation.retention_policy=100M size
dbms.directories.logs=/log

4、启动neo4j

a、进入镜像

docker exec -it neo4j bash

b、输入 neo4j status 查看neo4j 使用状态

neo4j status

没启动结果如下:

c、执行neo4j start 启动

neo4j start

执行结果如下:

输入 neo4j status 查看启动状态,如下表示已经成功了

5、在浏览器中访问查看neo4j数据库

在浏览器输入 http://localhost:7474/

输入用户名密码进入如下界面表示图数据库创建成功:

6、快速导入数据

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 InseterBatch Importneo4j-import
适用场景1~1w nodes1w~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-admin import \
    --nodes=import/account.csv \
    --nodes=import/products.csv \
    --nodes=import/device.csv \
    --nodes=import/wlan_mac.csv  \
    --relationships=import/relationships.csv   \
    --database=neo4j \
    --skip-duplicate-nodes=true \
    --ignore-empty-strings=true

例子中的数据结构为:
        如果您调用 neo4j-import 没有参数的脚本,它将列出一个全面的帮助页面。

        该 --database=neo4j 显然是目标数据库,其中不能包含现有数据库。

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

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

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

  • 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等

 2、制作数据源

  • account.csv 
    customerID:IDnameis_account:LABEL
    8411112222test1Customer
    8411112223test1Customer
    8411113333test1Customer
    8411114444test1Customer
    8411114445test1Customer
    8411114446test1Customer
    8411117777test1Customer
    841112233test1Customer
    844445555test1Customer
  • device.csv
deviceID:IDname:LABEL
0000455ad14e2f62b76feab98cc4203c1f5578b2Redmi Note 5A PrimeDevice
00005c6a3b296d075320a70e7756693bc19885ecRedmi Note 5ADevice
0000681484a23b03c160701090a3d389d032203eInfinix X680BDevice
000079ebe883fe325a4ea560db7a43737f9371c3vivo 1718Device
0000d8b3062c2721368c1712ea2695d2d9dad433vivo 1904Device
00010436c4308dfd38b2c59e11caed26f82d6b97vivo 1918Device
0001d3af4d6c6f5486a7083a321dbfac2744815bA37fDevice
0001e13e071e771ea8c9e999ad9fb6e59c564957SM-G530HDevice
0001e2202d7ef8dde77239dc78332fb767bb1c98SM-A015FDevice
  • wlan_mac.csv
    WlanMacID:IDname:LABEL
    00:00:00:00:73:3100:00:00:00:73:31WlanMac
    00:00:00:11:35:D700:00:00:11:35:D7WlanMac
    00:00:00:80:00:0000:00:00:80:00:00WlanMac
    00:00:01:14:96:F900:00:01:14:96:F9WlanMac
    00:00:01:F8:D7:A100:00:01:F8:D7:A1WlanMac
    00:00:08:22:43:6000:00:08:22:43:60WlanMac
    00:00:08:5B:A3:2B00:00:08:5B:A3:2BWlanMac
    00:00:0A:F2:E0:AE00:00:0A:F2:E0:AEWlanMac
    00:00:0E:32:72:A400:00:0E:32:72:A4WlanMac
  • relationsshpes.csv
    :START_ID:END_ID:TYPE
    84111122220000455ad14e2f62b76feab98cc4203c1f5578b2use
    841111222300005c6a3b296d075320a70e7756693bc19885ecuse
    84111133330000681484a23b03c160701090a3d389d032203euse
    8411114444000079ebe883fe325a4ea560db7a43737f9371c3use
    84111144450000d8b3062c2721368c1712ea2695d2d9dad433use
    841111444600010436c4308dfd38b2c59e11caed26f82d6b97use
    84111177770001d3af4d6c6f5486a7083a321dbfac2744815buse
    8411122330001e13e071e771ea8c9e999ad9fb6e59c564957use
    8444455550001e2202d7ef8dde77239dc78332fb767bb1c98use
    841111222200:00:00:00:73:31links
    841111222300:00:00:11:35:D7links
    841111333300:00:00:80:00:00links
    841111444400:00:01:14:96:F9links
    841111444500:00:01:F8:D7:A1links
    841111444600:00:08:22:43:60links
    841111777700:00:08:5B:A3:2Blinks
    84111223300:00:0A:F2:E0:AElinks
    84444555500:00:0E:32:72:A4links
    84111122228411112223knows
    84111122238411114444knows
    84111133338411114444knows
    84111144448411114445knows
    84111144458411114446knows
    84111144468411117777knows
    8411117777841112233knows
    8411122338411112223knows
    8444455558411112223knows

    3、导入数据

    • 上传文件至服务器/home/neo4j/import目录
    • 删除原数据库neo4j
      cd /home/neo4j/data/databases/
      rm -rf neo4j
      cd /home/neo4j/data/transactions/
      rm -rf neo4j
    • 进入镜像:
      docker exec -it neo4j bash
    • 执行语句:
       

      bin/neo4j-admin import --nodes=import/account.csv  --nodes=import/device.csv --nodes=import/wlan_mac.csv  --relationships=import/relationships.csv     --database=neo4j --skip-duplicate-nodes=true --ignore-empty-strings=true
      

    • 重启镜像
       

      docker restart neo4j

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值