neo4j 快速搭建应用

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 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-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:ID name is_account :LABEL
    8411112222 test 1 Customer
    8411112223 test 1 Customer
    8411113333 test 1 Customer
    8411114444 test 1 Customer
    8411114445 test 1 Customer
    8411114446 test 1 Customer
    8411117777 test 1 Customer
    841112233 test 1 Customer
    844445555 test 1 Customer
  • device.csv
deviceID:ID name :LABEL
0000455ad14e2f62b76feab98cc4203c1f5578b2 Redmi Note 5A Prime Device
00005c6a3b296d075320a70e7756693bc19885ec Redmi Note 5A Device
0000681484a23b03c160701090a3d389d032203e Infinix X680B Device
000079ebe883fe325a4ea560db7a43737f9371c3 vivo 1718 Device
0000d8b3062c2721368c1712ea2695d2d9dad433 vivo 1904 Device
00010436c4308dfd38b2c59e11caed26f82d6b97 vivo 1918 Device
0001d3af4d6c6f5486a7083a321dbfac2744815b A37f Device
0001e13e071e771ea8c9e999ad9fb6e59c564957 SM-G530H Device
0001e2202d7ef8dde77239dc78332fb767bb1c98 SM-A015F Device
  • wlan_mac.csv
    WlanMacID:ID name :LABEL
    00:00:00:00:73:31 00:00:00:00:73:31 WlanMac
    00:00:00:11:35:D7 00:00:00:11:35:D7 WlanMac
    00:00:00:80:00:00 00:00:00:80:00:00 WlanMac
    00:00:01:14:96:F9 00:00:01:14:96:F9 WlanMac
    00:00:01:F8:D7:A1 00:00:01:F8:D7:A1 WlanMac
    00:00:08:22:43:60 00:00:08:22:43:60 WlanMac
    00:00:08:5B:A3:2B 00:00:08:5B:A3:2B WlanMac
    00:00:0A:F2:E0:AE 00:00:0A:F2:E0:AE WlanMac
    00:00:0E:32:72:A4 00:00:0E:32:72:A4 WlanMac
  • relationsshpes.csv
    :START_ID :END_ID :TYPE
    8411112222 0000455ad14e2f62b76feab98cc4203c1f5578b2 use
    8411112223 00005c6a3b296d075320a70e7756693bc19885ec use
    8411113333 0000681484a23b03c160701090a3d389d032203e use
    8411114444 000079ebe883fe325a4ea560db7a43737f9371c3 use
    8411114445 0000d8b3062c2721368c1712ea2695d2d9dad433 use
    8411114446 00010436c4308dfd38b2c59e11caed26f82d6b97 use
    8411117777 0001d3af4d6c6f5486a7083a321dbfac2744815b use
    841112233 0001e13e071e771ea8c9e999ad9fb6e59c564957 use
    844445555 0001e2202d7ef8dde77239dc78332fb767bb1c98 use
    8411112222 00:00:00:00:73:31 links
    8411112223 00:00:00:11:35:D7 links
    8411113333 00:00:00:80:00:00 links
    8411114444 00:00:01:14:96:F9 links
    8411114445 00:00:01:F8:D7:A1 links
    8411114446 00:00:08:22:43:60 links
    8411117777 00:00:08:5B:A3:2B links
    841112233 00:00:0A:F2:E0:AE links
    844445555 00:00:0E:32:72:A4 links
    8411112222 8411112223 knows
    8411112223 8411114444 knows
    8411113333 8411114444 knows
    8411114444 8411114445 knows
    8411114445 8411114446 knows
    8411114446 8411117777 knows
    8411117777 841112233 knows
    841112233 8411112223 knows
    844445555 8411112223 knows

    3、导入数据

    • 上传文件至服务器/home/neo4j/import目录
    • 删除原数据库neo4j
      1.  
        cd /home/neo4j/data/databases/
      2.  
        rm -rf neo4j
      3.  
        cd /home/neo4j/data/transactions/
      4.  
        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
       

       

 
posted @ 2021-06-28 19:02  伏地僧  阅读(390)  评论(0)    收藏  举报