有多个图空间的场景下,每次执行ngql都需要use space,性能较差

实现nebula客户端的连接池功能,在多个图空间一起共用的场景下,use space放在连接初始化的时候,切换不同的库时需要重新use space,有没有好的方案

每个链接固定使用不同的space

可以为每个 space 创建一个连接池

如何每个 space 创建一个连接池那要维护很多连接池,能否像mysql一样,在ngql里面指定具体的空间,类似数据库名.表名这种方式

您好,这个没有更好的方案了,因为我们的client session设计如此,2.0我们在重写client,应该就能方便很多

我觉得这个提议可以找 PM 小姐姐 @jude-zhu 加到需求评审列表中

@715168372 你可以自己建立一个 map 保存 space和sessions 的对应关系,session 不要进行signout释放,space的信息是在的。然后你要操作对应的space,你就从来里面拿相应是session就好。

1 个赞

用python客户端,每次get_session,要先认证,再use space,然后才是用户的query。

一个查询要3次通信,这设计不太对吧,认证信息和space应该缓存在连接里吧,已经认证过的就别再发起一次通信了

:thinking: session 可以不释放啊,不需要一个语句一个 session 的,你可以看下这个文章的内容 Nebula Graph 源码解读系列|客户端的通信秘密——fbthrift

我提个建议哈,把认证信息、use space在connection一层存住,不改变,不发送。

这样用户每次with一个新的session来用,session很轻量,就不必考虑多线程的问题了。

按照现状,session很重,需要自己处理缓存:一个线程拿到session后,存在thread-local变量,后面复用,这样可以吧?

你前面说的没太看明白,按你的想法,多个 session 同时使用一个 connection 么?

因为 connection 的 tcp 通信,不能多线程并发使用一个 connection,所以我们现在一个 session 绑了一个 connection。