社区动态
Pick of the Week'20 | 第 24 周看点--UPSERT 实践
每周五 Nebula 为你播报每周看点,每周看点由固定模块:特性讲解、Nebula 产品动态、社区问答、推荐阅读,和随机模块:本周大事件构成。
即将送走的是 2020 年第 24 个工作周的周五,转眼大半年快过去了 🌝 来和 Nebula 一块回顾下本周图数据库和 Nebula 有什么新看点~~
特性讲解
UPSERT
是一项结合了 INSERT
和 UPDATE
功能的语法。
- 如果顶点或边不存在,则会新建该顶点或边,未
SET
的属性字段使用该字段 Schema 的默认值,如果未设置默认值不存在时则报错; - 如果该顶点或者边存在,且满足 WHEN 条件,则会执行更新;
- 如果该顶点或者边存在,且不满足 WHEN 条件,则不会进行任何操作。
UPSERT
在语法上简化了插入新数据前先判断点或边是否存在这一操作,插入性能低于 INSERT
,因此不适合大量数据写入的场景。
下面来实践一下:
- 本次所用到的 tag 是 player,未指定 name 和 age 属性的默认值
(user@nebula) [test]> show create tag player
==========================================================================================
| Tag | Create Tag |
==========================================================================================
| player | CREATE TAG player (
name string,
age int
) ttl_duration = 0, ttl_col = "" |
------------------------------------------------------------------------------------------
Got 1 rows (Time spent: 1.024/1.973 ms)
- 插入点 100,然后更新点 100 的 name、age 属性
(user@nebula) [test]> INSERT VERTEX player(name, age) VALUES 100:("Ben Simmons", 22);
Execution succeeded (Time spent: 1.039/1.711 ms)
(user@nebula) [test]> UPSERT VERTEX 100 SET player.name = "Dwight Howard", player.age = $^.player.age + 11 WHEN $^.player.name == "Ben Simmons" && $^.player.age > 20 YIELD $^.player.name AS Name, $^.player.age AS Age;
=======================
| Name | Age |
=======================
| Dwight Howard | 33 |
-----------------------
Got 1 rows (Time spent: 2.834/3.612 ms)
- 为不存在的点 400,执行插入属性 age + 1 操作时,因 age 属性无默认值而执行失败。
(user@nebula) [test]> fetch prop on * 400
Execution succeeded (Time spent: 5.038/5.875 ms)
(user@nebula) [test]> UPSERT VERTEX 400 SET player.age = $^.player.age + 1;
[ERROR (-8)]: Maybe vertex does not exist, part: 1, error code: -100!
本周大事件
NebulaGraph 1.0 发布了。作为一款开源分布式图数据库,NebulaGraph 1.0 版本旨在提供一个安全、高可用、高性能、具有强表达能力的查询语言的图数据库。
社区问答
Pick of the Week 每周会从官方论坛、微博、知乎、微信群、微信公众号及 CSDN 等渠道精选问题同你分享。
本周分享的主题是【无法连接外网情况下安装 NebulaGraph】,由社区用户 zhaohaifei 提出,NebulaGraph 官方解答。
zhaohaifei 提问:没有办法连接外网,就无法自动下载 NebulaGraph 所需的依赖文件,此时应如何安装?能否提供一个所有依赖均已下载好,并放入源码目录下的版本,使得安装时不需要再下载。
Nebula:如果在编译源码时无法连接网络,则必须手动下载这些工具和依赖,包括 NebulaGraph 仓库中的 GCC 编译器,第三方库和 CMake。然后,将所有这些复制到你的机器上。以下是快速指南。您仍然需要参考上述步骤以获取更多详细信息。
首先,需要有一台可以连接外网的主机,在主机上面下载下面的文件:
# 请注意,尽管我们使用命令行来演示,但是您可以通过浏览器执行所有下载。
# 下载 GCC
# RedHat 或 CentOS 用户
$ wget https://oss-cdn.nebula-graph.com.cn/toolset/vesoft-gcc-7.5.0-CentOS-x86_64-glibc-2.12.sh
# Debian 或 Ubuntu 用户
$ wget https://oss-cdn.nebula-graph.com.cn/toolset/vesoft-gcc-7.5.0-Debian-x86_64-glibc-2.13.sh
# 下载 CMake
$ wget https://cmake.org/files/v3.15/cmake-3.15.5-Linux-x86_64.sh
# 下载第三方库
$ wget https://oss-cdn.nebula-graph.com.cn/third-party/vesoft-third-party-x86_64-libc-2.12-gcc-7.5.0-abi-11.sh
然后,将这些软件包复制到你的机器:
# 安装 GCC
# RedHat 或 CentOS 用户
$ sudo bash vesoft-gcc-7.5.0-CentOS-x86_64-glibc-2.12.sh
# Debian 或 Ubuntu 用户
$ sudo bash vesoft-gcc-7.5.0-Debian-x86_64-glibc-2.13.sh
# 启用 GCC 安装
$ source /opt/vesoft/toolset/gcc/7.5.0/enable
# 安装 CMake
$ sudo bash cmake-3.15.5-Linux-x86_64.sh --skip-license --prefix=/opt/vesoft/toolset/cmake
# 将安装好的 CMake 的 bin 目录加到 PATH 里面
$ export PATH=/opt/vesoft/toolset/cmake:$PATH
# 安装第三方库
$ sudo bash vesoft-third-party-x86_64-libc-2.12-gcc-7.5.0-abi-11.sh
推荐阅读
- 往期 Pick of the Week
本期 Pick of the Week 就此完毕,如果你对本周看点或 NebulaGraph 有任何建议,欢迎前去 GitHub:https://github.com/vesoft-inc/nebula 或者官方论坛:https://discuss.nebula-graph.com.cn 向我们提出。交流图数据库技术?加入 Nebula 交流群请先填写下你的 Nebula 名片,Nebula 小助手会拉你进群~~
星云·小剧场
为什么给图数据库取名 Nebula ?
Nebula 是星云的意思,很大嘛,也是漫威宇宙里面漂亮的星云小姐姐。对了,Nebula 的发音是:[ˈnɛbjələ]
本文星云图讲解--《螺旋星系 M96》
在这张美丽宇宙岛的彩色细致影像里,尘埃带看似绕着 M96 中心打转。显然 M96 是一个螺旋星系,它的跨幅大约是 10 万光年,大小约莫和我们的银河系相当。M96 亦名为 NGC 3368,其距离约为 3 千 5 百万光年远,是狮子座 I 星系群的大型成员。
资料来源 | Robert Nemiroff (MTU) & Jerry Bonnell (UMCP), Phillip Newman (NASA); 图片来源 | NASA Official