nebula 版本:2.0.0 rc
部署方式 Docker:
我使用 nebula 数据库作为知识存储,开发了一个知识图谱的 API, 其中有一个三元组插入的接口。但在调用过程中,我连续插入 1 万条左右的三元组的时候就会开始报错:
我初始化 nebula 是这样写的:
object NebulaManager {
@JvmStatic
var connection: Connection? = null
@JvmStatic
var nebulaPoolConfig = NebulaPoolConfig()
@JvmStatic
lateinit var pool: NebulaPool
@JvmStatic
lateinit var session: Session
}
fun start(): Boolean {
nebulaPoolConfig.maxConnSize = 10
pool = NebulaPool()
pool.init(addresses, nebulaPoolConfig)
NebulaManager.session = pool.getSession(user, password, false)
return true}
请问是不是我初始化做得不对呀~
address,port 这些都写了。我不知道是不是因为我 maxConnSize 设置得不对,或者是要加一些其他的类似 setTimeout 或 setIdleTime 等的配置?
yee
2021 年2 月 4 日 06:37
4
上面的调用栈没看到跟 nebula 有关的,能展开看看是 client 的哪里抛出来的吗?
yee
2021 年2 月 4 日 07:47
6
上面的代码是你们自己包的 HTTP Server 的处理吧,这块没涉及到 nebula 的部分呀。是因为 nebula 的 client 哪里有问题导致了你们 api 出错吗?还是你们封装的 http server 有问题,连接不上导致,看错误是 connection error
请问一下你们有改过 LOOKUP ON entity WHERE entity.name ==“ ”;的语句嘛。因为我昨天打的镜像能用的,今天突然这里就报错了。
数据库这个查出来是正常的,这样的:
但是我 API 里面用这个地方的时候:
今天查询结果就不对了,显示的 ResultSet 是 null
yee
2021 年2 月 4 日 08:30
8
你是用的 nebula 的 v2-nightly 镜像吗?LOOKUP 最近应该是没做修改。
你可以打印一下出错的 Query 语句是什么?
我自己的 API 项目打的镜像。查询语句就是 LOOKUP ON entity WHERE entity.name == '周杰伦'
,报错是因为没拿到结果,但是这个语句我在数据库里查是有结果的。我在 client 里是这样写的:
val searchEntityID = "LOOKUP ON entity WHERE entity.name == '周杰伦'"
val resSearchEntityID: ResultSet = session.execute("USE $graphSpace;$searchEntityID")
println(resSearchEntityID.colValues("VertexID")[0])
resSearchEntityID.colValues("VertexID")[0]
拿到的应该就是这个 VertexID,但是今天拿不到了。
主要是我没改过我的代码,这个昨天能跑的,今天就不能了。。
yee
2021 年2 月 4 日 08:44
10
问题变成了,同样的语句连的同一个 graphd 的服务,console 中有结果,client 没有结果?那你最近有更新 nebula-java client 吗?
我发现问题了。好像是因为我在 client 中执行了:
session.execute(USE baike;LOOKUP ON entity WHERE entity.name == '周杰伦';)
这个语句昨天可以一起执行,今天就不行了,必须得分开。。
session.execute(USE baike;)
session.execute(LOOKUP ON entity WHERE entity.name == '周杰伦';)
不然会出现这个错误:
yee
2021 年2 月 4 日 09:01
12
本地最新的 2.0 代码不能复现问题:
(fass@nebula) [(none)]> use nba; lookup on player where player.name == "Tim Duncan"
+--------------+
| VertexID |
+--------------+
| "Tim Duncan" |
+--------------+
Got 1 rows (time spent 76792/78583 us)
Thu, 04 Feb 2021 17:01:14 CST
(fass@nebula) [nba]>
umm…问下还会经常有这种问题嘛。。这样很难上线用呀
yee
2021 年2 月 4 日 09:17
16
我在 v2.0.0-rc1 的版本上也进行了验证,也没有问题:
(fass@nebula) [(none)]> use nba; lookup on player where player.name == "Tim Duncan"
+--------------+
| VertexID |
+--------------+
| "Tim Duncan" |
+--------------+
Got 1 rows (time spent 8968/10057 us)
Thu, 04 Feb 2021 17:16:45 CST
(fass@nebula) [nba]>
能否进入你连接的那个 graphd 的容器,执行一下 /usr/local/nebula/bin/neubla-graphd --version 查看一下版本信息?类似如下:
$ docker-compose exec graphd sh
sh-4.2# cd /usr/local/nebula/bin/
sh-4.2# ./nebula-graphd --version
nebula-graphd version 5713b46, Git: 5713b46, Build Time: Jan 6 2021 15:27:00
This source code is licensed under Apache 2.0 License, attached with Common Clause Condition 1.0.
啊好像是 user 权限的问题。我用 root 权限就可以,但是刚用的 admin 权限的就不可以了。
yee
2021 年2 月 4 日 09:22
18
你意思是如果是使用的 admin 权限,那么就不能把 USE 和 LOOKUP 连在一起用,分开是没问题,如果是 root 用户就没有这个问题,对吗?
嗯嗯对的。
我版本信息是
nebula-graphd version 1dd1de0, Git: 1dd1de0, Build Time: Feb 2 2021 02:31:16
This source code is licensed under Apache 2.0 License, attached with Common Clause Condition 1.0.
yee
2021 年2 月 4 日 09:27
20
感谢你的验证。这应该是个 BUG。
创建 admin 角色的用户
使用这个用户执行 USE xxx; LOOKUP ON xxx...
, 失败
分别执行 USE xxx
和 LOOKUP ON xxx
成功
行为不一致。
@tom-chensf 在我们环境上验证一下这个问题吧
cc @steam 记个 bug,同时 assign 给 @Shylock-Hg