nebula-python执行效率低

  • nebula 版本:基于Nebula1.1.0修改版
  • 部署方式(分布式 / 单机 / Docker / DBaaS):Docker版本,1metad,3graphd,5storaged;其中graphd使用haproxy转发请求实现负载均衡。
  • 硬件信息
    • 磁盘(SSD / HDD):SSD
    • CPU、内存信息:
  • 问题描述
    使用nebula-console连接docker图数据库执行复杂查询,查询耗时约10~20s,使用Nebula-Python库执行查询,则耗时约8min,想辛苦帮忙看一下问题。版本号:nebula-python 1.0.2
       # self.connect_pool是nebula.ConnectionPool对象
        _conn = self.connect_pool.get_connection()
        resp = _conn.authenticate(self._config['user'], self._config['password'])
        if not resp.error_code:
            session_id = resp.session_id
            # Transform Space Name.
            _conn.execute(session_id, "USE {space}".format(space=space))
            response = _conn.execute(session_id, command)
            self.connect_pool.release_conn(_conn)
            return response
        self.connect_pool.release_conn(_conn)
        raise Exception("Authenticate failed, response:%s" % resp)

你执行的query是怎样的?还有你看console的时间,看的又是哪个?
python从socket读数据会比console慢很多,这是会的,但是不至于一个10几秒,一个几分钟

GO FROM hash(vid1) OVER edge REVERSELY yield hash(+$$.type1.property1) as vid2 | GO FROM $-.vid2 over edge yield edge._dst as vid3, $$.type2.property2 as fpc, $$.type2.property3

Console的时间看的是这个:image
用Python-Client的耗时:image
t5-t6是执行的时间,可以看到耗时约400s

建议你将用pythonclient和console执行的结果打印出来,然后贴图。看console的结果,返回没啥数据,时间应该差不多才对。

结果数据量挺大的,有大约900万条结果…

然后你的console没有刷屏?console两个时间怎么可能差这么少,你确定是连的是同个服务吗?

呃,问过同事了,Console是加了limit的,所以很快。。
这个有办法加速么?

mark

假如 900 万数据拿回来都是要用的,那么这个没办法,那么大的数据,网络传输和数据处理就要花很长时间。或者你和console一样加个限制