Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

使用nebula-jdbc或nebula-java获取session的问题 #441

Closed
mathlpz opened this issue Feb 14, 2022 · 6 comments
Closed

使用nebula-jdbc或nebula-java获取session的问题 #441

mathlpz opened this issue Feb 14, 2022 · 6 comments
Labels
type/enhancement Type: make the code neat or more efficient

Comments

@mathlpz
Copy link

mathlpz commented Feb 14, 2022

使用nebula-jdbc或nebula-java获取session的问题:
nebula 版本:2.5.1
nebula-java版本 :2.5.0
部署方式:分布式
安装方式:RPM
是否为线上版本: N
硬件信息
磁盘:200G SSD
CPU、内存信息:8核16G
问题的具体描述:
目前基于java语言使用nebula-jdbc开发后端服务系统,遇到了如下几个问题:
1、在nebula-java客户端代码中,java代码获取nsid(即sessionId),只能通过SyncConnection吗?NebulaDriver和Connection都获取不到sessionId。获取sessionId的示例:
SyncConnection connection = new SyncConnection();
connection.open(new HostAddress(“127.0.0.1”,“9669”), 1000);
AuthResult authResult = connection.authenticate(req.getUsername(), req.getPassword());
String nsid = String.valueOf(authResult.getSessionId());

2、做java服务端开发,首次获取到nsid(sessionId)后,需要自己保存维护吧?后续调用其它接口(如gql查询execute接口)需要带上nsid查询,避免每次都重新获取数据库连接。但是目前看client源码,只有SyncConnection的执行方法有通过sessionID查询的方案,其它像Connection查询方法没有通过sessionID查询方法,都是每次要重新获取数据库连接。

3、是否有java语言使用nebula-jdbc(或nebula-java)开发的系统平台demo,可供参考学习?

@mathlpz
Copy link
Author

mathlpz commented Feb 17, 2022

java代码获取session问题,可参见topic问答内容:
https://discuss.nebula-graph.com.cn/t/topic/7533/7
可直接用NebulaPool中getSession获取session后,在服务中维护使用。但是,目前Java客户端的Session不支持序列化,所以在分布式系统中存在无法序列化的问题。
临时的解决方案是:在每个worker节点上单独初始化连接池,获取Session维护使用(如果work节点停掉,session即消失)。
问题点:希望后续版本能尽快支持session序列化功能。

@mathlpz mathlpz changed the title 使用nebula-jdbc或nebula-java获取sessionId的问题 使用nebula-jdbc或nebula-java获取session的问题 Feb 17, 2022
@Minnull
Copy link

Minnull commented Nov 3, 2022

等一个

@wey-gu
Copy link
Contributor

wey-gu commented Nov 3, 2022

等到了!nebula-java 3.3.0 引入了 session pool,现在可以愉快地使用 session pool 了哈!

session = pool.getSession("root", "nebula", false);

@wey-gu
Copy link
Contributor

wey-gu commented Nov 3, 2022

@mathlpz @Minnull

@Minnull
Copy link

Minnull commented Nov 3, 2022

等到了!nebula-java 3.3.0 引入了 session pool,现在可以愉快地使用 session pool 了哈!

session = pool.getSession("root", "nebula", false);

我看这个还无法直接在业务逻辑中使用,因为每次获取session还都会new session,所以需要自己在外面维护一个session列表重复利用吗?
找到了,最新版本已经有了session池:https://github.com/vesoft-inc/nebula-java/blob/master/client/src/main/java/com/vesoft/nebula/client/graph/SessionPool.java

@wey-gu
Copy link
Contributor

wey-gu commented Nov 3, 2022

没错,这是 session pool,不是 connection pool

@Sophie-Xie Sophie-Xie added the type/enhancement Type: make the code neat or more efficient label Nov 30, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type/enhancement Type: make the code neat or more efficient
Projects
None yet
Development

No branches or pull requests

4 participants