提问参考模版:
- nebula 版本:2.5.0
- 部署方式:单机
- 安装方式:RPM
- 问题的具体描述
nebula 2.5.0的Python客户端读取数据按照示例程序中的实现,对edge遍历时,while循环一次默认读取10000条边,读取大文件时非常耗时,我测试时读本地的图数据库中的500万条边耗时约半小时,有没有方法可以加快读取速度呢?
提问参考模版:
贴一下硬件信息,还有 Python 客户端这块的读取配置。
硬件:
机器数量:1台 (单机测试)
服务器型号:Sugon X740-H30
操作系统版本:Centos7.6 (x86)
CPU型号:Hygon C86 7155 16-core Processor
CPU个数:2
CPU核数:16
内存:128G
Python3.6.8
from nebula2.mclient import MetaCache, HostAddr
from nebula2.sclient.GraphStorageClient import GraphStorageClient
import pandas as pd
import numpy as np
import os
import time
# 连接本地nebula数据库,并遍历边数据;
def scan_space_edge(graph_storage_client):
# scan edge
resp = graph_storage_client.scan_edge(
space_name = "facebook",
edge_name = "relation")
edge_id = []
# 遍历边edge数据
while resp.has_next():
cnt = 0
result = resp.next()
print('Py reading nebula data .........')
for edge_data in result:
# srcId = edge_data.get_src_id().as_string()
# dscId = edge_data.get_dst_id().as_string()
# srcId, dscId = int(srcId), int(dscId)
# edge_id.append([srcId, dscId])
cnt += 1
print('while cnt:',cnt)
def link_nebula():
meta_cache = None
graph_storage_client = None
result_edge = []
try:
meta_cache = MetaCache([('127.0.0.1', 9559)], 50000)
graph_storage_client = GraphStorageClient(meta_cache)
# print("--- Py link nebula success ---\n")
start_t = time.time()
scan_space_edge(graph_storage_client)
print("Py read nebula edges data cost: ", round(time.time() - start_t, 2), "s")
except Exception as x:
import traceback
print(traceback.format_exc())
if graph_storage_client is not None:
graph_storage_client.close()
exit(1)
finally:
if graph_storage_client is not None:
graph_storage_client.close()
if meta_cache is not None:
meta_cache.close()
# link_nebula()
这块的result = resp.next() 一次是10000条,能不能修改参数啥的可以一次读的多点;
CPP客户端一个是我编译了之后运行报错:
./session_example: error while loading shared libraries: libnebula_graph_client.so: cannot open shared object file: No such file or directory
另外一个是用cpp暂时不会从nebula中拿数据,C++初学者;所以现在暂时用Python来读
由于python语言本身的性能导致反序列化的时候效率低, 没有什么好的提升方法, 建议还是用cpp或者exchange工具来读数据
python 一个是解码很慢,另外就是因为有 GIL 多线程其实最多只能用一个核。
也可以用 Java 的客户端,nebula-java/StorageClientExample.java at master · vesoft-inc/nebula-java · GitHub
cpp读大数据的效率如何
cpp的scan接口好像没有这方面的性能数据,不过你可以在业务层并发的进行数据读取。 如果你会java或者scala的话 可以用spark connector 进行大量数据读取,性能在readme中有说明 https://github.com/vesoft-inc/nebula-spark-connector
好的谢谢
cpp客户端运行示例时,报错找不到libnebula_graph_client.so,系统中有两个同名文件,怎么选啊?
[root@11ceeffa88ce nebula-cpp]# cd examples/
[root@11ceeffa88ce examples]# ls
CMakeLists.txt SessionExample.cpp
[root@11ceeffa88ce examples]# LIBRARY_PATH=/usr/local/nebula/lib64:$LIBRARY_PATH g++ -std=c++11 SessionExample.cpp -I/usr/local/nebula/include -lnebula_graph_client -o session_example
[root@11ceeffa88ce examples]# ls
CMakeLists.txt SessionExample.cpp session_example
[root@11ceeffa88ce examples]# ./session_example
./session_example: error while loading shared libraries: libnebula_graph_client.so: cannot open shared object file: No such file or directory
[root@11ceeffa88ce examples]# find / -name "libnebula_graph_client.so"
/usr/local/nebula/lib64/libnebula_graph_client.so
/nebula-cpp/build/lib/libnebula_graph_client.so
cpp的我也不了解 等其他同学回复你吧
cpp的问题目前已解决,现在还不太会用,能不能提供下基于cpp 遍历某个space的所有边的示例代码参考下,我也是C++新手;谢谢
谢谢!我之前clone的2.5版本没有这个文件
我也遇到同样的问题