NGCP 错题解析 vol.02:这 10 道题竟无一人全部答对

如果你读过「NebulaGraph 错题解析第一期」,大概知道在错题解析未出来之前,NebulaGraph 专业技能认证 NGCP(全称 NebulaGraph Certified Professional)的通过率仅有 16.7%。但是,经过上一轮 NebulaGraph 认证考试出题人错题解析的努力下,这次 NGCP 的通过率上升 0.1%,现在变成了 16.8%。出题人痛定思痛,决定再开一期错题解析,如果你两期都看了,运气足够好,现在去考 NGCP 闭眼就是 19 分起步了,你导再也不担心你从零考起了。

下面,来看一眼这期错题解析有哪些难题呢?

题 1:「判断题」目前 NebulaGraph Studio、Explorer、Dashboard 社区版、Dashboard 企业版登录时的身份验证是基于 NebulaGraph 本身的身份认证逻辑。

正确答案:错误

解析:

NebulaGraph Studio、Explorer 和 Dashboard 社区版登录时需要输入 NebulaGraph 本身的账密,但是 Dashboard 企业版因为需要管理所有 NebulaGraph 集群,所以有自己的单独一套权限管理系统,登录时可以使用多种账户类型。参考文档:https://docs.nebula-graph.com.cn/3.3.0/nebula-dashboard-ent/5.account-management/

题 2:「单选题」NebulaGraph 的第一个开源版本是

A. v0.1.0

B. v0.0.1

C. v1.0.0

D. v0.0.1

正确答案:A

解析:

2019.5 发布了 v0.1.0 alpha 版本并开源。参考文档:https://docs.nebula-graph.com.cn/3.3.0/20.appendix/history/

题 3:「单选题」下列关于大小写的说法,错误的是

A. 标识符区分大小写

B. 保留关键字不区分大小写

C. 函数不区分大小写

D. 非保留关键字区分大小写

正确答案:D

解析:

标识符会区分大小写,例如 my_space 和 MY_SPACE 是两个不同的图空间。关键字,包括保留关键字和非保留关键字,都是不区分大小写的,例如我们平常写 nGQL 命令 show spaces 或者 SHOW SPACES,都是可以正常执行的。函数也是不区分大小写的,例如count() 和 COUNT()。参考文档:https://docs.nebula-graph.com.cn/3.3.0/3.ngql-guide/1.nGQL-overview/identifier-case-sensitivity/

题 4:「单选题」以下关于 Storage 服务中数据分片说法错误的是

A. NebulaGraph 的分片策略采用动态 Hash 的方式

B. 创建图空间时需指定分片数量,分片数量设置后无法修改

C. 同一个点的所有标签、出边和入边信息都会存储到同一个分片

D. Meta 服务负责存储和管理分片的位置信息

正确答案:A

解析:

NebulaGraph 的分片策略是静态 Hash。创建图空间时需要设置分片和副本数量,然后均衡分配到所有 Storage 节点上以保证数据安全,修改分片数量涉及到数据迁移,因此暂时不支持直接修改分片数量。NebulaGraph 采用切边方式将图切割,例如一个点存储在分片 x 中,kv 中会包含 VID 和 Tag 信息,然后挨着这条 kv,继续按顺序存储它的出边和入边,所以都在同一个分片。也因此,边会重复存储,因为点 a 的出边可能是点 b 的入边。Meta 服务负责存储和管理分片的位置信息,并且保证分片的负载均衡。参考文档:https://docs.nebula-graph.com.cn/3.3.0/1.introduction/3.nebula-graph-architecture/4.storage-service/#_5

题 5:「多选题」下列语句正确的是

A. RETURN timestamp(“2021-07-05T06:18:43.984000”);

B. MATCH (v:date1) RETURN v.date1.month;

C. WITH date({year: 1984, month: 10, day: 11}) AS x RETURN day + 1;

D. WITH time({hour: 12, minute: 31, second: 14}) AS d RETURN d;

正确答案:BD

解析:

选项 A 错误是因为不支持微秒,可以改成 RETURN timestamp("2021-07-05T06:18:43");RETURN timestamp("2021-07-05T06:18:43.000000");。选项 C 错误是因为语法错误,RETURN 的应该是 x+1,而不是 day+1。参考文档:https://docs.nebula-graph.com.cn/3.3.0/3.ngql-guide/3.data-types/4.date-and-time/#timestamp

题 6:「多选题」以下关于用户角色与权限的说法错误的是

A. 如需创建自定义角色,要同时在配置文件中修改 custom_role 和 role_privilege 参数

B. 一个用户在一个图空间内只能拥有一个角色权限

C. SHOW SPACES 只会返回当前用户有权限的空间

D. 只有 God 角色可以执行 SHOW USERS 和 SHOW SNAPSHOTS 语句

正确答案:A

解析:

