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

INSERT and UPSERT #5733

Closed
ppr1011 opened this issue Oct 5, 2023 · 2 comments
Closed

INSERT and UPSERT #5733

ppr1011 opened this issue Oct 5, 2023 · 2 comments

Comments

@ppr1011
Copy link

ppr1011 commented Oct 5, 2023

https://docs.nebula-graph.com.cn/3.6.0/3.ngql-guide/12.vertex-statements/1.insert-vertex/
Hi,你们好!这篇文档中提到INSERT时如果没有使用IF NOT EXISTS,新写入的数据会覆盖旧数据,不存在时会新写入,那么不就和upsert的功能重复了吗?另外upsert有计划支持相同tag下并发操作吗,不然业务得自己加锁控制,效率很低。

@ppr1011 ppr1011 changed the title upsert和insert其实是一样的? INSERT其实已经包含了UPSERT的功能? Oct 5, 2023
@zilongjiao
Copy link

INSERT和UPSERT的主要区别在于对数据的读取而不是写入。

如果没有使用IF NOT EXISTS,INSERT会直接覆盖重复点的属性,效率会明显高于UPSERT。原因是UPSERT每次都需要先读取点的信息来决定是插入还是更新这个点,所以会慢一些。如果可以事先确认之前点的信息可以安全覆盖,使用INSERT效率会更高。

如果使用了IF NOT EXISTS,并且试图用INSERT插入拥有不同属性的点,那么这个点不会被插入,其属性也不会被覆盖/更改。同样的情况,如果使用UPSERT的话,这个点的属性则可以被更改。

@ppr1011
Copy link
Author

ppr1011 commented Oct 6, 2023

INSERT和UPSERT的主要区别在于对数据的读取而不是写入。

如果没有使用IF NOT EXISTS,INSERT会直接覆盖重复点的属性,效率会明显高于UPSERT。原因是UPSERT每次都需要先读取点的信息来决定是插入还是更新这个点,所以会慢一些。如果可以事先确认之前点的信息可以安全覆盖,使用INSERT效率会更高。

如果使用了IF NOT EXISTS,并且试图用INSERT插入拥有不同属性的点,那么这个点不会被插入,其属性也不会被覆盖/更改。同样的情况,如果使用UPSERT的话,这个点的属性则可以被更改。

明白了,感谢~

@wey-gu wey-gu changed the title INSERT其实已经包含了UPSERT的功能? INSERT and UPSERT Oct 6, 2023
@QingZ11 QingZ11 closed this as completed Oct 20, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants