一、安装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的导入方式有很多,我大概总结了一下:
- Cypher CREATE 语句,为每一条数据写一个CREATE
- Cypher LOAD CSV 语句,将数据转成CSV格式,通过LOAD CSV读取数据。
- 官方提供的Java API —— Batch Inserter
- 大牛编写的 Batch Import 工具
- 官方提供的 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
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
- 上传文件至服务器/home/neo4j/import目录