NebulaGraph 暂时还不支持创建自定义角色,这两个参数也是完全的欺骗内容。一个用户在一个图空间内只能拥有一个角色权限,可以用 SHOW ROLES IN <space_name>; 查看具体权限。为了数据安全,SHOW SPACES 只会返回当前用户有权限的空间,也就是至少要对图空间有 GUEST 权限,才能看到该图空间。同样也是为了数据安全,只有最高权限的 God 角色账号才能执行 SHOW USERS 查看所有用户,以及 SHOW SNAPSHOTS 查看快照情况。参考文档:https://docs.nebula-graph.com.cn/3.3.0/7.data-security/1.authentication/3.role-list/

题 7:「单选题」以下哪项关于 BR 限制说法错误的是

A. Nebula Graph 版本需要为 v3.3.0

B. Nebula Listener 暂时不支持备份,且全文索引也不支持备份

C. 数据备份过程中,指定图空间中的 DDL、DML、DCL 和 TCL 语句都会阻塞

D. 数据恢复仅支持在相同拓扑的集群上进行

正确答案:C

解析:

数据备份过程中,指定图空间中的 DDL 和 DML 语句将会阻塞,其他语句不会阻塞。另外 D 选项所说的相同拓扑集群,是指集群的 Storage 主机数量及 IP 需一致。参考文档:https://docs.nebula-graph.com.cn/3.3.0/backup-and-restore/nebula-br/1.what-is-br/

题 8:「单选题」以下关于 NebulaGraph Exchange 说法错误的是

A. Writer 会将待导入的数据一次性写入到 NebulaGraph 中

B. Reader 读取不同来源的数据返回 DataFrame

C. Exchange 由 Reader、Processor 和 Writer 三部分组成

D. Processor 遍历 DataFrame 获取对应的值

正确答案:A

解析:

Writer 在遍历指定批处理的行数(batch 参数)后,会将获取的数据一次性写入到 NebulaGraph 中,而不是将待导入的数据一次性写入,那样做数据量太大会导致 OOM。参考文档:https://docs.nebula-graph.com.cn/3.3.0/nebula-exchange/about-exchange/ex-ug-what-is-exchange/

题 9:「单选题」以下关于运行日志错误的是

A. Meta 服务、Graph 服务和 Storage 服务的日志级别可以在各自的配置文件中查看,默认路径为 /usr/local/nebula/etc/

B. 日志详细级别值越大,日志记录越详细

C. 不能在 NebulaGraph 运行过程中删除日志目录,如果删除目录则日志不再打印且影响业务

D. 可以手动修改日志的级别

正确答案:C

解析:

在 NebulaGraph 运行过程中删除运行日志目录,日志不会继续打印,但是不会影响业务。重启服务可以恢复正常。参考文档:https://docs.nebula-graph.com.cn/3.3.0/5.configurations-and-logs/2.log-management/logs/#_2

题 10:「单选题」运行日志文件占用空间过大如何处理?以下选项中最合理的是

A. 运行用于删除日志的 nGQL 命令

B. 使用 crontab 设置定期任务回收日志文件

C. 使用 logrotate 回收日志

D. 肉眼识别删除日志

正确答案:C

解析:

nGQL 命令暂无删除日志的命令,因此 A 选项错误。选项 D 可以直接排除。对于 B 和 C 选项,crontab 虽然可以,但是 logrotate 可以更好地转储压缩日志文件,还可以结合 crontab 做更完善的自动任务,所以综合来看还是 logrotate 更合理。参考文档:https://docs.nebula-graph.com.cn/3.3.0/20.appendix/0.FAQ/#_11

