按照手册的快速入门,本地部署操作,基本没什么问题。有一些注意事项NebulaGraph Database 手册 (nebula-graph.com.cn)
默认安装路径在/usr/local/nebula
ip的问题
- 在步骤3的时候
$ ./nebula-console -addr <ip> -port <port> -u <username> -p <password>
[-t 120] [-e "nGQL_statement" | -f filename.nGQL]
- 注意这里,-addr <ip>用本机的ip,-port <port>可以用默认的端口,graph的默认端口是9669,和配置文件中的一致,配置文件在安装路径的etc文件夹中
- 由于我是在容器中安装测试的nebulagraph,所以需要查看容器的ip地址,就得退出容器,在主服务器中运行
docker inspect <container_id> | grep IPAddress
- 其他的都用默认即可,例如,我打开nebula-console的命令是
./nebula-console -addr 172.17.0.2 -port 9669 -u root -p 12345678
修改配置文件
- 需要去修改配置文件,不然在步骤四注册Storage服务的时候会出错
- 修改nebula-graphd.conf、nebula-metad.conf、nebula-storaged.conf三个配置文件
- 三个配置文件类似,主要是把这两个ip改为本机ip
nebulagraph三个服务对应的端口号
- graph对应的默认端口号9669
- meta对应的默认端口号9559
- storage对应的默认端口号9779
然后增加storage主机,ip还是本机ip,记得端口号是9779
显示Status "ONLINE"就对了
Nebula-importer
接下来用nebula-importer从本机导入csv文件
我是用对应的二进制包安装的,nebulagraph的版本是3.6,对应下载的安装包版本是4.0Release NebulaGraph Importer 4.1.0 · vesoft-inc/nebula-importer (github.com)
然后直接用命令
dpkg -i <package_name>
默认安装路径在/usr/bin
然后要自己创建yaml配置文件,复制并修改官网上的配置文件内容使用 NebulaGraph Importer - NebulaGraph Database 手册 (nebula-graph.com.cn)
有几个地方需要注意:
Client
client:
version: v3
address: "172.17.0.2:9669" # 要改为自己的ip
user: root
password: 12345678 # 改为自己的用户名和密码
ssl:
enable: false
certPath: "/home/xxx/cert/importer.crt"
keyPath: "/home/xxx/cert/importer.key"
caPath: "/home/xxx/cert/root.crt"
insecureSkipVerify: false
concurrencyPerAddress: 10
reconnectInitialInterval: 1s
retry: 3
retryInitialInterval: 1s
manager
manager:
spaceName: mars_test_1 # 改为要创建的SPACE的名字
batch: 128
readerConcurrency: 50
importerConcurrency: 512
statsInterval: 10s
hooks:
before:
- statements:
- |
DROP SPACE IF EXISTS mars_test_1; # 改为要创建的SPACE的名字
CREATE SPACE IF NOT EXISTS mars_test_1(vid_type=FIXED_STRING(30)); # 改为要创建的SPACE的名字,并且vid_type要先指定,指定为String比较方便
USE mars_test_1; # 改为要创建的SPACE的名字
CREATE TAG IF NOT EXISTS observationobject(id string, name string); # 这里就是先创建了一个tag,然后csv文件对应的也是这个tag,csv文件里的内容是实体
这是对应的csv数据文件
# 在这里先定义好schema,就是创建好tag什么的,不知道直接在console里创建好行不行,但是为了方便统一,我还是直接在这里定义
wait: 10s
after:
- statements:
- |
SHOW SPACES;
log
log:
level: INFO
console: true
files:
- /usr/local/nebula/logs/nebula-importer.log # 需要自己创建
Source
sources:
- path: /home/nebulagraph/observationobject.csv # csv文件的位置
batch: 256
csv:
delimiter: "," # csv文件的分隔符,用“,”作为分隔符的时候,如果属性里有“,”,需要把整个用双引号括起来CSV格式特殊字符转义处理_csv转义字符-CSDN博客
withHeader: false
lazyQuotes: false
tags:
- name: observationobject # tag的名字
# mode: INSERT
# filter:
# expr: Record[1] == "XXX"
id:
type: "STRING"
#function: "hash" #这是用哈希函数,这里如果用了哈希函数,输出就是int,如果这里要用哈希函数,那么在前面CREATE TAG的时候就要把vid设置为整数
index: 0 # 用什么作为vid,这里我直接用第一列作为vid
#concatItems:
#- person_
#- 0
#- _id
props: # 属性和前面的CREATE TAG那里对应
- name: "id"
type: "STRING"
index: 0
- name: "name"
type: "STRING"
index: 1
import数据
进入nebula-importer安装文件夹,运行
./nebula-importer --config <yaml file path>
显示这个应该就是成功了
检索实验
为了测试,把文件改了,两个天体顶点,在属性v.name里,有两个取值,用英文逗号分隔,看看检索的时候,用CONTAINS就可以通过检索一个值找到这个顶点
当前的csv文件
检索属性中含有“火星”字段的顶点,
> MATCH (v) \
-> WITH v, properties(v) as props, keys(properties(v)) as kk \
-> WHERE [i in kk where props[i] CONTAINS "火星"] \
-> RETURN v;
得到结果
OK成功!
TODO
接下来要看真实数据去了,真实数据很大,应该要用到集群部署,单机怕是不够了。感觉集群部署又是很多坑。唉。
WithHeader功能
今天测试了一下真实数据和WithHeader功能。有表头配置说明 - NebulaGraph Database 手册 (nebula-graph.com.cn)
tag:observed_region_withheader,第一行是表头,直接在csv文件里配置好了,就不用在yaml配置文件里配置了。
数据文件是这样的
还是第一列是vid,表头写成 :VID(string)
第二列开始是属性,用 tagname.property: 数据类型 的形式,例如我这里第二列是name,表头就是 observed_region_wither.name: string
然后是yaml配置文件中
csv.withHeader参数设置为true,tag.id表示VID,还是定义index: 0,即用第一列作为VID,就可以了
目前的yaml配置文件,记录一下
client:
version: v3
address: "172.17.0.2:9669"
user: root
password: 12345678
ssl:
enable: false
certPath: "/home/xxx/cert/importer.crt"
keyPath: "/home/xxx/cert/importer.key"
caPath: "/home/xxx/cert/root.crt"
insecureSkipVerify: false
concurrencyPerAddress: 10
reconnectInitialInterval: 1s
retry: 3
retryInitialInterval: 1s
manager:
spaceName: import_observed_region_withheader_test
batch: 128
readerConcurrency: 50
importerConcurrency: 512
statsInterval: 10s
hooks:
before:
- statements:
- |
DROP SPACE IF EXISTS import_observed_region_withheader_test;
CREATE SPACE IF NOT EXISTS import_observed_region_withheader_test(vid_type=FIXED_STRING(50));
USE import_observed_region_withheader_test;
CREATE TAG IF NOT EXISTS observed_region_withheader(name string, alias string);
wait: 10s
after:
- statements:
- |
SHOW SPACES;
log:
level: INFO
console: true
files:
- /usr/local/nebula/logs/nebula-importer.log
sources:
- path: /home/nebulagraph/SearchData_Mars_Solar/vertex/observed_region_withheader.csv
batch: 256
csv:
delimiter: ","
withHeader: true
lazyQuotes: false
tags:
- name: observed_region_withheader
# mode: INSERT
# filter:
# expr: Record[1] == "XXX"
id:
type: "STRING"
# #function: "hash"
index: 0
#concatItems:
# - object_
# - 0
# - _id
props:
- name: "name"
type: "STRING"
index: 1
- name: "alias"
type: "STRING"
index: 2
插入边和边的检索(withheader)
在csv文件中定义,测试的边是观测台站的载荷,"Observation_Carry_Instrument",没有属性,如果边有属性的话就在后面加一列属性,edgename.propertyname: 数据类型,即可。当前的csv文件是
第一列是 source的VID :SRC_VID(string),第二列是destination的VID :DST_VID(string)
然后在yaml配置文件中,定义schema,先要创建边
- 在manager.hooks.before.statements里加上CREATE EDGE IF NOT EXISTS Observation_Carry_Instrument();
- 在sources里加上边
- path: /home/nebulagraph/SearchData_Mars_Solar/edge_withheader/Observation_Carry_Instrument_withheader.csv
batch: 256
edges:
- name: Observation_Carry_Instrument
src:
id:
type: "STRING"
index: 0
好了以后可以测试一下检索,检索observation这个tag下所有点的所有边
> MATCH (v: observation) -[e]->() RETURN e