谢谢你读完本文 (///▽///)

看完错题解析的小伙伴,可以来 NebulaGraph Academy 考一把 NGCP 或者 NGCI 认证考试哟~

在春节假期期间通过 NGCI 或者 NGCP 认证考试的小伙伴,除了有常规的证书和周边奖励之外,前 10 名通过 NGCI 或者通过 NGCP(不限排序)的小伙伴将获得 NebulaGraph 限量的兔年幸运公仔一只

点击这里,开启你的鸿图之旅吧:NebulaGraph 认证考试,考试说明:NebulaGraph 技能认证

1 个赞

变态难啊

66.在basketballplayer图空间中,运行MATCH (v) RETURN v会返回:

A. 所有点的信息

B. 错误信息matching all vertices is not supported

C. 错误信息Scan vertices or edges need to specify a limit number, or limit number can not push down.——错误选项

D. 错误信息syntax error near ‘RETURN’

Feedback:如果是MATCH (v) RETURN v,将会报答案C中的错误。MATCH (v) RETURN v LIMIT n则可以顺利执行。
请问一下,正确选项到底是哪个啊

(root@nebula) [basketballplayer]>  match (v) return v
+---------------------------------------------------------------+
| v                                                             |
+---------------------------------------------------------------+
| ("player114" :player{age: 39, name: "Tracy McGrady"})         |
| ("player150" :player{age: 20, name: "Luka Doncic"})           |
| ("team204" :team{name: "Spurs"})                              |
| ("team218" :team{name: "Raptors"})                            |
| ("team229" :team{name: "Heat"})                               |
| ("player105" :player{age: 31, name: "Danny Green"})           |
| ("player109" :player{age: 34, name: "Tiago Splitter"})        |
| ("player111" :player{age: 38, name: "David West"})            |
| ("player118" :player{age: 30, name: "Russell Westbrook"})     |
| ("player143" :player{age: 23, name: "Kristaps Porzingis"})    |
| ("team207" :team{name: "Clippers"})                           |
| ("team211" :team{name: "Pelicans"})                           |
| ("team221" :team{name: "Bulls"})                              |
| ("team222" :team{name: "Hawks"})                              |
| ("player103" :player{age: 32, name: "Rudy Gay"})              |
| ("player113" :player{age: 29, name: "Dejounte Murray"})       |
| ("player121" :player{age: 33, name: "Chris Paul"})            |
| ("player128" :player{age: 34, name: "Carmelo Anthony"})       |
| ("player130" :player{age: 25, name: "Joel Embiid"})           |
| ("player136" :player{age: 45, name: "Steve Nash"})            |
| ("team205" :team{name: "Thunders"})                           |
| ("team213" :team{name: "Mavericks"})                          |
| ("team215" :team{name: "Hornets"})                            |
| ("player102" :player{age: 33, name: "LaMarcus Aldridge"})     |
| ("player106" :player{age: 25, name: "Kyle Anderson"})         |
| ("player115" :player{age: 40, name: "Kobe Bryant"})           |
| ("player129" :player{age: 37, name: "Dwyane Wade"})           |
| ("player138" :player{age: 38, name: "Paul Gasol"})            |
| ("team209" :team{name: "Timberwolves"})                       |
| ("team225" :team{name: "Bucks"})                              |
| ("team226" :team{name: "Magic"})                              |
| ("player108" :player{age: 36, name: "Boris Diaw"})            |
| ("player122" :player{age: 30, name: "DeAndre Jordan"})        |
| ("player123" :player{age: 28, name: "Ricky Rubio"})           |
| ("player139" :player{age: 34, name: "Marc Gasol"})            |
| ("player142" :player{age: 29, name: "Klay Thompson"})         |
| ("player145" :player{age: 31, name: "JaVale McGee"})          |
| ("team228" :team{name: "Wizards"})                            |
| ("player127" :player{age: 42, name: "Vince Carter"})          |
| ("player132" :player{age: 24, name: "Giannis Antetokounmpo"}) |
| ("player135" :player{age: 28, name: "Damian Lillard"})        |
| ("player146" :player{age: 33, name: "Dwight Howard"})         |
| ("player147" :player{age: 36, name: "Amar'e Stoudemire"})     |
| ("player148" :player{age: 45, name: "Jason Kidd"})            |
| ("team206" :team{name: "Jazz"})                               |
| ("team210" :team{name: "Lakers"})                             |
| ("team219" :team{name: "76ers"})                              |
| ("team227" :team{name: "Nets"})                               |
| ("player100" :player{age: 42, name: "Tim Duncan"})            |
| ("player101" :player{age: 36, name: "Tony Parker"})           |
| ("player110" :player{age: 27, name: "Cory Joseph"})           |
| ("player126" :player{age: 26, name: "Kyrie Irving"})          |
| ("player131" :player{age: 28, name: "Paul George"})           |
| ("player133" :player{age: 38, name: "Yao Ming"})              |
| ("player140" :player{age: 46, name: "Grant Hill"})            |
| ("team202" :team{name: "Rockets"})                            |
| ("team208" :team{name: "Kings"})                              |
| ("team216" :team{name: "Cavaliers"})                          |
| ("team217" :team{name: "Celtics"})                            |
| ("team223" :team{name: "Knicks"})                             |
| ("team224" :team{name: "Pistons"})                            |
| ("player104" :player{age: 32, name: "Marco Belinelli"})       |
| ("player107" :player{age: 32, name: "Aron Baynes"})           |
| ("player116" :player{age: 34, name: "LeBron James"})          |
| ("player120" :player{age: 29, name: "James Harden"})          |
| ("player125" :player{age: 41, name: "Manu Ginobili"})         |
| ("player137" :player{age: 40, name: "Dirk Nowitzki"})         |
| ("team200" :team{name: "Warriors"})                           |
| ("team203" :team{name: "Trail Blazers"})                      |
| ("team220" :team{name: "Pacers"})                             |
| ("player124" :player{age: 33, name: "Rajon Rondo"})           |
| ("team214" :team{name: "Suns"})                               |
| ("player112" :player{age: 29, name: "Jonathon Simmons"})      |
| ("player117" :player{age: 31, name: "Stephen Curry"})         |
| ("player119" :player{age: 30, name: "Kevin Durant"})          |
| ("player134" :player{age: 30, name: "Blake Griffin"})         |
| ("player141" :player{age: 43, name: "Ray Allen"})             |
| ("player144" :player{age: 47, name: "Shaquille O'Neal"})      |
| ("player149" :player{age: 22, name: "Ben Simmons"})           |
| ("team201" :team{name: "Nuggets"})                            |
| ("team212" :team{name: "Grizzlies"})                          |
+---------------------------------------------------------------+
Got 81 rows (time spent 9.301ms/12.716934ms)

Sat, 07 Sep 2024 13:43:28 CST
1 个赞

目前最新版本实际情况是 A。如果 A 不对,那就是题目答案错了

1 个赞

感谢解答

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。